virtualenv如何有效地与源代码管理中存储的库一起使用?

时间:2011-11-29 18:36:21

标签: python version-control dependencies virtualenv

我知道有两种建议的做法似乎彼此不一致:

  1. 在源代码管理中存储项目所需的一切。使用C ++应用程序时,我们会将所有库检查为源代码控制,以便新开发人员始终拥有构建和运行项目所需的一切,即使第三方库不再可在线使用。

  2. virtualenv与Python项目一起使用,将项目及其依赖项与系统Python的升级隔离开来。安装的每个库都存在于virtualenv中,并且通常virtualenvs绑定到特定路径(如文档中所示),并且开发人员期望开发人员自己安装环境,然后可能添加任何依赖的库。

  3. 理想情况下,我希望能够在源代码控制存储库中的virtualenv中安装新的依赖项,检入它,然后其他开发人员在更新时会获得正确的依赖项,无论它们的系统是什么库都没有冲突Python已安装。但我很欣赏将整个virtualenv检查到源代码控制中会出现问题,因为不同的开发人员可能会运行不同的解释器(基于他们的操作系统),并且可能需要不同的某些扩展版本。也许这限制了我采用这种方法的程度。

    那么,是否存在一种折衷方案,可以最大限度地减少需要在每台计算机上完成的库的手动安装量,并且尽可能地保持源代码管理中的数据库以降低程序包从Internet上消失的风险?

2 个答案:

答案 0 :(得分:2)

我会将pip包检查到源代码管理中:http://www.pip-installer.org/en/latest/usage.html#bundles

你可以使用--index-url告诉pip在哪里获取软件包,如果你想将它们存储在你的网络上,这样他们就不必从PyPI或任何地方获取它们:http://www.pip-installer.org/en/latest/usage.html#alternate-package-repositories

每个开发人员都有自己的virtualenv,他们会保持更新。您可以在源代码管理中拥有一个定期运行的更新脚本。

答案 1 :(得分:2)

使用virtualenv和pip的组合可以达到你想要的效果。使用pip,您可以使用以下命令冻结需求:

pip freeze > requirements.txt

在另一个virtualenv环境中,您可以使用以下命令安装需求:

pip install -r requirements.txt

更多阅读:http://www.pip-installer.org/en/latest/requirements.html#freezing-requirements