有没有办法升级在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中使用的python版本(例如,如果bug修复版本出来了)?
我可以pip freeze——local > requirements.txt,然后删除该目录和pip install -r requirements.txt,但这需要大量重新安装大型库,例如numpy,我经常使用它。
我可以看到这是一个优势,当从,例如,2.6 -> 2.7升级,但2.7呢?X -> 2.7.y?
当前回答
让我们假设要更新的环境名为venv。
1. 备用venv要求(可选)
首先,备份虚拟环境的要求:
pip freeze > requirements.txt
deactivate
#Move the folder to a new one
mv venv venv_old
2. 安装Python
假设没有sudo访问权限,pyenv是一种可靠且快速的安装Python的方法。为此,一个人应该跑步
curl https://pyenv.run | bash
然后
exec $SHELL
正如这里所建议的。
如果,当有人试图更新pyenv
pyenv update
一个得到误差
bash: pyenv: command not found
这是因为pyenv路径没有导出到.bashrc。可以通过执行以下命令来解决:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
然后重新启动shell
exec "$SHELL"
现在你应该安装你想要的Python版本。假设是3.8.3版本
pyenv install 3.8.3
可以通过运行确认是否正确安装
pyenv versions
输出应该是位置和版本(在本例中是3.8.3)
3.创建新的虚拟环境
最后,安装了新的Python版本后,创建一个新的虚拟环境(我们称它为venv)
python3.8 -m venv venv
激活它
source venv/bin/activate
并安装需求
pip install -r requirements.txt
现在一个人应该在新的环境中开始工作了。
其他回答
这个方法对我来说总是有效的:
# First of all, delete all broken links. Replace my_project_name` to your virtual env name
find ~/.virtualenvs/my_project_name/ -type l -delete
# Then create new links to the current Python version
virtualenv ~/.virtualenvs/my_project_name/
# It's it. Just repeat for each virtualenv located in ~/.virtualenvs
来自:
https://github.com/1st/python-on-osx#python-virtualenv https://gist.github.com/1st/ced02a1c64ac7b82bb27e432eea6b068
让我们假设要更新的环境名为venv。
1. 备用venv要求(可选)
首先,备份虚拟环境的要求:
pip freeze > requirements.txt
deactivate
#Move the folder to a new one
mv venv venv_old
2. 安装Python
假设没有sudo访问权限,pyenv是一种可靠且快速的安装Python的方法。为此,一个人应该跑步
curl https://pyenv.run | bash
然后
exec $SHELL
正如这里所建议的。
如果,当有人试图更新pyenv
pyenv update
一个得到误差
bash: pyenv: command not found
这是因为pyenv路径没有导出到.bashrc。可以通过执行以下命令来解决:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
然后重新启动shell
exec "$SHELL"
现在你应该安装你想要的Python版本。假设是3.8.3版本
pyenv install 3.8.3
可以通过运行确认是否正确安装
pyenv versions
输出应该是位置和版本(在本例中是3.8.3)
3.创建新的虚拟环境
最后,安装了新的Python版本后,创建一个新的虚拟环境(我们称它为venv)
python3.8 -m venv venv
激活它
source venv/bin/activate
并安装需求
pip install -r requirements.txt
现在一个人应该在新的环境中开始工作了。
我只是想澄清一下,因为有些答案指的是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。
在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)