从外部目录运行软件包-导入问题

时间:2019-01-05 11:06:21

标签: python relative-import

我有一个包裹:

mypkg
|-- __init__.py
|-- __main__.py
|-- mod1.py

__ main __。py

from mypkg import mod1

def main():
    print("Hello from mypkg main!")
    print(mod1.mod1_msg())

if __name__ == '__main__':
    main()

文件__init__.py为空。

例如,我需要从指定路径运行mypkg:

python -m mypath.mypkg

以这种方式运行mypkg时,出现错误:

ImportError: cannot import name 'mod1' from 'mypkg' (unknown location)

当我将from mypkg import mod1更改为from . import mod1时可以解决此问题,但PEP8建议绝对导入而不是相对导入。

我发现的另一个解决方案是添加:

import sys
from os import path

sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

__init__.py文件

然后一切正常。

问题是:更好的解决方案是什么?使用相对导入或操纵sys.path来使程序包正确运行,或者可能存在该问题的另一种解决方案?

0 个答案:

没有答案