是否有升级的virtualenv中使用的Python版本的方式(如果修正版附带如进行)?
我可以pip freeze --local > requirements.txt
,然后删除目录和pip install -r requirements.txt
,但这需要大量的大型图书馆重新安装的,例如, numpy
,我用了很多。
我可以看到这是从升级时具有优势,例如,2.6 - > 2.7,但对于2.7.x - > 2.7.y?
是否有升级的virtualenv中使用的Python版本的方式(如果修正版附带如进行)?
我可以pip freeze --local > requirements.txt
,然后删除目录和pip install -r requirements.txt
,但这需要大量的大型图书馆重新安装的,例如, numpy
,我用了很多。
我可以看到这是从升级时具有优势,例如,2.6 - > 2.7,但对于2.7.x - > 2.7.y?
你看到这个 ? 如果我没有误会答案,您可以尝试在旧的上面创建一个新的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 /站点包)
如果你碰巧使用Python自带3.3+的VENV模块,它支持--upgrade
选项。 按照文档 :
升级环境目录使用这个版本的Python,假设Python已经被升级就地
python3 -m venv --upgrade ENV_DIR
再次更新:以下方法可能无法在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核心文件和标准库(加setuptools
和pip
)被移除,而安装在自定义库site-packages
被,只要他们是在纯Python和保存工作。 二进制库可能会或可能不会需要重新安装才能正常工作。
这为我工作5个虚拟环境中安装的Django。
顺便说一句,如果./manage.py compilemessages
事后又没有工作,试试这个:
brew install gettext && brew link gettext --force
我无法在旧的上面创建一个新的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内置轮。
从那时起,任何时候我点子安装任何的这些要求,它安装他们的车轮,这是相当快的。
我添加使用道格乐门优秀的人一个答案virtualenvwrapper特别,因为现有的答案并没有为我做。
一些背景:
python3 -m venv
,它不支持Python 2里的环境 mkproject
它创建虚拟环境,创建一个空的项目目录,和CD进去 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。
我搬到了我的主目录从一个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。
在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它给了一个错误。 最后我刚刚重新创建从需求文件的环境。
如果您使用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)…