有没有办法升级在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,有些指的是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。
其他回答
I moved my home directory from one mac to another (Mountain Lion to Yosemite) and didn't realize about the broken virtualenv until I lost hold of the old laptop. I had the virtualenv point to Python 2.7 installed by brew and since Yosemite came with Python 2.7, I wanted to update my virtualenv to the system python. When I ran virtualenv on top of the existing directory, I was getting OSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config' error. By trial and error, I worked around this issue by removing a few links and fixing up a few more manually. This is what I finally did (similar to what @Rockalite did, but simpler):
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或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。测试它给出了一个错误。最后,我只是根据需求文件重新创建了环境。
我只是想澄清一下,因为有些答案指的是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。
给每个有问题的人
错误:命令'['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '——upgrade', '——default-pip']'返回非零退出状态1。
你必须安装python3.6-venv
sudo apt-get install python3.6-venv
我不能在旧的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中存储构建的车轮。
从那时起,每当我安装这些需求中的任何一个,它都会从轮子上安装它们,这非常快。