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

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

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


当前回答

这个方法对我来说总是有效的:

# 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

其他回答

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

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

python3 -m venv --upgrade ENV_DIR

这个方法对我来说总是有效的:

# 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

现在一个人应该在新的环境中开始工作了。

我不能在旧的virtualenv上创建一个新的virtualenv。但是pip中有一些工具可以更快地将需求重新安装到一个全新的venv中。Pip可以将requirements.txt中的每个项目构建到一个wheel包中,并将其存储在本地缓存中。当您创建一个新的venv并在其中运行pip install时,如果pip找到预构建的轮子,它将自动使用它们。轮子的安装比为每个模块运行setup.py要快得多。

我的~/.pip/pip.conf是这样的:

[global]
download-cache = /Users/me/.pip/download-cache
find-links =
/Users/me/.pip/wheels/

[wheel]
wheel-dir = /Users/me/.pip/wheels

我安装wheel (pip install wheel),然后运行pip wheel -r requirements.txt。这将在我的pip.conf的wheel-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。测试它给出了一个错误。最后,我只是根据需求文件重新创建了环境。