【问题标题】:Using --prefix when upgrading python packages升级 python 包时使用 --prefix
【发布时间】:2014-11-21 01:44:02
【问题描述】:

setup.py(和pip 通过--install-option)的--prefix 选项似乎坏了。

我需要在我没有sudo 访问权限的机器上维护更新的python 包的共享存储库。从理论上讲,setup.py--prefix 选项(以及通过 --install-option 的 pip)可以满足我的需要。

但是,如果我在系统目录中已经安装了某个版本的软件包,则无法将其安装在我的私有存储库中。不使用--upgrade 安装失败,因为系统中已经存在一个包,使用--upgrade 安装失败,因为无法删除旧包版本。这显示在下面的错误消息中。

有什么方法可以阻止 install 尝试删除旧版本的软件包?或者,更有可能的是,我只是不明白这应该如何工作?

$ pip --version
pip 1.5.6 from /python-local/lib/python2.7/site-packages (python 2.7)

$ pip install  -U --install-option="--prefix=/python-local" virtualenv
Downloading/unpacking virtualenv from https://pypi.python.org/packages/py2.py3/v/virtualenv/virtualenv-1.11.6-py2.py3-none-any.whl#md5=c2aa2fc4986967815f8cb3a3418e6031
  Downloading virtualenv-1.11.6-py2.py3-none-any.whl (1.6MB): 1.6MB downloaded
Installing collected packages: virtualenv
  Found existing installation: virtualenv 1.7.1.2
    Uninstalling virtualenv:
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/python-local/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/python-local/lib/python2.7/site-packages/pip/commands/install.py", line 283, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "/python-local/lib/python2.7/site-packages/pip/req.py", line 1431, in install
    requirement.uninstall(auto_confirm=True)
  File "/python-local/lib/python2.7/site-packages/pip/req.py", line 598, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/python-local/lib/python2.7/site-packages/pip/req.py", line 1836, in remove
    renames(path, new_path)
  File "/python-local/lib/python2.7/site-packages/pip/util.py", line 295, in renames
    shutil.move(old, new)
  File "/usr/lib/python2.7/shutil.py", line 300, in move
    os.unlink(src)
OSError: [Errno 13] Permission denied: '/usr/bin/virtualenv'

Storing debug log for failure in /home/user/.pip/pip.log

【问题讨论】:

    标签: python installation pip


    【解决方案1】:

    答案是使用 pip 的--ignore-installed 选项。只要您正在安装的软件包的只读版本在当前环境中可见,您就必须使用此选项。这包括使用--user--local--prefix 时,以及如果您要安装到使用--system-site-packages 创建的virtualenv 中

    您可以在本节末尾找到此选项http://pip.readthedocs.org/en/latest/user_guide.html#user-installspip install --help

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 2011-02-12
      • 2014-09-06
      • 1970-01-01
      • 2011-02-21
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多