有没有办法升级在virtualenv中使用的python版本(例如,如果bug修复版本出来了)?

我可以pip freeze——local > requirements.txt,然后删除该目录和pip install -r requirements.txt,但这需要大量重新安装大型库,例如numpy,我经常使用它。

我可以看到这是一个优势,当从,例如,2.6 -> 2.7升级,但2.7呢?X -> 2.7.y?


当前回答

你看到这个了吗?如果我没有误解这个答案,您可以尝试在旧的virtualenv之上创建一个新的virtualenv。你只需要知道哪个python会使用你的virtualenv(你需要看到你的virtualenv版本)。

如果您的virtualenv安装的python版本与旧版本相同,并且无法升级您的virtualenv包,您可能需要阅读这篇文章,以便使用您想要的python版本安装virtualenv。

EDIT

我已经测试过这种方法(在旧的virtualenv之上创建一个新的virtualenv),对我来说效果很好。我认为如果你把python 2.6改成2.7或者2.7改成3,你可能会遇到一些问题。X,但如果你只是在相同的版本中升级(保持在2.7),你应该不会有任何问题,因为所有的包都保存在两个python版本(2.7. X)的相同文件夹中。X和2.7。Y包在your_env/lib/python2.7/)中。

如果你改变了你的virtualenv python版本,你将需要重新安装该版本的所有包(或者只是将你需要的包链接到新版本的包文件夹中,即:your_env/lib/python_newversion/site-packages)

其他回答

如果你碰巧使用Python 3.3+附带的venv模块,它支持——upgrade选项。 根据文档:

升级环境目录以使用此版本的Python,假设Python已在适当位置升级

python3 -m venv --upgrade ENV_DIR

在OS X或macOS上使用Homebrew安装和升级Python3,我必须在python -m venv——upgrade ENV_DIR工作之前删除符号链接。

我在upgrade_python3.sh中保存了以下文件,这样我就能记住几个月后我需要再次这样做:

brew upgrade python3
find ~/.virtualenvs/ -type l -delete
find ~/.virtualenvs/ -type d -mindepth 1 -maxdepth 1 -exec python3 -m venv --upgrade "{}" \;

更新:虽然这似乎工作得很好,当我运行py。测试它给出了一个错误。最后,我只是根据需求文件重新创建了环境。

你看到这个了吗?如果我没有误解这个答案,您可以尝试在旧的virtualenv之上创建一个新的virtualenv。你只需要知道哪个python会使用你的virtualenv(你需要看到你的virtualenv版本)。

如果您的virtualenv安装的python版本与旧版本相同,并且无法升级您的virtualenv包,您可能需要阅读这篇文章,以便使用您想要的python版本安装virtualenv。

EDIT

我已经测试过这种方法(在旧的virtualenv之上创建一个新的virtualenv),对我来说效果很好。我认为如果你把python 2.6改成2.7或者2.7改成3,你可能会遇到一些问题。X,但如果你只是在相同的版本中升级(保持在2.7),你应该不会有任何问题,因为所有的包都保存在两个python版本(2.7. X)的相同文件夹中。X和2.7。Y包在your_env/lib/python2.7/)中。

如果你改变了你的virtualenv python版本,你将需要重新安装该版本的所有包(或者只是将你需要的包链接到新版本的包文件夹中,即:your_env/lib/python_newversion/site-packages)

给每个有问题的人

错误:命令'['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '——upgrade', '——default-pip']'返回非零退出状态1。

你必须安装python3.6-venv

 sudo apt-get install python3.6-venv

我只是想澄清一下,因为有些答案指的是venv,有些指的是virtualenv。

在virtualenv上支持使用-p或——python标志,但在venv上不支持。如果你有多个Python版本,并且你想指定用哪个版本创建venv,在命令行上执行,如下所示:

malikarumi@Tetuoan2:~/Projects$ python3.6 -m venv {path to pre-existing dir you want venv in}

当然,正如其他人指出的那样,您可以使用venv进行升级,但前提是您已经升级了用于创建venv的Python。你不能升级到你系统上没有的Python版本,所以首先要确保获得你想要的版本,然后从它生成你想要的所有venv。