问题的根源通常是在
bin
(Linux)或
Scripts
(Windows)子目录中过时的脚本。我将以我自己遇到的问题为例进行解释。
我安装了虚拟环境版本1.10,它位于我的用户site-packages中(事实上,它在用户site-packages中而不是系统site-packages中是无关紧要的)。
pdobrogost@host:~$ which virtualenv
/home/users/pdobrogost/.local/bin/virtualenv
pdobrogost@host:~$ virtualenv --version
1.10
升级到1.11版本后,我遇到了以下错误:
pdobrogost@host:~$ virtualenv --version
Traceback (most recent call last):
File "/home/users/pdobrogost/.local/bin/virtualenv", line 5, in <module>
from pkg_resources import load_entry_point
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2701, in <module>
return self.__dep_map
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 572, in resolve
if insert:
pkg_resources.DistributionNotFound: virtualenv==1.10
在错误消息中提到的文件/home/users/pdobrogost/.local/bin/virtualenv
看起来是这样的:
__requires__ = 'virtualenv==1.10'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('virtualenv==1.10', 'console_scripts', 'virtualenv')()
)
我们可以看到,virtualenv
脚本没有更新,仍需要之前安装的1.10版本。
现在,可以按照以下方式重新安装virtualenv:
pdobrogost@host:~$ pip install --user --upgrade virtualenv
Downloading/unpacking virtualenv from https://pypi.python.org/packages/py27/v/virtualenv/virtualenv-1.11.1-py27-none-any.whl#md5=265770b61de41d34d2e9fdfddcdf034c
Using download cache from /home/users/pdobrogost/.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fpy27%2Fv%2Fvirtualenv%2Fvirtualenv-1.11.1-py27-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...
使用pip install --user --upgrade --force-reinstall virtualenv
命令也无法解决问题(因为脚本/home/users/pdobrogost/.local/bin/virtualenv
没有更改)。
我能找到的唯一解决方法是手动从/home/users/pdobrogost/.local/bin/
文件夹中删除virtualenv*脚本,然后重新安装virtualenv。这样,新生成的脚本将引用包的正确版本:
pdobrogost@host:~$ virtualenv --version
1.11