اذهب إلى المحتوى
  • 0

إستدعاء ملف بايثون من المجلد الأب

Fahmy Mostafa

السؤال

لدي مجلد يحتوي على عدد من ملفات بايثون كالتالي:

foo/
├── dir/
|  ├── file.py
|  └── boo.py
└── helpers.py

أريد أن أقوم بإستدعاء ملف helpers.py داخل الملف file.py، كيف أقوم بهذا الأمر بإستخدام جملة import؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

هناك عدة طرق لإستدعاء ملف من المجلد الأب ، فيمكنك إضافة المسار الأب الى المسارات التي بايثون سيقوم بالبحث فيها بإستخدام دالة path كالآتي

import sys
sys.path.append("..")
import helpers

كما يمكنك إضافة المسار الأب أو أي مسار تريد إستيراد الوحدات modules منه كالآتي

# إستدعاء دالة sys
import sys
# إضافة المسار الى الرقم 1 لأن 0 هو المسار الحالي
sys.path.insert(1, '/path/to/application/app/folder')
# إستيراد الوحدة من المسار المختلف
import file

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

كما شرح عبدالمجيد فإنه يمكنك إضافة المسار الذي تريده من خلال ال sys.path ويمكنك إضافة المسار بداخله

ولكن إذا أردت أن يكون البرنامج أن يجد المسار الأب تلقائياً يمكنك استخدام ال os.path.abspath() التي تقوم بإرجاع المسار الأب

import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
import helpers

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك ايضاً إستخدام الدالة append لإضافة المسار في حال كنت في نفس المجلد الموجود فيه الملف الذي تريد الوصول إليه:

import sys, os, inspect

currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)

import myfile as f

يبدأ البرنامج أولا بإستيراد الدوال اللازمة، و من ثم لإستيراد file يجب أن يكون مقروء في PYTHONPATH وهي عبارة عن متغير البيئة الذي يقوم بتحميل كل المكتبات و الملفات التي سيتم تحميلها في بايثون لإتمام عملية التنفيذ وهي ايضاً الملفات التي تكون متوفرة في sys.path يتم التحميل كما هو موضح في السطر الثاني، لاحظ أن الفرق بين append و insert هو أن append تقوم بالإضافة في نهاية sys.path مباشرة لكن insert تقوم بإدراجه في مؤشر محدد كما في حالتنا 0.

 

 

تم التعديل في بواسطة Reem Elmahdi
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...