5

作为构建系统的一部分,我使用的是 Python 包 (cogapp) 的修改版本。我不想安装该软件包,因为:

  1. 我已经修改了软件包,不想担心与可能已经安装的未修改版本发生冲突。
  2. 如果构建系统的用户不需要安装额外的包,那就更好了。

但是,如果未安装该软件包,我在使用该软件包时会遇到问题。如果安装,我可以运行:

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 找到了解决方法,即不作为模块运行。在这种情况下,它并不算太糟糕,因为它是一个只有一个目录的小包。但是,我对将来应该如何做到这一点很感兴趣。围绕这个主题写了很多东西,但没有明确的答案!

4

1 回答 1

2

这是我找到的解决方案。

免责声明:您实际上是在安装软件包,但安装的路径与标准路径不同。

$ mkdir newhome
$ python setup.py install --home=./newhome
$ PYTHONPATH=$PWD/newhome/lib/python <COMMAND_NEEDING_THAT_PACKAGE>
于 2014-01-22T17:54:57.960 回答