4

Python 2.7.2で、virtualenv内にpip用にパッケージ化されたeggをインストールしています。卵には16の要件があり、そのうちの1つ(pycryptopp 0.5.29)はgcc-4.6で失敗することがわかっているため、4.5でコンパイルする必要があります。システムにはgcc-4.6(デフォルト)とgcc-4.5の両方がインストールされています。

このパッケージを特別にビルドするためにpipinstallを構成/ハックするにはどうすればよいですか?(または、このパッケージのインストール中にリンク/ usr / bin / gccを一時的にクラッジしますか?)

壊れた既存の(virtualenv)/ buildディレクトリをクリーンアップする必要がありますか?もしそうなら、どのようにすればよいですか?

(私はすでにpipのドキュメントを読み、SO + SUを検索しました)

4

3 に答える 3

7

ここでシンボリックリンクをいじる必要はありません。ほとんどのLinuxシステムでは、CCenvvarで使用するようにコンパイラーを設定できます。pycryptoppとpipの場合、次のことが役立つ場合があります。

$ CC=/usr/bin/gcc-4.5 pip install pycryptopp

その場所にGCC4.5がインストールされているとします。これは、パッケージgcc-4.5およびg++-4.5がインストールされているUbuntu11.10(oneiric)で正常に機能しました。

于 2012-01-20T12:47:30.103 に答える
1

(「1つの要件をgcc-4.5でコンパイルする必要があるpip installの使用方法」の質問のタイトルを変更しました)

1)正しい方法は、libcryptoppにリンクする「--disable-embedded-cryptopp」を使用してビルドすることです。ランタイムの問題を報告する人もいますが、それは私にとってはうまくいきます。

pip install --install-option="--disable-embedded-cryptopp" pycryptopp

2.)私が使用した本当に醜い回避策(そしてulifがCC = ..を使用することで回避できると指摘している)は、問題のあるパッケージ専用のpip installを呼び出し、一時的にgccへのリンクを壊すことです。

pushd /usr/bin; sudo rm gcc-4.6; ln -s gcc-4.5 gcc; popd;
pip install pycryptopp
pushd /usr/bin; sudo rm gcc-4.5; ln -s gcc-4.6 gcc; popd;

これが悪いさらなる理由:rootアクセスとgccバイナリへのリンクをいじる必要があります。確かにMakefileすることはできません。

于 2011-10-20T23:05:30.163 に答える
1

完全を期すためにこれを追加して、既存の良い答えを拡張します。またはなどのaptベースの配布を使用しているUbuntu場合Debianは、次の操作を実行できます。

ステップ1:必要なバージョンのgcc /g++をインストールする

sudo apt install gcc-7 gcc-8 g++-7 g++-8

ステップ2:gcc /g++バージョンをOSの「代替」システムにインストールします。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 80

ステップ3:アクティブなgcc /g++バージョンを選択します

sudo update-alternatives --config gcc

sudo update-alternatives --config g++

いずれの場合も、必要なバージョンを尋ねるか、提供した「重み」を使用して自動的に選択します。

Selection    path               Priority    Status
--------------------------------------------------------------------
* 0          /usr/bin/gcc-8     80          auto mode
  1          /usr/bin/gcc-8     80          manual mode
  2          /usr/bin/gcc-7     70          manual mode

Press ENTER to maintain, or type the selection number to the corresponding version.

ヒント:バージョンを削除する場合は、次を使用してください。

sudo update-alternatives --remove gcc /usr/bin/gcc-7

これを行うには、引き続きroot / sudoアクセスを使用しますが、手動でリンクを削除/作成したり、コマンドラインで環境変数を指定したりするよりもはるかにクリーンです。これは、arptベースのディストリビューションであらゆる種類のもののバージョンを選択するための推奨される方法です。

于 2020-02-29T01:13:03.353 に答える