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

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

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


当前回答

步骤1:冻结要求并对现有环境进行备份

pip freeze > requirements.txt
deactivate
mv env env_old

步骤2:安装Python 3.7并激活虚拟环境

sudo apt-get install python3.7-venv
python3.7 -m venv env
source env/bin/activate
python --version

步骤3:安装需求

sudo apt-get install python3.7-dev
pip3 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。

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

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

python3 -m venv --upgrade ENV_DIR

你看到这个了吗?如果我没有误解这个答案,您可以尝试在旧的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)

更新: 以下方法在较新的virtualenv版本中可能无法工作。在您尝试修改旧的virtualenv之前,您应该将依赖项保存在需求文件(pip freeze > requirements.txt)中,并在其他地方进行备份。如果出现任何问题,您仍然可以创建一个新的virtualenv并在其中安装旧的依赖项(pip install -r requirements.txt)。

更新:在我最初的答案5个月后我改变了答案。下面的方法更加方便和健壮。

副作用:它还修复了在将Python升级到v2.7.8后在虚拟环境中导入ssl时的Symbol not found: _SSLv2_method异常。

注意:目前,这是针对Python 2.7。x。


如果你在OS X上使用Homebrew Python,首先禁用所有virtualenv,然后升级Python:

brew update && brew upgrade python

执行以下命令(<EXISTING_ENV_PATH>为虚拟环境的路径):

cd <EXISTING_ENV_PATH>
rm .Python
rm bin/pip{,2,2.7}
rm bin/python{,2,2.7}
rm -r include/python2.7
rm lib/python2.7/*
rm -r lib/python2.7/distutils
rm lib/python2.7/site-packages/easy_install.*
rm -r lib/python2.7/site-packages/pip
rm -r lib/python2.7/site-packages/pip-*.dist-info
rm -r lib/python2.7/site-packages/setuptools
rm -r lib/python2.7/site-packages/setuptools-*.dist-info

最后,重新创建虚拟环境:

virtualenv <EXISTING_ENV_PATH>

通过这样做,旧的Python核心文件和标准库(加上setuptools和pip)将被删除,而安装在site-packages中的自定义库将被保留并在纯Python中工作。二进制库可能需要重新安装,也可能不需要重新安装才能正常工作。

在安装了Django的5个虚拟环境中,这对我来说是有效的。

顺便说一句,如果./manage.py编译消息之后不工作,试试这个:

brew install gettext && brew link gettext --force

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

# 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