通常、pipを介してpythonパッケージをインストールしました。
Google App Engineの場合、パッケージを別のターゲットディレクトリにインストールする必要があります。
私はもう試した:
pip install -I flask-restful --target ./lib
しかし、それは失敗します:
homeまたはprefix/exec-prefixのいずれかを指定する必要があります。両方ではありません
これを機能させるにはどうすればよいですか?
OS XとHomebrewを使用していますか? Homebrew pythonページ https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md は、pipおよび回避策。
私のために働いた。
次の内容の〜/ .pydistutils.cfgファイルを追加することにより、この「空のプレフィックス」をデフォルトにすることができます。
[install] prefix=
Edit:このHomebrew推奨オプションを使用しないでください。は通常のpip操作を中断します。
この問題(macOSのHomebrewのPython)には、通常のpip操作を壊さない簡単な解決策があると思います。
あなたがしなければならないことは、プロジェクトのルートディレクトリにsetup.cfg
ファイルを作成することです。通常はメインの__init__.py
または実行可能なpyファイルがあります。したがって、プロジェクトのルートフォルダーが/path/to/my/project/
である場合、そこにsetup.cfg
ファイルを作成し、その中に魔法の言葉を入れます。
[install]
prefix=
OK、今、あなたはそのフォルダに対してpipのコマンドを実行できるはずです:
pip install package -t /path/to/my/project/
このコマンドは、そのフォルダーに対してのみ正常に実行されます。 setup.cfg
を他のプロジェクトにコピーするだけです。ホームディレクトリに.pydistutils.cfg
を書き込む必要はありません。
モジュールのインストールが完了したら、削除することができますsetup.cfg
。
OSX(mac)では、/ var/myprojectというプロジェクトフォルダーを想定しています
cd /var/myproject
setup.cfg
というファイルを作成し、[install] prefix=
を追加しますpip install <packagename> -t .
を実行しますHomebrewユーザー向けの別のソリューション*は、単にvirtualenv
を使用することです。
もちろん、それはmayとにかくターゲットディレクトリの必要性を削除します-しかし、そうでない場合でも、--target
がデフォルトで機能することを発見しました(たとえば、 configファイル)仮想環境の場合。
*私は解決策を言う;おそらくそれは、venvsを細心の注意を払って使用することのもう1つの動機です...
--install-option="--prefix=lib"
に関する他の推奨事項でエラーが発生しました。私が見つけた唯一のことは、説明されているようにPYTHONUSERBASE
を使用することです here 。
export PYTHONUSERBASE=lib
pip install -I flask-restful --user
これは--target
とまったく同じではありませんが、どのような場合でも私にとってはうまくいきます。
他にも述べたように、これはpipとhomebrewでインストールされたpythonの既知のバグです。
「空のプレフィックス」命令で~/.pydistutils.cfg
ファイルを作成すると、この問題は修正されますが、通常のpip操作が中断されます。
このバグが公式に対処されるまで、オプションの1つは、このケースを処理する独自の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
ファイルを削除しますこのスクリプトは、ニーズに合わせて変更および調整できますが、アイデアは得られます。また、pipにブレーキをかけずにコマンドを実行できます。それが役に立てば幸い :)
Virtualenv *を使用している場合、使用しているwhich pip
を再確認することをお勧めします。
/usr/local/bin/pip
のようなものが表示される場合、環境から抜け出していることになります。 virtualenvを再アクティブ化すると、これが修正されます。
VirtualEnv:$ source bin/activate
VirtualFish:$ vf activate [environ]
*:私はvirtualfishを使用していますが、このヒントは両方に関連していると思います。