在Windows上升级pip.exe时出现“访问被拒绝”错误。

7

pip让我通过一条消息升级:

You are using pip version 7.0.1, however version 7.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

我运行了该命令,但出现了一个异常,提示pip无法卸载旧版本,因为被拒绝访问我的用户目录:

收集pip 正在下载pip-7.0.3-py2.py3-none-any.whl(1.1MB) 100%|################################| 1.1MB 292kB / s 安装收集的软件包:pip 找到现有安装程序:pip 7.0.1 卸载pip-7.0.1: 已成功卸载pip-7.0.1 异常: 跟踪(最近的调用最先): 文件“C:\ Python27 \ lib \ site-packages \ pip \ basecommand.py”,行223,在main中 状态= self.run(options,args) 文件“C:\ Python27 \ lib \ site-packages \ pip \ commands \ install.py”,行297,在run中
root = options.root_path, 文件“C:\ Python27 \ lib \ site-packages \ pip \ req \ req_set.py”,行633,在install中 要求.commit_uninstall() 文件“C:\ Python27 \ lib \ site-packages \ pip \ req \ req_install.py”,行734,在commit_uninstall中 self.uninstalled.commit() 文件“C:\ Python27 \ lib \ site-packages \ pip \ req \ req_uninstall.py”,行153,在commit中 rmtree(self.save_dir) 文件“C:\ Python27 \ lib \ site-packages \ pip \ _vendor \ retrying.py”,行49,在wrapped_f中 返回Retrying(* dargs,** dkw).call(f,* args,** kw) 文件“C:\ Python27 \ lib \ site-packages \ pip \ _vendor \ retrying.py”,行212,在call中 raise attempt.get() 文件“C:\ Python27 \ lib \ site-packages \ pip \ _vendor \ retrying.py”,行247,在get中
six.reraise(self.value [0],self.value [1],self.value [2]) 文件“C:\ Python27 \ lib \ site-packages \ pip \ _vendor \ retrying.py”,行200,在call中 attempt = Attempt(fn(* args,** kwargs),attempt_number,False) 文件“C:\ Python27 \ lib \ site-packages \ pip \ utils \ __ init __。py”,行89,在rmtree中 onerror = rmtree_errorhandler) 文件“C:\ Python27 \ lib \ shutil.py”,行247,在rmtree中 rmtree(fullname,ignore_errors,onerror) 文件“C:\ Python27 \ lib \ shutil.py”,行247,在rmtree中 rmtree(fullname,ignore_errors,onerror) 文件“C:\ Python27 \ lib \ shutil.py”,行252,在rmtree中 onerror(os.remove,fullname,sys.exc_info()) 文件“C:\ Python27 \ lib \ site-packages \ pip \ utils \ __ init __。py”,行101,在rmtree_errorhandler中 func(path) WindowsError:[错误5]拒绝访问:“c:\ users \ chris \ appdata \ local \ temp \ pip-ossyhh-uninstall \ python27 \ scripts \ pip.exe”
我正在运行Windows 8.1,但在另一台运行Windows 7的机器上也遇到了同样的错误。它似乎并不会阻止新版本的安装,但我最终会在我的临时目录中留下pip文件夹。有人知道为什么会这样发生或者我如何可以纠正它吗?
编辑1: 奇怪的是,以管理员权限运行升级会抛出一个新的异常:
File "C:\Python27\lib\site-packages\pip-7.0.1-py2.7.egg\pip\_vendor\distlib\scripts.py", line 302, in _get_launcher
result = finder(distlib_package).find(name).bytes
AttributeError: 'NoneType' object has no attribute 'bytes'`

升级失败了。

编辑2: 解决此问题的唯一方法似乎是使用easy_install升级pip(-U或-m选项),但如果pip无法升级自身,这对我来说似乎是一个问题,因为它的预期(和声明)功能是这样做的。


1
你是在没有管理员权限的命令提示符下运行吗? - paisanco
这也可能是个问题!以管理员身份运行 - Utsav T
@Noob 是的,我看了那个问题,但它是从2010年的,而且并没有真正回答我的问题。我认为当pip明确告诉我它可以升级自己时,我不应该使用easy_install。 - chris
看起来我的个人资料对此文件夹拥有所有权限,除了“特殊权限”(管理员也没有)。我将尝试使用管理员权限运行命令提示符实例,但是需要在自己的用户文件夹中这样做似乎很奇怪? - chris
1
仍然存在Python 2.7.10和pip 7.0.1(升级到7.1.2)的问题。 - jarmod
显示剩余2条评论
4个回答

7
这里的问题显然是由于你正在运行pip.exe来升级它自己。因此,要删除的pip.exe实际上正在运行。解决方法是使用略微不同的命令行:
python -m pip install --upgrade pip

以下内容来自错误报告(虽然还有其他问题):

• 出现“Access is denied: '... pip.exe'”的原因是您正在使用 pip.exe 包装器升级 pip,该包装器在升级中被替换。 在 Windows 上,您无法替换正在使用的可执行文件/DLL。 您应该使用 python -m pip install --upgrade pip。如果我没记错的话,这在文档中有说明。


3
最近我在一个windows 7机器上遇到了同样的问题。我按照您的评论以管理员身份运行了命令提示符,然后输入 pip install --upgrade pip
它返回了一大堆错误信息,但是当我再次尝试 (pip install --upgrade pip) 时,它告诉我pip已经更新到最新版本了。然后 pip -V 显示我有pip 7.0.3。
不知道发生了什么。在Windows上安装python软件包似乎非常困难。希望这有所帮助。
另外,我使用的是Python 3.5,可能会有所不同。

0

我在使用pip-7.1.2版本安装matplotlib时也遇到了问题,所以我将其升级到了pip 9.0.1。

然而,在更新时,它给了我一个pip.exe访问被拒绝的错误,但是当我使用pip -v检查版本时,它已经更新了。然后我只需运行pip install matplotlib即可。这对我有效。

D:\Users\703186511>pip install --upgrade pip

或者尝试

D:\Users\703186511>python -m pip install --upgrade pip
D:\Users\703186511>pip -V
D:\Users\703186511>pip install matplotlib

-2
我遇到了同样的问题。我只是在我的Mac终端上使用了SUDO命令,然后它就可以工作了。以下是终端输出。
sudo pip install -U pip
Anuvrats-MacBook-Air:~ anuvrattiku$ pip -V
pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
Anuvrats-MacBook-Air:~ anuvrattiku$ **sudo pip install -U pip**
Password:
The directory '/Users/anuvrattiku/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/anuvrattiku/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pip
Downloading pip-8.0.2-py2.py3-none-any.whl (1.2MB)
100% |████████████████████████████████| 1.2MB 272kB/s 
Installing collected packages: pip
Found existing installation: pip 7.1.2
Uninstalling pip-7.1.2:
Successfully uninstalled pip-7.1.2
Successfully installed pip-8.0.2
Anuvrats-MacBook-Air:~ anuvrattiku$ 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接