在Windows上升级pip.exe时“拒绝访问”

2024-06-12 14:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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无法卸载旧版本,因为对用户目录的访问被拒绝:

    Collecting pip
    Downloading pip-7.0.3-py2.py3-none-any.whl (1.1MB)
      100% |################################| 1.1MB 292kB/s
    Installing collected packages: pip
    Found existing installation: pip 7.0.1
    Uninstalling pip-7.0.1:
      Successfully uninstalled pip-7.0.1
    Exception:
    Traceback (most recent call last):
    File "C:\Python27\lib\site-packages\pip\basecommand.py", line 223, in main
    status = self.run(options, args)
    File "C:\Python27\lib\site-packages\pip\commands\install.py", line 297, in run

    root=options.root_path,
    File "C:\Python27\lib\site-packages\pip\req\req_set.py", line 633, in install
    requirement.commit_uninstall()
    File "C:\Python27\lib\site-packages\pip\req\req_install.py", line 734, in commit_uninstall
    self.uninstalled.commit()
    File "C:\Python27\lib\site-packages\pip\req\req_uninstall.py", line 153, in commit
    rmtree(self.save_dir)
    File "C:\Python27\lib\site-packages\pip\_vendor\retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
    File "C:\Python27\lib\site-packages\pip\_vendor\retrying.py", line 212, in call
    raise attempt.get()
    File "C:\Python27\lib\site-packages\pip\_vendor\retrying.py", line 247, in get

    six.reraise(self.value[0], self.value[1], self.value[2])
    File "C:\Python27\lib\site-packages\pip\_vendor\retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
    File "C:\Python27\lib\site-packages\pip\utils\__init__.py", line 89, in rmtree
    onerror=rmtree_errorhandler)
    File "C:\Python27\lib\shutil.py", line 247, in rmtree
    rmtree(fullname, ignore_errors, onerror)
    File "C:\Python27\lib\shutil.py", line 247, in rmtree
    rmtree(fullname, ignore_errors, onerror)
    File "C:\Python27\lib\shutil.py", line 252, in rmtree
    onerror(os.remove, fullname, sys.exc_info())
    File "C:\Python27\lib\site-packages\pip\utils\__init__.py", line 101, in rmtree_errorhandler
    func(path)
    WindowsError: [Error 5] Access is denied: 'c:\\users\\chris\\appdata\\local\\temp\\pip-ossyhh-uninstall\\python27\\scripts\\pip.exe'

我运行的是Windows 8.1,但在运行Windows 7的另一台计算机上也出现了同样的错误。它似乎并没有停止新版本的安装,但我最终在temp目录中留下了pip文件夹。有人知道为什么会发生这种事吗?我怎么能纠正?

编辑1: 奇怪的是,使用admin privildges运行升级会引发一个新的异常:

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不能升级自己,而它的预期(和声明的)功能是这样做,对我来说似乎是个问题。


Tags: installpipinpyselflibpackagesline
3条回答

我最近在Windows7上也遇到了同样的问题。我以管理员身份运行命令提示符(从您的注释中),然后键入pip install --upgrade pip

它在wazoo中返回了错误消息,但是当我再次尝试这样做(pip install --upgrade pip)时,它告诉我pip已经是最新的。然后pip -V告诉我我得了pip 7.0.3。

不知道发生了什么。试图在windows上获得python包似乎非常困难。希望对你有帮助。

另外,我使用的是Python3.5,可能有所不同。

这里的问题显然是因为您运行pip.exe来升级自身。因此,要删除的pip.exe实际上正在运行。修复方法是使用稍有不同的命令行:

python -m pip install --upgrade pip

这是来自这个bug report(尽管还有其他的):

• Access is denied: '... pip.exe' is because you're upgrading pip using the pip.exe wrapper which gets replaced in the upgrade. On Windows you can't replace in-use executables/DLLs. You should use python -m pip install --upgrade pip . IIRC this is noted in the documentation.

在使用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

相关问题 更多 >