Python 将--user with--前缀错误与setup.py安装组合
我试图安装Python软件包,这是我最近访问的一个系统。我试图利用Python相对较新的功能,以及新的选项Python 将--user with--前缀错误与setup.py安装组合,python,installation,distutils,Python,Installation,Distutils,我试图安装Python软件包,这是我最近访问的一个系统。我试图利用Python相对较新的功能,以及新的选项--user。(该选项是Python 2.6+的,但是它是存在的;您可以通过运行Python setup.py install--help来查看帮助) 当我试着跑步的时候 python setup.py install --user 在我下载的任何软件包上,我都会遇到以下错误: error: can't combine user with with prefix/exec_prefix/h
--user
。(该选项是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
这个错误非常复杂,因为您可以看到,我没有提供--前缀
,--exec前缀
,--install base
,或者--install platbase
标志作为命令行选项。我浪费了很多时间试图找出问题所在。我将我的答案记录在下面,希望能为其他可怜的灵魂腾出几个小时。一次性解决办法:
请注意,=
后面没有文本(甚至没有空格)
不要忘记--user
标志
安装多个软件包:
使用以下内容创建~/.pydistutils.cfg
(或适用于您的操作系统/平台的等效文件):
[install]
prefix=
请注意,=
后面没有文本(甚至没有空格)
然后运行必要的pip安装--user
或python setup.py安装--user
命令。不要忘记--user
标志
最后,删除或重命名此文件。保留此文件将导致在系统范围内安装Python包时出现问题(即,没有--user
),因为此用户具有此~/.pydistutils.cfg
这个问题的原因是什么
这似乎是OpenSUSE和RedHat的一个问题,这导致了在这些平台上的错误
错误源于一个系统级(在我的例子中是/usr/lib64/python2.6/distutils/distutils.cfg
),其中存在
[install]
prefix=/usr/local
基本上,这相当于始终以
install--prefix=/usr/local
的形式运行install命令。您必须使用上述技术之一覆盖此规范。如评论中所述,公认的答案(由@gotgenes提供,他可能有基因)可能会导致意外后果
@Rogeleader说,“请注意,这样保存这个文件会使Python认为/是您的根Python库目录,如果您试图安装其他新软件包,则会导致混淆问题。” 与其像@gotgenes建议的那样编写新的配置文件,不如在命令行上添加
--prefix=
(等号右侧没有文本)作为选项,如中所示
发布以节省其他人的时间,因为没有可用的答案对我有效 在某些环境中,使用
--target
(-t
)开关仍会遇到相同的错误。在两种版本的linux上进行测试时,我在使用--prefix=
参数时遇到了相同的问题
代码:
说明:
我的解决方法似乎适用于许多环境(MacOS、Amazon Linux、Debian),就是将PYTHONUSERBASE
环境变量设置为临时位置<代码>--强制重新安装用于触发本地安装,即使软件包已安装
这将导致模块被编译/安装(取决于操作系统和Python版本)为:
/tmp/lib/python2.7/site packages/*
您只需运行pip install--user.
,不需要前缀参数
无论如何,这会更好,因为如果您的pip配置为使用python3,它将默认为python3。
(我忘了输入python3 setup.py
,它在2.7下安装了一个3-only包)
(信贷)我也有同样的问题。它隐藏在
~/.config/pip/pip.conf
中,带有:
[global]
target=/foo/bar
这样的配置是由第三方脚本在我不知情的情况下创建的
我建议检查pip配置文件并删除
target=/foo/bar
选项。非常感谢。空前缀修复了我的问题:pip 1.1 openSuSE 11.4。您还可以在命令行中将空--prefix=传递给setup.py,以覆盖系统范围distutils.cfgWow中的值!这对我也有用。我在尝试安装Powerline时收到了相同的错误。再想一想,这样做会造成重大问题。不要把这个文件放在任何地方。有关更多信息,请参阅brew doctor(假设您在Mac OS X上使用的是自制)。请注意,这样保存此文件会使Python认为/是您的根Python库目录,如果您尝试安装其他新软件包,则会导致混淆问题。我尝试从源代码安装Python 3.6时遇到相同的错误,使用/configure--prefix=${HOME}
而在~/.pydistutils.cfg
中有“user=1”。在这种情况下,我需要临时注释“user=1”因此,安装过程可以完成。bli给出了一个很好的提示。我想知道--user选项来自哪里,即使我没有使用该选项。pip install--prefix/home/myhomedir。我没有~/.pydistutils.cfg文件,仍然在寻找--user选项的设置位置。找出问题的根源。这是Debian特有的。在为pip添加--system选项后,问题就消失了。
[install]
prefix=/usr/local
$ python setup.py install --user --prefix=
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
[global]
target=/foo/bar