我通常通过pip安装了python包。
对于Google App Engine,我需要将软件包安装到另一个目标目录。
我试过了:
pip install -I flask-restful --target ./lib
但它失败了:
必须提供home或prefix / exec-prefix - 而不是两者
我怎样才能让它发挥作用?
答案 0 :(得分:253)
您使用的是OS X和Homebrew吗? Homebrew python页面https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md用pip和解决方法调出一个已知问题。
为我工作。
你可以使这个"空前缀"通过添加一个默认值 〜/ .pydistutils.cfg文件包含以下内容:
[install] prefix=
编辑:不要使用此自制软件推荐选项,将破坏正常的点操作。
答案 1 :(得分:115)
我相信这个问题有一个更简单的解决方案(Homebrew的macOS上的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
。
答案 2 :(得分:18)
在OSX(mac)上,假设一个名为/ var / myproject
的项目文件夹cd /var/myproject
setup.cfg
的文件并添加
[install]
prefix=
pip install <packagename> -t .
答案 3 :(得分:12)
Homebrew用户的另一个解决方案*只是使用virtualenv
。
当然,可能无论如何都会删除对目标目录的需求 - 但即使它没有,我发现--target
默认工作(如同,没有创建) /在虚拟环境中修改配置文件。
*我说解决方案;也许这只是精心使用venvs的另一个动机......
答案 4 :(得分:2)
我点击--install-option="--prefix=lib"
周围的其他推荐错误。我发现唯一有效的方法是使用here所述的PYTHONUSERBASE
。
export PYTHONUSERBASE=lib
pip install -I flask-restful --user
这与--target
不完全相同,但无论如何它对我都有用。
答案 5 :(得分:1)
正如其他人提到的,这是已知的pip&amp; amp;用自制软件安装python。
如果使用&#34;空前缀&#34;创建~/.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
文件此脚本可以更改和调整以满足您的需求,但您会明白。它允许您在不制动点的情况下运行命令。希望它有所帮助:)
答案 6 :(得分:0)
如果你正在使用virtualenv *,那么仔细检查你正在使用的which pip
可能是个好主意。
如果您看到类似/usr/local/bin/pip
的内容,那么您已经脱离了环境。重新激活你的virtualenv将解决这个问题:
VirtualEnv:$ source bin/activate
VirtualFish:$ vf activate [environ]
*:我使用的是virtualfish,但我认为这个提示与两者都相关。
答案 7 :(得分:-1)
我有类似的问题。 我使用 - system 标志来避免错误,因为我在其他线程上描述了here,在那里我解释了我的具体情况。 我在这里发帖期待可以帮助任何面临同样问题的人。