从 pyenv-virtualenv 切换到 pipenv 时保持相同的共享 virtualenvs
Keeping the same, shared virtualenvs when switching from pyenv-virtualenv to pipenv
我开始看pipenv
,好像还不错。我唯一担心的是,我的大部分项目都涉及 numpy
、scipy
和其他一些不太小的库。
目前管理我的项目的方式:
我安装了 pyenv
和 pyenv-virtualenv
。我有几个(目前有 4 个)特定的 virtualenvs
,每个都适合 类型 的项目。项目本身设置了 .pyenv-version
,我启用了 pyenv
的自动加载 virtualenv 功能。如果我需要共享一个项目,我会从 virtualenv
.
生成一个 requirements.txt
和 pip freeze -l
所以在我当前的设置中,我有 X
个项目和 Y, Y << X
个 virtualenvs
,总计有几 GB 的硬盘 space。请注意,由于像 numpy
这样的大型库,每个 virtualenvs
都非常大,大约 700-900 MB。
我的问题:
据我了解,pipenv
默认情况下会为我的所有项目创建一个 virtualenv
,因此我的 virtualenvs
占用的硬盘 space会大大增加。我感兴趣的是:
- 是否可以在使用完全相同依赖项的多个项目之间共享
pipenv
环境?即加载相同 virtualenv
? 的多个 pipenv
配置
- 如果没有,是否可以从我用
pyenv
设置的 virtualenv
生成 pipenv
配置文件?即我不会使用 pipenv
实际 运行 我的项目,我不会用 pipenv
创建任何 virtualenvs
,但我会创建 pipenv
配置文件用于共享项目(在这种情况下,可能还有 requirements.txt
)。
编辑:
我重写了大部分问题以使其更清楚。
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
.
- 此外,如果您从
requirements.txt
生成 Pipfile
,它将指定确切的包版本并包括所有依赖项 -- while by design, it's supposed to contain more intelligent information.
因此,如果您更改环境中的任何包版本,您将需要:
- 更新受影响项目中的所有
Pipfile.lock
(例如复制更改的项目)。使用生成的 Pipfile
,您可以删除它们。
- 将受影响项目中的所有
Pipfile
更新为新的包版本(例如,复制更改的版本)如果有变化
我开始看pipenv
,好像还不错。我唯一担心的是,我的大部分项目都涉及 numpy
、scipy
和其他一些不太小的库。
目前管理我的项目的方式:
我安装了 pyenv
和 pyenv-virtualenv
。我有几个(目前有 4 个)特定的 virtualenvs
,每个都适合 类型 的项目。项目本身设置了 .pyenv-version
,我启用了 pyenv
的自动加载 virtualenv 功能。如果我需要共享一个项目,我会从 virtualenv
.
requirements.txt
和 pip freeze -l
所以在我当前的设置中,我有 X
个项目和 Y, Y << X
个 virtualenvs
,总计有几 GB 的硬盘 space。请注意,由于像 numpy
这样的大型库,每个 virtualenvs
都非常大,大约 700-900 MB。
我的问题:
据我了解,pipenv
默认情况下会为我的所有项目创建一个 virtualenv
,因此我的 virtualenvs
占用的硬盘 space会大大增加。我感兴趣的是:
- 是否可以在使用完全相同依赖项的多个项目之间共享
pipenv
环境?即加载相同virtualenv
? 的多个 - 如果没有,是否可以从我用
pyenv
设置的virtualenv
生成pipenv
配置文件?即我不会使用pipenv
实际 运行 我的项目,我不会用pipenv
创建任何virtualenvs
,但我会创建pipenv
配置文件用于共享项目(在这种情况下,可能还有requirements.txt
)。
pipenv
配置
编辑: 我重写了大部分问题以使其更清楚。
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
.
- 此外,如果您从
requirements.txt
生成Pipfile
,它将指定确切的包版本并包括所有依赖项 -- while by design, it's supposed to contain more intelligent information.
因此,如果您更改环境中的任何包版本,您将需要:
- 更新受影响项目中的所有
Pipfile.lock
(例如复制更改的项目)。使用生成的Pipfile
,您可以删除它们。 - 将受影响项目中的所有
Pipfile
更新为新的包版本(例如,复制更改的版本)如果有变化