Python最近アクセスしたシステムにPython $ ===パッケージをインストールしようとしました。Pythonの比較的新しい ユーザーサイトパッケージディレクトリごと を利用しようとしていました。新しいオプション_--user
_。(オプションは 現在は文書化されていません ですが、Python 2.6+の場合に存在します。_python setup.py install --help
_。)
走ってみたとき
_python setup.py install --user
_
ダウンロードしたパッケージで、常に次のエラーが発生しました。
_error: can't combine user with with prefix/exec_prefix/home or install_(plat)base
_
ご覧のとおり、コマンドラインオプションとして_--prefix
_、_--exec-prefix
_、_--install-base
_、または_--install-platbase
_フラグを指定していないため、エラーは非常に困惑していました。私は問題が何であるかを理解しようとして多くの時間を無駄にしました。数時間の yak shaving で他の貧しい人々の魂を救いたいと思って、以下に私の答えを文書化します。
pip install --user --install-option="--prefix=" <package_name>
または
python setup.py install --user --prefix=
=
の後にテキストはない(空白でもない)ことに注意してください。
--user
フラグを忘れないでくださいnot。
次の内容で~/.pydistutils.cfg
(またはOS /プラットフォームに相当するもの)を作成します。
[install]
prefix=
=
の後にテキストはない(空白でもない)ことに注意してください。
次に、必要なpip install --user
またはpython setup.py install --user
コマンドを実行します。 --user
フラグを忘れないでくださいnot。
最後に、このファイルを削除するか、名前を変更します。このファイルを残しておくと、この--user
を持つこのユーザーとしてPythonパッケージをシステム全体に(つまり、~/.pydistutils.cfg
なし)]インストールするときに問題が発生します。
これは、OpenSUSEとRedHatの両方の問題であると思われ、これらのプラットフォームでは virtualenvのバグ につながります。
このエラーは、システムレベル distutils構成ファイル (私の場合は/usr/lib64/python2.6/distutils/distutils.cfg
)が原因で発生しました
[install]
prefix=/usr/local
基本的に、これは常にinstall --prefix=/usr/local
としてインストールコマンドを実行するのと同じです。上記の手法のいずれかを使用して、この仕様をオーバーライドする必要があります。
コメントで指摘されているように、受け入れられた答え(おそらく遺伝子を持っている@gotgenesによる)は、予期しない結果につながる可能性があります。
@rogeleaderr氏は、「このファイルをこのように保持すると、Python /があなたのルートであると考えられることに注意してくださいpython他の新しいパッケージをインストールします。」
@gotgenesが推奨しているように、新しい構成ファイルを作成するよりも、--prefix=
(等号の右側にテキストがない)コマンドラインのオプションとして
$ python setup.py install --user --prefix=
利用可能な回答がなかったため、他の人の時間を節約するために投稿しています...
一部の環境では、--target
(-t
)スイッチを使用しても同じエラーが発生します。 Linuxの2つのフレーバーでのテストでは、--prefix=
パラメーターを使用したときに同じ問題が発生しました。
コード:
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
説明:多くの環境(MacOS、Amazon Linux、Debian)で機能すると思われる私の回避策は、PYTHONUSERBASE
環境変数を一時的な場所に設定することです。 --force-reinstall
は、パッケージが既にインストールされている場合でもローカルインストールをトリガーするために使用されます。
これにより、モジュールがコンパイル/インストールされます(OSとPythonバージョン)に依存):/tmp/lib/python2.7/site-packages/*