对 Python3 中的 __import__ 感到困惑
Confused about __import__ in Python3
friends.a.py如何获得b.py模块
fileA
├── fileB
│ ├──a.py
│ └── b.py
└── fileC
└── c.py
在 a.py 文件中,我可以使用此代码从 b.py 和 运行 中获取函数:
module = __import__('b')
fun = getattr(module, 'run')
fun()
如何在 a.py 中获得 c.py 功能?
问题结束。
我发现有人问过同样的问题。
link:How to import a module given the full path?
他的回答:
对于 Python 3.5+ 使用:
import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
对于 Python 3.3 和 3.4 使用:
from importlib.machinery import SourceFileLoader
foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()
(尽管这已在 Python 3.4 中弃用。)
Python 2 使用:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
已编译的 Python 文件和 DLL 有等效的便利函数。
friends.a.py如何获得b.py模块
fileA
├── fileB
│ ├──a.py
│ └── b.py
└── fileC
└── c.py
在 a.py 文件中,我可以使用此代码从 b.py 和 运行 中获取函数:
module = __import__('b')
fun = getattr(module, 'run')
fun()
如何在 a.py 中获得 c.py 功能?
问题结束。 我发现有人问过同样的问题。 link:How to import a module given the full path?
他的回答: 对于 Python 3.5+ 使用:
import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
对于 Python 3.3 和 3.4 使用:
from importlib.machinery import SourceFileLoader
foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()
(尽管这已在 Python 3.4 中弃用。)
Python 2 使用:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
已编译的 Python 文件和 DLL 有等效的便利函数。