保持不变,从pyenv-virtualenv切换到pipenv时共享virtualenvs

问题描述 投票:1回答:1

我开始看pipenv,看起来很不错。我唯一担心的是,我的大部分项目涉及numpyscipy和其他一些不那么小的图书馆。

目前的方式管理我的项目:我安装了pyenvpyenv-virtualenv。我有几个(目前是4个)特定的virtualenvs,每个都迎合一种类型的项目。项目本身有.pyenv-version设置,我有启用pyenv的自动加载virtualenv功能。如果我需要分享一个项目,我会从requirements.txt生成pip freeze -lvirtualenv

因此,在我目前的设置中,我有X项目数量和Y, Y << X数量virtualenvs,所有相当于几GB的硬盘空间。请注意,由于像numpy这样的大型库,每个virtualenvs都非常大,大约700-900 MB。

我的问题:

据我了解,pipenv默认会为我的所有项目创建一个virtualenv,因此我的virtualenvs占用的硬盘空间会大大增加。我感兴趣的是:

  • 是否可以跨多个项目共享pipenv环境,这些项目使用完全相同的依赖项?即加载相同的pipenv的多个virtualenv配置?
  • 如果没有,是否有可能从我用pipenv设置的virtualenv生成pyenv配置文件?即我不会使用pipenv来实际运行我的项目,我不会用virtualenvs创建任何pipenv,但我会创建pipenv配置文件以共享项目(在这种情况下,可能也在requirements.txt旁边)。

编辑:我重写了大部分问题,以使其更清晰。

python virtualenv pipenv pyenv
1个回答
1
投票

pipenv似乎不适合您的特定工作流程,因为它以项目为中心而非以环境为中心。 pipenv将虚拟环境视为不稳定,并保留在情况需要时自由更改虚拟环境的权利。您可以使用它,但是在您的环境发生变化的情况下,由于pipenv更加严格,所以保持所有项目同步将是一件痛苦的事。

您可以为pipenv显式指定用于项目by creating a .venv file in the project root with a path to it的虚拟环境(通常,virtualenvs是在具有自动生成的名称的特定位置创建的,其中包含项目路径的哈希值)。这似乎没有记录。

然而,与pipenv不同,virtualenv检查并强制执行虚拟环境具有满足Pipfile条件的精确模块集以及生成的Pipfile.lock中指定的确切“最后测试配置”。

因此,如果您在环境中更改任何软件包版本,则需要:

  • 更新受影响项目中的所有Pipfile.locks(例如,复制已更改的项目)。使用生成的Pipfile,您可以放弃删除它们。
  • 如果有更改,请将受影响项目中的所有Pipfiles更新为新的软件包版本(例如,复制已更改的软件包)
© www.soinside.com 2019 - 2024. All rights reserved.