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

Python virtualenv如何有效地与源代码管理中存储的库一起使用?,python,version-control,dependencies,virtualenv,Python,Version Control,Dependencies,Virtualenv,我知道两种建议的做法似乎相互矛盾: 将项目所需的一切存储在源代码管理中。当使用C++应用程序时,我们将检查所有的LIBs为源代码控件,这样新开发人员总是拥有他或她需要的所有东西来构建和运行项目,即使第三方库不再在线可用。 对Python项目使用virtualenv,将项目及其依赖项与对Python系统进行的升级隔离开来。安装的每个库都位于virtualenv中,通常virtualenv都绑定到一个特定的路径(如文档中所建议的),开发人员应该自己安装环境,然后大概添加任何依赖的库 理想情况下,我希

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

  • 将项目所需的一切存储在源代码管理中。当使用C++应用程序时,我们将检查所有的LIBs为源代码控件,这样新开发人员总是拥有他或她需要的所有东西来构建和运行项目,即使第三方库不再在线可用。
  • 对Python项目使用
    virtualenv
    ,将项目及其依赖项与对Python系统进行的升级隔离开来。安装的每个库都位于virtualenv中,通常virtualenv都绑定到一个特定的路径(如文档中所建议的),开发人员应该自己安装环境,然后大概添加任何依赖的库

  • 理想情况下,我希望能够将新的依赖项安装到源代码管理存储库中的virtualenv中,并将其签入,然后其他开发人员在更新时将获得正确的依赖项,而无论他们的系统Python安装了什么库,都不会发生冲突。但我明白,将整个VirtualNV检查到源代码控制中会有一个问题,因为不同的开发人员可能会运行不同的解释器(基于他们的操作系统),并且可能需要某些扩展的不同构建。也许这限制了我用这种方法能走多远


    那么,是否有一种折衷方案可以最大限度地减少每台机器上需要手动安装的库的数量,并尽可能多地保持源代码管理,以减少包从internet上消失的风险?

    我会将pip包检查到源代码管理中:

    如果要将包存储在网络上,则可以使用--index url告诉pip从何处获取包,这样他们就不必从PyPI或其他任何地方获取包:


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

    您可以通过结合使用virtualenv和pip来实现您想要的。使用pip,您可以使用以下方法冻结需求:

    pip freeze > requirements.txt
    
    在另一个VirtualEnvironment上,您可以通过以下方式安装需求:

    pip install -r requirements.txt
    

    更多阅读:

    执行更新的人如何知道他们需要运行第二条指令?那一定要用一个源代码控制钩子来完成吗?是的,可以。或者提供一个自述文件来说明这一点。据我所知,这是一种相当普遍的做法。这解决了可用性问题,但安装软件包仍然是手动完成的,对吗?没有其他方法。每个人都必须安装和更新自己的virtualenv。我认为你在另一篇评论中提到的源代码控制钩子就必须这样做。好的,第二个问题:这些pip包是如何为第三方库工作的?它们会和鸡蛋一起工作吗?不幸的是,那里的文档并没有详细介绍该命令的工作原理。