0

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

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

模块1.py

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

模块2.py

from module1 import Module1Class

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

测试.py

from module2 import Module2Class

module2_obj = Module2Class()

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

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

导入系统

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直接导入。包不能导入自己的模块。

4

1 回答 1

0

解决方案:使用相对导入

from .module1 import ModuleClass1

阅读此答案以获得更完整的解释

于 2017-03-11T12:34:31.477 回答