作为构建系统的一部分,我使用的是 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,即不作为模块运行。在这个例子中,它还算不错,因为它是一个只有一个目录的小包。但是我对将来应该如何完成感兴趣。围绕这个主题写了很多东西,但没有明确的答案!
最佳答案
这是我得出的解决方案。
免责声明:您实际上是在安装软件包,但安装路径与标准路径不同。
$ mkdir newhome
$ python setup.py install --home=./newhome
$ PYTHONPATH=$PWD/newhome/lib/python <COMMAND_NEEDING_THAT_PACKAGE>
关于Python运行包无需安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18466528/