在Windows上升级pip.exe时"访问被拒绝"

chr*_*ris 5 python windows pip python-2.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.
Run Code Online (Sandbox Code Playgroud)

所以我运行了该命令,我得到一个例外,即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的计算机上遇到了同样的错误.它似乎没有停止安装新版本,但我最终还是在我的临时目录中留下了pip文件夹.有谁知道为什么会发生这种情况或我如何纠正它?

Edit1: 奇怪的是,使用admin privlidges运行升级会引发一个新的异常:

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'`
Run Code Online (Sandbox Code Playgroud)

并完全没有升级.

编辑2: 解决这个问题的唯一方法似乎是使用easy_install来升级pip(-U或-m选项),但是如果pip无法自我升级,当它打算时(如果它)并声明)功能是这样做的.

str*_*bly 5

这里的问题显然是因为你正在运行pip.exe升级自己.所以pip.exe要删除的实际上是在运行时.修复方法是使用稍微不同的命令行:

python -m pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

这是来自这个错误报告(虽然还有其他):

•访问被拒绝:'... pip.exe'是因为您使用pip.exe包装器升级pip,后者在升级时被替换.在Windows上,您无法替换使用中的可执行文件/ DLL.你应该使用python -m pip install --upgrade pip.IIRC这在文件中有说明.