1. ホーム
  2. python

[解決済み] setup.py install で --user と --prefix の組み合わせでエラーになる。

2022-10-02 17:49:05

質問

私は最近アクセスしたシステムに Python パッケージをインストールしようとしていました。私は、Python の比較的新しい per user site-packages ディレクトリ という新しいオプションと --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 というフラグをコマンドラインオプションで指定します。私はこの問題が何であるかを理解するために多くの時間を浪費しました。以下に私の答えを書きます。 ヤクの髭剃り .

どのように解決するのですか?

1 回の回避策です。

pip install --user --install-option="--prefix=" <package_name>

または

python setup.py install --user --prefix=

の後にはテキストがない(空白でさえない)ことに注意してください。 = .

行う ではなく を忘れてはいけません。 --user のフラグを忘れてはいけません。

複数パッケージのインストール

作成 ~/.pydistutils.cfg (またはあなたのOS/プラットフォームに相当するもの)を以下の内容で作成してください。

[install]
prefix=

の後にはテキストがない(空白でさえない)ことに注意してください。 = .

次に、必要な pip install --user または python setup.py install --user コマンドを使用します。行う ではなく を忘れてはいけません。 --user のフラグを忘れてはいけません。

最後に、このファイルを削除するか名前を変更します。このファイルを残したままにしておくと、Python パッケージをシステム全体にインストールするときに問題が発生します (つまり、Python パッケージに --user がない場合) 問題になります。 ~/.pydistutils.cfg .

この問題の原因

これは OpenSUSE と RedHat の両方で発生する問題のようで、その結果 virtualenv のバグ のバグにつながりました。

このエラーの原因は、システムレベルの distutils 設定ファイル (私の場合は /usr/lib64/python2.6/distutils/distutils.cfg ) には、次のようなものがありました。

[install]
prefix=/usr/local

基本的に、これはインストールコマンドを常に install --prefix=/usr/local . この仕様は、上記のいずれかの手法で上書きする必要があります。