我试图安装Python包我最近获得访问系统。 我试图利用Python的相对较新的每用户site-packages目录 ,以及新的选项--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
标志作为命令行选项。 我浪费了很多时间试图找出问题所在。 我记录我的回答如下,希望在不遗余力一些其他可怜的灵魂的几个小时牦牛剃须 。
一个时间解决方法:
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
标志。
最后,删除或重命名该文件。 安装时Python包全系统的(即没有离开这个文件存在会导致一些问题--user
)作为本该用户~/.pydistutils.cfg
。
这个问题的原因
这似乎是两者的OpenSUSE和RedHat的问题,这导致了一个错误的virtualenv在这些平台上。
错误从一个系统级的茎的distutils配置文件 (在我的情况/usr/lib64/python2.6/distutils/distutils.cfg
),那里有这
[install]
prefix=/usr/local
基本上,这是相当于始终运行安装命令install --prefix=/usr/local
。 你必须重载使用上述技术中的一个本规范。
正如在评论中指出的那样,公认的答案(由@gotgenes,谁,大概有基因)会导致意想不到的后果。
@rogeleaderr说,“需要注意的是保持这个文件中像这样会让Python的认为/是你的根Python库目录,从而导致混乱的问题,如果您尝试安装其他新的软件包。”
而不是写一个新的配置文件,如@gotgenes建议,更好的选择是添加--prefix=
(无文本等号的右边)作为命令行上的选项,如
$ python setup.py install --user --prefix=
发布救别人的时候,因为没有可用的答案为我工作...
在某些环境中,使用--target
( -t
)开关仍然会打同样的错误。 在我在Linux上的两种口味测试中,我使用时遇到了同样的问题--prefix=
参数。
码:
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
说明:我的解决办法,这似乎在许多环境(MacOS的,亚马逊的Linux,Debian的)工作是将设置PYTHONUSERBASE
环境变量设置为临时位置。 --force-reinstall
用于触发,即使已经安装了包本地安装。
这将导致该模块中被编译/安装(取决于操作系统和Python版本)来: /tmp/lib/python2.7/site-packages/*