Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将--user with--前缀错误与setup.py安装组合_Python_Installation_Distutils - Fatal编程技术网

Python 将--user with--前缀错误与setup.py安装组合

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

我试图安装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/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