回答:
OS XとHomebrewを使用していますか?Homebrewのpythonページhttps://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.mdは、pipの既知の問題と回避策を示しています。
私のために働いた。
次の内容の〜/ .pydistutils.cfgファイルを追加することで、この「空のプレフィックス」をデフォルトにすることができます。
[install] prefix=
編集:このHomebrew推奨オプションを使用しないでください。通常のPIP操作が中断されます。
pip install
操作を壊します:(
--target
せずに許可する方法を見つけた人はいますpip install
か?
この問題(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
。
setup.cfg
インストール後の削除部分に重点を置いています。私は、virtualenv環境が台無しにされた理由を解明しようと、丸一日2日を費やしました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 .
外に留まる代わりに実行するということです。この方法は私には効果があり、他の方法は効果がありませんでしたが、理由はわかりません。
Homebrewユーザーの別のソリューション*は、単にを使用することvirtualenv
です。
もちろん、それによってターゲットディレクトリの必要性が取り除かれる可能性があります。ただし、そうでなくても--target
、仮想環境ではデフォルトで(構成ファイルの作成/変更を行わずに)動作することがわかりました。
*私は解決策を言います。多分それはvenvを細心に使用するもう1つの動機です...
他にも述べたように、これは、homebrewでインストールされたpipと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
ファイルを削除しますこのスクリプトは、ニーズに対応するように変更および適合できますが、アイデアは得られます。そしてそれはあなたがピップをブレーキをかけずにあなたのコマンドを実行することを可能にします。それが役に立てば幸い :)
virtualenv *を使用している場合は、使用していることを再確認するwhich pip
ことをお勧めします。
あなた/usr/local/bin/pip
があなたの環境から抜け出したような何かを見た場合。virtualenvを再アクティブ化するとこれが修正されます:
VirtualEnv: $ source bin/activate
VirtualFish: $ vf activate [environ]
*:私はvirtualfishを使用していますが、このヒントは両方に当てはまると思います。