作为构建系统的一部分,我使用的是
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时遇到的错误有关:
来自.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>