结合 – 用户与–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=