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