Answers:
您正在使用OS X和Homebrew吗?Homebrew python页面https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md指出了pip的已知问题和解决方法。
为我工作。
通过添加具有以下内容的〜/ .pydistutils.cfg文件,可以将此“空前缀”设置为默认值:
[install] prefix=
编辑:不要使用此Homebrew建议的选项,它将破坏正常的点操作。
pip install
操作:(
--target
在不破坏默认pip install
行为的情况下允许?
我相信有一个更简单的解决方案(在macOS上使用Homebrew的Python),不会破坏您的常规pip操作。
您要做的就是setup.cfg
在项目的根目录下创建一个文件,通常在主__init__.py
或可执行py文件所在的位置。因此,如果您的项目的根文件夹为:/path/to/my/project/
,请setup.cfg
在其中创建一个文件,然后在其中放入神奇的单词:
[install]
prefix=
好的,现在您可以为该文件夹运行pip的命令:
pip install package -t /path/to/my/project/
该命令仅在该文件夹中正常运行。只需将其复制setup.cfg
到您可能拥有的任何其他项目中即可。无需.pydistutils.cfg
在主目录上写一个。
安装完模块后,可以将其卸下 setup.cfg
。
setup.cfg
安装后拆卸部分。我花了整整2天的时间来弄清楚为什么我的virtualenv环境被搞砸了,并出现诸如的错误Could not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
。删除安装文件恢复了我的理智
在OSX(mac)上,假定项目文件夹为/ var / myproject
cd /var/myproject
setup.cfg
并添加
[install]
prefix=
pip install <packagename> -t .
-t .
不在目录之外。这种方式对我有用,而另一种却没有,尽管我不知道为什么。
我在周围的其他建议中遇到了错误--install-option="--prefix=lib"
。我发现唯一有效的方法就是PYTHONUSERBASE
按此处所述使用。
export PYTHONUSERBASE=lib
pip install -I flask-restful --user
这与并不完全相同--target
,但是无论如何我都会成功。
如其他提到的那样,这是与homebrew一起安装的pip和python的已知错误。
如果~/.pydistutils.cfg
使用“空前缀”指令创建文件,它将解决此问题,但会破坏正常的点操作。
在正式解决此错误之前,一种选择是创建自己的bash脚本来处理这种情况:
#!/bin/bash
name=''
target=''
while getopts 'n:t:' flag; do
case "${flag}" in
n) name="${OPTARG}" ;;
t) target="${OPTARG}" ;;
esac
done
if [ -z "$target" ];
then
echo "Target parameter must be provided"
exit 1
fi
if [ -z "$name" ];
then
echo "Name parameter must be provided"
exit 1
fi
# current workaround for homebrew bug
file=$HOME'/.pydistutils.cfg'
touch $file
/bin/cat <<EOM >$file
[install]
prefix=
EOM
# end of current workaround for homebrew bug
pip install -I $name --target $target
# current workaround for homebrew bug
rm -rf $file
# end of current workaround for homebrew bug
该脚本包装了您的命令,并:
~/.pydistutils.cfg
其中带有“空前缀”指令的文件~/.pydistutils.cfg
文件可以更改此脚本并将其改编为满足您的需求,但您有所想法。而且它使您可以在不制动点的情况下运行命令。希望能帮助到你 :)
如果您使用的是virtualenv *,最好再次检查一下which pip
您使用的是哪个。
如果看到类似情况,则说明/usr/local/bin/pip
您已脱离环境。重新激活您的virtualenv将解决此问题:
VirtualEnv: $ source bin/activate
虚拟鱼: $ vf activate [environ]
*:我使用virtualfish,但我认为此技巧与两者都有关。