对Python3中的__import__感到困惑

时间:2016-08-12 09:08:07

标签: python-3.x python-import

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函数?

1 个答案:

答案 0 :(得分:0)

结束问题。 我发现有人问过同样的问题。 链接: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有相同的便利功能。

另见。 http://bugs.python.org/issue21436