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



我知道有两个建议的做法似乎是相互矛盾的:

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

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

理想情况下,我希望能够将新的依赖项安装到我的源代码控制库中的虚拟环境中,签入它,然后其他开发人员在更新时将获得正确的依赖项,无论他们的系统Python安装了什么库都没有冲突。但是我意识到,将整个虚拟环境检查到源代码控制中会有一个问题,因为不同的开发人员可能运行不同的解释器(基于他们的操作系统),并且可能需要不同的扩展构建。也许这限制了我使用这种方法的程度。

那么,是否存在一种折衷方案,既能最大限度地减少每台机器上需要手动安装的库的数量,又能尽可能多地保持在源代码控制中,以减少软件包从互联网上消失的风险?

我会将一个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和pip的组合来实现您想要的。使用pip,您可以使用以下命令冻结需求:

pip freeze > requirements.txt

在另一个虚拟环境中,您可以使用:

pip install -r requirements.txt

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

最新更新