从pyenv-virtualenv切换到pipenv时,保持相同的共享虚拟环境

时间:2019-04-28 16:55:44

标签: python virtualenv pipenv pyenv

我开始看pipenv,看来还不错。我唯一关心的是,我的大多数项目都涉及numpyscipy和其他一些不太小的库。

当前管理项目的方式: 我已经安装了pyenvpyenv-virtualenv。我有一些(目前有4个)特定的virtualenvs,每个都适合项目的类型。项目本身已设置.pyenv-version,我启用了pyenv的自动加载virtualenv功能。如果我需要共享一个项目,则可以从requirements.txtpip freeze -l生成一个virtualenv

因此,在我当前的设置中,我有X个项目和Y, Y << Xvirtualenvs个项目,所有这些项目总计需要几GB的硬盘空间。请注意,由于numpy之类的大型库,每个virtualenvs都非常大,大约700-900 MB。

我的问题:

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

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

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

1 个答案:

答案 0 :(得分:1)

pipenv似乎不太适合您的特定工作流程,因为它以项目为中心,而不是以环境为中心。 pipenv将虚拟环境视为易变的并保留根据情况自由更改的权利。 您可以使用它,但是如果您的环境有所更改,由于pipenv的严格要求,使所有项目保持同步将很痛苦。

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

但是,pipenvvirtualenv不同,它检查并强制虚拟环境具有满足Pipfile中条件的模块的确切集合,以及具有以下条件的确切“最后测试的配置”:生成了Pipfile.lock

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

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