如何在pyenv虚拟环境中升级Python版本和软件包?

28

我使用 pyenvpyenv-virtualenv 来管理 Python 虚拟环境。

我有一个在 Python 3.4 虚拟环境中工作的项目。

所以所有安装的包(如 pandasnumpy 等)都不是最新版本。

我想做的是升级 Python 版本从 3.4 到 3.6,同时将其他包的版本升级到更高的版本。

我应该如何轻松地实现这个目标?


1
也许创建一个新的虚拟环境? - Vadim
4个回答

38
以下是如何在给定的虚拟环境“venv-name”中切换到版本“3.9.0”:
pip freeze > requirements-lock.txt
pyenv virtualenv-delete venv-name
pyenv install -s 3.9.0
pyenv virtualenv 3.9.0 venv-name
pip install -r requirements-lock.txt

一切正常运行后,您可以安全地删除临时需求的锁定文件。
rm requirements-lock.txt

请注意,通常情况下,使用pip freeze > requirements.txt并不是一个好主意,因为这个文件通常用来处理您的包需求(不一定是pip freeze的输出)。最好使用一个不同的(临时的)文件来确保安全。

如果您的系统上没有安装3.9.0版本,您需要在创建新的虚拟环境之前运行pyenv install -v 3.9.0 - undefined
你说得对,我会加上那一行,以防万一。 - undefined
在运行pip install -r requirements-lock.txt之前,你还需要通过运行pyenv activate venv-name来激活虚拟环境。 - undefined

10

使用 pip freeze > requirements.txt 命令保存已安装的包列表。

使用 Python 3.6 创建一个新的虚拟环境。

使用 pip install -r requirements.txt 安装保存的包。当 pip 在其缓存中找到通用的 wheel 包时,它将从缓存中安装该包。其他的包将被下载、缓存、构建和安装。


1
这只是解决方案的一半,我不明白为什么它被选为此帖子的解决方案。你不仅需要保存你的要求,还需要清除旧的虚拟环境,使用新的Python版本创建一个新的虚拟环境,然后恢复你的要求!@cglacet在上面给出了正确的答案。 - Vandad Nahavandipoor

5

OP要求升级Python的同时也更新软件包。没有其他答案涉及软件包的升级。这里不适用锁定文件。


将您的软件包保存到一个不带版本号的需求文件中。

pip freeze | cut -d"=" -f1 > requirements-to-upgrade.txt

删除您的环境,使用升级后的Python版本创建一个新环境,然后安装要求文件。

pyenv virtualenv-delete venv-name
pyenv virtualenv 3.6.8 venv-name
pip install -r requirements-to-upgrade.txt

pip中的依赖解析器应该尝试找到最新的软件包。这假设您已安装升级版的Python版本(例如,pyenv install 3.6.8)。


-4
如果您使用Anaconda,只需键入
conda install python==$pythonversion$

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