Python pip - 源代码中的可编辑安装,具有在setup.py中指定的其他本地依赖项

时间:2016-01-13 16:27:20

标签: python pip setuptools

我有一系列以Python egg开发的插件,它们位于具有以下目录结构的subversion存储库中:

├───project1
│   ├───app_plugin
│   │       setup.py
│   │
│   ├───plugin1
│   │   │   setup.py
│   │   │
│   │   └───python
│   │       │   __init__.py
│   │       │
│   │       └───package
│   │               code.py
│   │               __init__.py
│   │
│   └───plugin2
└───project2
    └───plugin3

然后我有一个活跃的virutalenv,并希望使用pip从源代码执行app_plugin及其依赖项(plugin1plugin2plugin3)的可编辑安装进入virtualenv的网站包。

如果它只是要安装的app_plugin蛋,并且它只有PyPI上可用的依赖项,我可以使用这个pip命令:

pip install -e project1/app_plugin

但是因为依赖项是本地源目录而且没有上传到PyPI的包,所以pip无法找到它们。

使用setuptools可以很容易地单独安装/开发依赖项,但是它们有数百种,我需要递归地解决它们的依赖项,并且能够像主应用程序插件一样继续开发它们。

以前(在pip存在之前)我们有一个脚本,它使用主要应用程序egg的依赖关系,并使用setup.py develop安装它们,这是pip -e应该做的但只是为了一个蛋

是否可以使用pip来解决本地依赖关系以及来自PyPI的任何依赖关系?

1 个答案:

答案 0 :(得分:0)

如果您考虑使用python wheel(the new python packaging standard)而不是鸡蛋,那么如果我正确理解您的问题,可以通过非常简单的方式完成。

步骤1)将每个插件和您的应用程序编译为轮子

python setup.py bdist_wheel

步骤2)创建一个包含所有轮子的驾驶室目录

步骤3)从virtualenv

中的缓存轮盘安装您的应用程序
pip install --use-wheel --no-index --find-links=/tmp/wheelhouse app_plugin

有关更多信息,请参阅: Usage of cached wheelswheelhouse package(这个驾驶室包裹不是必需的,我没有尝试过但可能会有所帮助)。

注意:这不是您问题的直接解决方案,但是可以自动化的解决方案,我相信解决了潜在的问题。