按路径导入python模块

时间:2011-09-14 14:01:35

标签: python import module path

我有以下不幸的情况:

三个目录(ABC)包含一个带有函数M的python模块F。 (这些目录不是包,不可能改变任何情况。)

我正在寻找一种单独导入它们以访问其功能的方法。我如何导入这些模块以访问F,如下所示:

A.F()
B.F()
C.F()

4 个答案:

答案 0 :(得分:4)

这样可行,但看起来有点不合适......

import sys

sys.path.append("A")
import M as A

sys.path.pop()
del sys.modules['M']

sys.path.append("B")
import M as B

and so on...

答案 1 :(得分:4)

您需要将内容执行到新的本地词典中。您只能将您提到的文件作为文件,而不是模块,然后将它们填入模块类型。

from types import ModuleType

with open("A/M.py") as a:
    A = ModuleType('A')
    exec a.read() in A.__dict__

with open("B/M.py") as b:
    B = ModuleType('B')
    exec b.read() in B.__dict__

with open("C/M.py") as c:
    C = ModuleType('C')
    exec c.read() in C.__dict__

然后根据需要访问它们,如B.F()。唯一的问题是模块元数据设置不正确,因此它将显示为内置。你甚至可以这样做:

import sys
sys.modules['A'] = A
sys.modules['B'] = B
sys.modules['C'] = C

它们可以从应用程序的其他部分导入import A

答案 2 :(得分:1)

在每个A / B /和C /中添加__init__.py。该文件的内容是

from M import F

以下代码应该起作用:

import A, B, C
A.F()
B.F()
C.F()

__init__.py将目录声明为包,并在导入包时执行此文件中的语句。

答案 3 :(得分:-2)

使用import

from A.M import F as A_F