我有一个包裹:
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来使程序包正确运行,或者可能存在该问题的另一种解决方案?