چگونه می‌توان یک ماژول را با استفاده از مسیر کامل بصورت پویا ایمپورت کرد؟

mohsen1 سال قبل
ارسال شده در
python

در پایتون، گاهی نیاز است که یک ماژول را با استفاده از مسیر کامل آن، ایمپورت کنیم. برای این کار در پایتون چند روش وجود دارد:

1. استفاده از importlib

از نسخه 3.5 به بالا در پایتون، می‌توانید با استفاده از importlib.util یک ماژول را بوسیله مسیر آن ایمپورت کنید. برای مثال، اگر MyClass در ماژول module.name در مسیر /path/to/file.py تعریف شده باشد، می‌توانید به این شکل عمل کنید:

      import importlib.util
import sys

spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
sys.modules["module.name"] = foo
spec.loader.exec_module(foo)
foo.MyClass()  # اکنون می‌توانید از MyClass استفاده کنید.

    

2. استفاده از SourceFileLoader (برای نسخه‌های قدیمی‌تر پایتون)

اگر از پایتون 3.3 یا 3.4 استفاده می‌کنید، می‌توانید با استفاده از SourceFileLoader این کار را انجام دهید:

      from importlib.machinery import SourceFileLoader

foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()

    

توجه داشته باشید که این راه برای پایتون 3.4 منسوخ شده است.

3. استفاده از imp (پایتون 2)

اگر از نسخه‌های قدیمی‌تر پایتون (مثل پایتون 2) استفاده می‌کنید، می‌توانید از روش زیر بهره ببرید:

      import imp

foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

    

لود از دایرکتوری با افزودن مسیر به sys.path

در صورتی که بخواهید ماژول‌های بیشتری ایمپورت کنید، می‌توانید دایرکتوری ماژول‌ها را به متغیر sys.path اضافه کنید:

      import sys
sys.path.append('/path/to/my/modules/')
import my_module  # اکنون می‌توانید my_module را وارد کنید.

    

افزودن مسیر به sys.path می‌تواند در مواردی که می‌خواهید چندین ماژول را از یک بسته بارگذاری کنید، بسیار مفید باشد.

لود از دایرکتوری با اضافه کردن مسیر به PYTHONPATH

اگر می‌خواهید مسیر ماژول‌ها را به‌طور دائمی اضافه کنید، می‌توانید خط زیر را به فایل .bashrc یا فایل متناسب با محیط خود اضافه کرده و سپس از دستور source ~/.bashrc استفاده کنید:

      export PYTHONPATH="${PYTHONPATH}:/path/to/my/modules/"

    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!