چگونه میتوان یک ماژول را با استفاده از مسیر کامل بصورت پویا ایمپورت کرد؟
در پایتون، گاهی نیاز است که یک ماژول را با استفاده از مسیر کامل آن، ایمپورت کنیم. برای این کار در پایتون چند روش وجود دارد:
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/"