我知道最明显的答案是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能/不想这样做。
那么如何修改命令呢
pip install package_name
让PIP在默认的site-packages之外的地方安装这个包?
我知道最明显的答案是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能/不想这样做。
那么如何修改命令呢
pip install package_name
让PIP在默认的site-packages之外的地方安装这个包?
当前回答
新版本的pip(8或更高版本)可以直接使用——prefix选项:
pip install --prefix=$PREFIX_PATH package_name
其中$PREFIX_PATH是lib、bin和其他顶级文件夹所在的安装前缀。
其他回答
在@Ian Bicking的回答上再加一点:
如果想在远程服务器上的主目录(没有sudo用户权限)中安装一些Python包,使用——user选项指定安装目录也可以。
例如,
pip install --user python-memcached
该命令将包安装到PYTHONPATH中列出的目录之一。
对于Python v2.7.3 (GNU/Linux)上的pip v1.5.6, option——root允许指定全局安装前缀,(显然)与特定包的选项无关。尝试f.i。,
$ pip install --root=/alternative/prefix/path package_name
我建议按照文档创建~/.pip/pip.conf文件。注意在文档中缺少指定的头目录,这将导致以下错误:
error: install-base or install-platbase supplied, but installation scheme is incomplete
conf文件的完整工作内容是:
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data
不幸的是,我可以安装,但当尝试卸载pip告诉我没有这样的软件包卸载过程....所以还是有问题,但是包会回到预定义的位置。
再加上已经很好的建议,因为当我没有对/usr/local的写权限时,我在安装IPython时遇到了问题。
PIP使用distutils来进行安装,本线程讨论了这是如何导致问题的,因为它依赖于sys。前缀设置。
我的问题发生在IPython安装试图写入'/usr/local/share/man/man1'时,而Permission被拒绝。由于安装失败,似乎没有在bin目录中写入IPython文件。
使用“——user”可以工作,文件被写入~/.local。添加~ /。local/bin到$PATH意味着我可以从那里使用“ipython”。
但是,我正在尝试为一些用户安装这个,并且已经获得了对/usr/local/lib/python2.7目录的写权限。我在那里创建了一个“bin”目录,并为distutils设置指令:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
然后(-I用于强制安装,尽管之前失败了/。本地安装):
pip install -I ipython
然后我将/usr/local/lib/python2.7/bin添加到$PATH中。
我想我应该包括这个,以防其他人在他们没有sudo访问的机器上有类似的问题。
不幸的是,如果您在python中使用brew, pip/pip3附带的选项非常有限。你没有上面提到的——install-option,——target,——user选项。
注意pip install——user 对于已酿造的Python,禁用了正常的pip install——user。这是因为distutils中的一个错误,因为Homebrew编写了一个distutils.cfg来设置包前缀。 一个可能的解决方案(将可执行脚本放在~/Library/Python/./bin中)是: Python -m PIP install——user——install-option="——prefix=" <package-name>
您可能会发现这一行非常麻烦。我建议使用pyenv进行管理。 如果你正在使用
编译升级python python3
讽刺的是,你实际上降低了pip的功能。
(我发布这个答案,只是因为我的mac osx中的pip没有目标选项,我花了几个小时来修复它)