作为构建系统的一部分,我使用的是 Python 包 (cogapp) 的修改版本。我不想安装该软件包,因为:
- 我已经修改了软件包,不想担心与可能已经安装的未修改版本发生冲突。
- 如果构建系统的用户不需要安装额外的包,那就更好了。
但是,如果未安装该软件包,我在使用该软件包时会遇到问题。如果已安装,我可以运行:
python -m cogapp <additional args>
一切都按预期运行。
该软件包有一个__main__.py
脚本:
import sys
from cogapp import Cog
sys.exit(Cog().main(sys.argv))
我尝试直接运行它,例如:
python -m <path>/__main__ <additional_args>
但我得到了错误:
...
/__main__.py", line 3, in <module>
from cogapp import Cog
ImportError: No module named cogapp
这可能与我运行时得到的错误有关__init__.py
:
from .cogapp import *
错误是:
from .cogapp import *
ValueError: Attempted relative import in non-package
如何将包作为包运行?
编辑:
我通过从 中删除所有相对导入cogapp
并删除 -m 找到了解决方法,即不作为模块运行。在这种情况下,它并不算太糟糕,因为它是一个只有一个目录的小包。但是,我对将来应该如何做到这一点很感兴趣。围绕这个主题写了很多东西,但没有明确的答案!