conda、pip、系统和个人软件的最佳实践管理 在我的工作中,我需要C++、FORTRAN和Python代码的混合,在后一种情况下主要通过Cython和Sigg进行交互。它们是广泛使用的库(通常可通过某些包管理系统获得)、特定于我的领域但不是我编写的库(大多数不是在源tarball之外打包的库)和我作为开发人员的库的组合

conda、pip、系统和个人软件的最佳实践管理 在我的工作中,我需要C++、FORTRAN和Python代码的混合,在后一种情况下主要通过Cython和Sigg进行交互。它们是广泛使用的库(通常可通过某些包管理系统获得)、特定于我的领域但不是我编写的库(大多数不是在源tarball之外打包的库)和我作为开发人员的库的组合,python,pip,conda,environment,package-managers,Python,Pip,Conda,Environment,Package Managers,很长一段时间以来,我们一直能够在不太担心Python 3的情况下过日子,因此我在一个~/local安装区域中运行编译软件和基于Python2的软件,在通常的bin、lib、lib/Python2.*/site packages等结构中,使用my.bashrc路径,LD_库路径,PYTHONPATH环境变量中包含的相关子目录路径。但特别是随着机器学习用Python3的兴起,以及不兼容的ML包的增加,我不得不开始为一些项目操作virtualenv目录。这一点,以及系统工具(如meld到Python3

很长一段时间以来,我们一直能够在不太担心Python 3的情况下过日子,因此我在一个
~/local
安装区域中运行编译软件和基于Python2的软件,在通常的
bin
lib
lib/Python2.*/site packages
等结构中,使用my
.bashrc
路径
LD_库路径
PYTHONPATH
环境变量中包含的相关子目录路径。但特别是随着机器学习用Python3的兴起,以及不兼容的ML包的增加,我不得不开始为一些项目操作virtualenv目录。这一点,以及系统工具(如
meld
到Python3)的切换,意味着我单一的、全局的Python2环境不再适合使用

同时,我也意识到康达和康达福格现在正被推出很多相关的软件。所以现在将有系统包和Python版本,可能是conda环境(针对特定的Python),pip包(在VirtualEnv中或不在virtualenvs中),然后是我的个人构建。这需要大量的一致性操作,而且似乎没有太多关于最佳实践的信息,特别是在多个项目之间共享一些代码,以及在非Python库中与这些以Python为中心的工具混合时。在独立的conda或VirtualEnvironment中为每个项目安装一整套手动依赖项将非常难以管理,而且在复制大型库方面会造成浪费,但另一方面,似乎至少需要单独的Python 2/3环境,也许有更多特定于项目的虚拟人

所以,场景设置-,抱歉这么长,但本质上很复杂。是否还有其他人在努力解决这个问题,是否有一种新兴的标准或最佳实践方法来管理系统、conda、pip和手动包依赖性的混合,以开发许多项目,而不产生不必要的重复


注:我很欣赏答案在某种程度上可能是基于意见的,尽管好的答案可以证明他们的建议是正确的。另一方面,它肯定与软件开发有关,而不仅仅是软件管理。因此,我希望这是一个合适的问题,因为我认为在SX网络中没有更好的适合性。

我感觉这可能会以观点为基础,但我只是使用VirtualNVS,尽量不担心浪费空间。我设置了
PIP\u REQUIRE\u VIRTUALENV
,这样我就不会意外地在venv之外安装任何软件包。较大的虚拟机容量约为0.5GB,但我只会有少量虚拟机,所以不用太担心(例如,每个主要项目有一个虚拟机,一个通用虚拟机,一个一次性虚拟机)。主要项目也会有一个
requirements.txt
文件,因此可以相对轻松地重新安装。不确定这是否有帮助,但我认为这类问题最好通过博客来回答