问题:将–user和–prefix错误与setup.py install结合使用
我试图将Python软件包安装到最近可以访问的系统中。我试图利用Python相对较新的每用户site-packages目录以及new选项--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
错误是非常令人费解,因为你可以看到,我不提供--prefix
,--exec-prefix
,--install-base
,或--install-platbase
标志作为命令行选项。我浪费了很多时间试图找出问题所在。我在下面记录我的答案,以期使其他一些可怜的人免于数小时的牛。
回答 0
一种解决方法:
pip install --user --install-option="--prefix=" <package_name>
要么
python setup.py install --user --prefix=
请注意,后面没有文本(甚至没有空格)=
。
千万不能忘记的--user
标志。
安装多个软件包:
~/.pydistutils.cfg
使用以下内容创建(或等效于您的操作系统/平台):
[install]
prefix=
请注意,后面没有文本(甚至没有空格)=
。
然后运行必要pip install --user
或python setup.py install --user
命令。千万不能忘记的--user
标志。
最后,删除或重命名此文件。如果--user
以此用户身份在系统范围内安装Python软件包(即,不带),则将该文件保留为当前内容将导致问题~/.pydistutils.cfg
。
此问题的原因
这似乎与OpenSUSE和RedHat都存在问题,导致这些平台上的virtualenv出现错误。
该错误源于系统级distutils配置文件(在我的情况下/usr/lib64/python2.6/distutils/distutils.cfg
)
[install]
prefix=/usr/local
基本上,这等效于始终以方式运行install命令install --prefix=/usr/local
。您必须使用上面的一种技术来覆盖此规范。
回答 1
正如评论中所指出的那样,公认的答案(@gotgenes,大概拥有基因)可能导致意外的后果。
@rogeleaderr说:“请注意,将文件保存为这样会使Python认为/是您的python库的根目录,如果尝试安装其他新软件包,则会导致令人困惑的问题。”
与其按照@gotgenes的建议写一个新的配置文件,一个更好的选择是--prefix=
在命令行上添加(等号右边没有文本)作为选项,如
$ python setup.py install --user --prefix=
回答 2
发布信息以节省其他人的时间,因为没有可用的答案对我有用。
在某些环境中,使用--target
(-t
)开关仍然会遇到相同的错误。在对两种Linux版本的测试中,使用--prefix=
参数时遇到了相同的问题。
码:
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
说明:我的变通办法似乎可以在许多环境(MacOS,Amazon Linux,Debian)中使用,是将PYTHONUSERBASE
环境变量设置为临时位置。 --force-reinstall
用于触发本地安装,即使已安装软件包也是如此。
这将导致模块被编译/安装(取决于操作系统和Python版本)以: /tmp/lib/python2.7/site-packages/*
回答 3
您可以简单地运行pip install --user .
,不需要前缀args。
这是更好的呢,因为如果你的点子被配置为使用Python 3,将默认为python3(我忘了进入python3 setup.py
和它2.7下安装了3只包)
回答 4
我有同样的问题。它隐藏在~/.config/pip/pip.conf
with中:
[global]
target=/foo/bar
这种配置是由第三方脚本在不知情的情况下创建的。
我建议检查pip配置文件并删除target=/foo/bar
选项。