Python运行包无需安装

Ste*_*fan 5 python python-2.7

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

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

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

python -m cogapp <additional args>

一切都按预期运行。

该包有一个__main__.py脚本:

import sys
from cogapp import Cog

sys.exit(Cog().main(sys.argv))
Run Code Online (Sandbox Code Playgroud)

我尝试直接运行它,例如:

python -m <path>/__main__ <additional_args>

但我收到错误:

...
/__main__.py", line 3, in <module>
    from cogapp import Cog
ImportError: No module named cogapp
Run Code Online (Sandbox Code Playgroud)

这可能与我运行时得到的错误有关__init__.py

from .cogapp import *

错误是:

    from .cogapp import *
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

如何将包作为包运行?

编辑

我通过从 中删除所有相关导入cogapp并删除 -m(即不作为模块运行)找到了解决方法。在这种情况下,这还不错,因为它是一个只有一个目录的小包。但是,我对将来应该如何做到这一点很感兴趣。围绕这个主题写了很多东西,但没有明确的答案!

Geo*_*rge 2

这是我找到的解决方案。

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

$ mkdir newhome
$ python setup.py install --home=./newhome
$ PYTHONPATH=$PWD/newhome/lib/python <COMMAND_NEEDING_THAT_PACKAGE>
Run Code Online (Sandbox Code Playgroud)