升级蟒蛇在virtualenv中升级蟒蛇在virtualenv中(Upgrade python in

2019-05-13 14:05发布

是否有升级的virtualenv中使用的Python版本的方式(如果修正版附带如进行)?

我可以pip freeze --local > requirements.txt ,然后删除目录和pip install -r requirements.txt ,但这需要大量的大型图书馆重新安装的,例如, numpy ,我用了很多。

我可以看到这是从升级时具有优势,例如,2.6 - > 2.7,但对于2.7.x - > 2.7.y?

Answer 1:

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

如果你的virtualenv安装有旧的同Python版本和升级您的virtualenv包是不是一种选择,你可能需要阅读本以安装的virtualenv你想要的Python版本。

编辑

我测试过这种方法(即在旧的上面创建一个新的virtualenv的一个),它为我工作得很好。 我想你可能有一些问题,如果你用Python 2.6更改为2.7或2.7到3.x但如果你只是相同的版本升级内(2.7住,只要你想)你不应该有任何问题,因为所有的软件包在两个Python版本相同的文件夹举行(2.7.x和2.7.y包内your_env / lib目录/ python2.7 /)。

如果你改变你的virtualenv Python版本,则需要重新安装所有程序包该版本(或只是链接,你需要到新版本包文件夹的包,即:your_env / lib目录/ python_newversion /站点包)



Answer 2:

如果你碰巧使用Python自带3.3+的VENV模块,它支持--upgrade选项。 按照文档 :

升级环境目录使用这个版本的Python,假设Python已经被升级就地

python3 -m venv --upgrade ENV_DIR


Answer 3:

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

更新:我改变了后5个月我最初回答问题的答案。 下面的方法是更加方便和强大。

副作用:这还修复了Symbol not found: _SSLv2_method异常,当你import ssl在虚拟环境中升级Python来v2.7.8之后。

注意:目前, 这仅是Python的2.7.x。


如果您在OS X上使用自制的Python,首先deactivate所有的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核心文件和标准库(加setuptoolspip )被移除,而安装在自定义库site-packages被,只要他们是在纯Python和保存工作。 二进制库可能会或可能不会需要重新安装才能正常工作。

这为我工作5个虚拟环境中安装的Django。

顺便说一句,如果./manage.py compilemessages事后又没有工作,试试这个:

brew install gettext && brew link gettext --force


Answer 4:

我无法在旧的上面创建一个新的virtualenv。 但也有在PIP工具,这使得它更快重新安装要求进入一个全新的VENV。 皮普可以建立在每一个你requirements.txt的项目进入轮包,并存储在本地缓存中。 当你创建一个新的VENV并运行它PIP安装,如果发现他们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

我安装车轮( pip install wheel ),然后运行pip wheel -r requirements.txt 。 该文件存储在我的pip.conf轮DIR内置轮。

从那时起,任何时候我点子安装任何的这些要求,它安装他们的车轮,这是相当快的。



Answer 5:

如何升级Python版本为现有virtualenvwrapper项目,并保持相同的名字

我添加使用道格乐门优秀的人一个答案virtualenvwrapper特别,因为现有的答案并没有为我做。

一些背景:

  • 我对一些项目是Python 2和一些是Python 3中工作; 而我喜欢使用python3 -m venv ,它不支持Python 2里的环境
  • 当我开始一个新项目,我用mkproject它创建虚拟环境,创建一个空的项目目录,和CD进去
  • 我想继续使用virtualenvwrapper的workon命令,不论Python版本激活任何项目

路线:

比方说,你现有的项目被命名为foo和当前正在运行的Python 2( mkproject -p python2 foo ),虽然命令是相同的无论是从2.x升级到3.x,3.6.0至3.6.1,等我“M还假设您目前是激活的虚拟环境中。

1.停用并删除旧的虚拟环境:

$ deactivate
$ rmvirtualenv foo

请注意,如果您已经添加任何自定义命令到挂钩(如bin/postactivate )你需要删除的环境之前保存这些。

2.在藏一个临时目录中的实际项目:

$ cd ..
$ mv foo foo-tmp

3.创建新的虚拟环境(和项目目录)并激活:

$ mkproject -p python3 foo

4.更换与实际项目空生成的项目目录,换回项目目录:

$ cd ..
$ mv -f foo-tmp foo
$ cdproject

5.重新安装依赖,确认新的Python版本,等等:

$ pip install -r requirements.txt
$ python --version

如果这是一个常见的情况,我会考虑开一个公关添加类似$ upgradevirtualenv / $ upgradeproject到virtualenvwrapper。



Answer 6:

我搬到了我的主目录从一个MAC到另一个(山狮优胜美地)并没有意识到对破碎的virtualenv直到我失去了旧笔记本电脑的保持。 我有virtualenv中指向由安装了Python 2.7 brew ,自优山美地来与Python 2.7,我想更新我的virtualenv到系统蟒蛇。 当我跑virtualenv在现有目录的顶层,我是越来越OSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'的错误。 通过试验和错误,我的工作解决此问题通过删除几个环节多,手动几个固定起来。 这是我终于做到了(类似于@Rockalite做,但更简单):

cd <virtualenv-root>
rm lib/python2.7/config
rm lib/python2.7/lib-dynload
rm include/python2.7
rm .Python
cd lib/python2.7
gfind . -type l -xtype l | while read f; do ln -s -f /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/${f#./} $f; done

在此之后,我能够只是对现有目录之上运行的virtualenv。



Answer 7:

在OS X或使用自制软件安装和升级Python3的MacOS我不得不删除之前的符号链接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.test它给了一个错误。 最后我刚刚重新创建从需求文件的环境。



Answer 8:

如果您使用pipenv ,我不知道是否有可能到位升级的环境中,但至少对于小版本的升级似乎是足够聪明,不重建从头包时,它会创建一个新的环境。 例如,从3.6.4到3.6.5:

$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv…
Creating a v$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv…
Creating a virtualenv for this project…
Using /usr/local/bin/python3.6m (3.6.5) to create virtualenv…
⠋Running virtualenv with interpreter /usr/local/bin/python3.6m
Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python3.6
Also creating executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD
Installing dependencies from Pipfile.lock (84dd0e)…