Python虚拟环境(venv):在使用和开发/测试venv中共享库。

4

我对python venv比较新,所以可能会问一些愚蠢的问题。

我正在开发一个小型库。我已经创建了带有所有必要包的dev虚拟环境,并冻结了所有需要使用的库的版本到 requirements.txt 中。

我还想创建 requirements_test.txt 文件,其中包含了开发和测试所需的所有包。这样,用户将从 requirements.txt 安装所需的库,而开发人员则从 requirements_test.txt 中安装所有必要的库(例如pytest、asv、sphinx)。

现在我已经创建了 dev 环境,接下来我想要创建 test 环境,但我当然不想重复安装同样的库。是否可以从一个 venv 中共享某些库到另一个 venv 中呢?

4个回答

3
有没有可能从一个虚拟环境中共享一些库到另一个虚拟环境中?
不行。同一个库(或应用程序)将在每个虚拟环境中安装一次,这些安装无法在环境之间共享。这样做是完全可以的。这就是虚拟环境的全部意义所在,即来自同一库的两个安装彼此隔离,特别是对于需要为两个不同项目使用同一库的两个不同版本的情况。
完全公平地说,有方法可以在两个虚拟环境之间共享同一库的安装并且存在这样做的原因。我目前知道的一个著名例子是在较新的virtualenv(20+版本)中。简而言之:该工具创建虚拟环境,并且(在特定条件下)能够在多个环境中重复使用(共享)pipsetuptoolswheel的安装,请参见virtualenvapp-data种子
更多关于该主题的讨论:

0

您可以使用 virtualenv --system-site-packages 来在开发和用户之间建立符号链接进行共享。然后添加特定于开发的测试软件包。


-1

我认为建议在同一台机器上拥有多个虚拟环境,并且拥有多个环境是值得推荐和建议的。因此,只需再创建另一个虚拟环境即可。在两个虚拟环境中都使用同一个库不会有问题。


1
如果venv只需要一个或两个不同的库,那么这很快就会累积起来。当你有5-6个不同的venv,每个venv都拥有自己的tf或torch版本时...但我想这更多是一个工程/标准化问题。 - icedwater

-1
即使使用虚拟环境,Python 预装了许多库,但这些库在你开发的项目中可能并不必要。当我在全新的虚拟环境中运行 pip freeze 命令时,会输出 30 个包,而这些包对我的项目来说显然是不需要的。
我建议你手动维护依赖关系(至少是生产环境的依赖关系),这样你就不会包含无用的库,并且可以保持你的依赖文件干净整洁。

我很好奇:“在一个全新的虚拟环境中,它会卸载30个软件包”,这怎么可能呢? - sinoroc
你好。谢谢你的回答。在我的新使用 venv 中没有任何包。通过冻结软件包,您可以保护自己免受缺少要求的影响。稍后,您可以删除一些行,例如,如果您使用的库有自己的要求。 - LinearLeopard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接