如何“正确”连接Python中应用程序之间共享的模块(+依赖项)

时间:2015-02-15 19:01:34

标签: python python-2.7 module dependency-management

有两个应用程序有几个共同的模块,如下所示:

/apps
    /app1
        /.ve
        /requirements.txt
    /app2
        /.ve
        /requirements.txt
/modules
    /module1
        /requirements.txt
    /module2
        /requirements.txt
    /module3
        /requirements.txt
    /module4
        /requirements.txt
  • app1取决于module1module3并使用virtualenv
  • app2取决于module2module3并使用virtualenv
  • module3取决于module4
  • 模块就像是第三方软件包,但是处于活跃的本地开发中。它们只会由application执行,因此它们没有自己的virtualenv
  • 每个应用程序和每个模块都有自己的requirements.txt

我如何“正确”连接这个东西?目标是能够使用单个命令在/apps中为每个应用程序安装整个依赖关系图(如{{1无法自定义脚本)

创意#1

  • pip install -r requirements.txt添加到PYTHONPATH
  • 在requirements.txt中为每个应用程序使用/modules语法

问题:如果两个requirements.txt文件(https://github.com/pypa/pip/issues/2367)中都有任何要求,PIP将无效。如果app1和module1都依赖于django,我需要能够在相应的要求中明确这一点。

创意#2

  • -r ../modules/module1/requirements.txt下的每个模块创建一个鸡蛋/轮/包/任何内容,并在每个应用的需求中引用它们.txt

问题:为了使/modules行为正常而创建鸡蛋需要做很多工作。加上开发会更难 - 每次发生变化时我都要重新安装每个鸡蛋。

1 个答案:

答案 0 :(得分:1)

如果您正在开发这些模块,请为它们提供正确的setup.py并将它们以开发模式安装到两个虚拟环境中,即激活模块,python setup.py develop模块化应用程序virtualenvs。

如果它们没有冲突,您也可以在同一个virtualenv中安装这两个应用程序。