从 pyenv-virtualenv 切换到 pipenv 时保持相同的共享 virtualenvs

Keeping the same, shared virtualenvs when switching from pyenv-virtualenv to pipenv

我开始看pipenv,好像还不错。我唯一担心的是,我的大部分项目都涉及 numpyscipy 和其他一些不太小的库。

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

生成一个 requirements.txtpip freeze -l

所以在我当前的设置中,我有 X 个项目和 Y, Y << Xvirtualenvs,总计有几 GB 的硬盘 space。请注意,由于像 numpy 这样的大型库,每个 virtualenvs 都非常大,大约 700-900 MB。

我的问题:

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

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

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

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

但是,与 virtualenv 不同,pipenv 检查并强制虚拟环境具有满足 Pipfile 条件的确切模块集和指定的确切 "last tested configuration"在生成的 Pipfile.lock.

因此,如果您更改环境中的任何包版本,您将需要:

  • 更新受影响项目中的所有 Pipfile.lock(例如复制更改的项目)。使用生成的 Pipfile,您可以删除它们。
  • 将受影响项目中的所有 Pipfile 更新为新的包版本(例如,复制更改的版本)如果有变化