结合 – 用户与–prefix错误与setup.py安装
我试图安装我最近获得访问的系统的Python包。 我试图利用Python的相对较新的每用户site-packages目录 ,以及新的选项--user
。 (这个选项目前没有logging ,但是它对于Python 2.6+是存在的;你可以通过运行python setup.py install --help
来看到帮助。)
当我尝试跑步
python setup.py install --user
在我下载的任何软件包上,我总是得到以下错误:
error: can't combine user with with prefix/exec_prefix/home or install_(plat)base
这个错误非常令人困惑,因为你可以看到,我没有提供--prefix
,– --exec-prefix
,– --install-base
或者--install-platbase
标志作为命令行选项。 我浪费了很多时间来弄清楚问题所在。 我在下面logging了我的答案,希望能够让其他一些可怜的灵魂在几个小时的牦牛剃毛之后 。
一次解决方法:
pip install --user --install-option="--prefix=" <package_name>
要么
python setup.py install --user --prefix=
注意在=
之后没有文本(甚至没有空格)。
不要忘记--user
标志。
安装多个软件包:
使用以下内容创build~/.pydistutils.cfg
(或与您的操作系统/平台等效):
[install] prefix=
注意在=
之后没有文本(甚至没有空格)。
然后运行必要的pip install --user
或者python setup.py install --user
命令。 不要忘记--user
标志。
最后,删除或重命名此文件。 如果将此文件保留,将导致系统范围(例如,没有--user
)以此用户身份安装Python包时出现问题(使用~/.pydistutils.cfg
。
这个问题的原因
这似乎是OpenSUSE和RedHat的一个问题,在这些平台上导致了virtualenv的bug 。
该错误源于系统级别的distutilsconfiguration文件 (在我的情况下是/usr/lib64/python2.6/distutils/distutils.cfg
),这里有这个
[install] prefix=/usr/local
基本上,这相当于总是运行install命令,如install --prefix=/usr/local
。 您必须使用上述技术之一来覆盖此规范。
正如在评论中已经指出的那样,被接受的答案(可能是基因的@gotgenes)会导致意想不到的后果。
@rogeleaderr说:“请注意,像这样保存这个文件将使Python认为/是你的根python库目录,如果你尝试安装其他新的软件包,会导致混淆的问题。
正如@gotgenes所build议的,更好的办法是在命令行中添加--prefix=
(在等号右边没有文本),就像在
$ python setup.py install --user --prefix=