如果用作包,则为ImportError。包无法导入自己的模块

时间:2017-03-11 12:10:33

标签: python python-import python-module python-packaging

我有一个pytestlib包和模块如下: test.py只是创建module2而module2导入module1。 如果编译并直接在自己的文件夹中运行,test.py代码正在按预期工作。

pyteslib\
    - __init__.py
    - module1.py
    - module2.py
    - test.py

module1.py

class Module1Class():
def __init__(self):
    self.msg ="This message is from Module1Class"

module2.py

from module1 import Module1Class

class Module2Class():
    def __init__(self):
        module1_obj = Module1Class()
        print(module1_obj.msg)

test.py

from module2 import Module2Class

module2_obj = Module2Class()

然而;如果我这个,一个包,并从另一个项目导入我得到一个ImportModule错误。

externaltest.py(在另一个项目中)

导入sys

from pytestlib.module1 import Module1Class # No error importing module1
# from pytestlib.module2 import Module2Class # I have error if import module2


module1_obj = Module1Class()
# module2_obj = Module2Class() # I have error

我有这个错误:

Traceback (most recent call last):
  File "X:/SDK/python/testimp/imp.py", line 3, in <module>
    from pytestlib.module2 import Module2Class
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\pytestlib\module2.py", line 1, in <module>
    from module1 import Module1Class
ImportError: No module named 'module1'

简而言之,在制作软件包之后,软件包的module2.py找不到module1。但是如您所见,module1可以通过externaltest.py直接导入。包无法导入自己的模块。

1 个答案:

答案 0 :(得分:0)

解决方案:使用相对导入

from .module1 import ModuleClass1

Read this answer for a more complete explanation