如何在一个需求依赖于gcc-4.5版本的情况下使用pip安装

如何在一个需求依赖于gcc-4.5版本的情况下使用pip安装,gcc,pip,egg,pycrypto,Gcc,Pip,Egg,Pycrypto,我正在安装一个为pip打包的egg,在我的virtualenv中,在Python 2.7.2下。 egg有16个需求,其中一个(pycryptopp 0.5.29)已知不符合gcc-4.6,因此必须使用4.5进行编译。系统同时安装了gcc-4.6(默认)和gcc-4.5 我如何配置/hack pip安装来专门构建这个包?(或者在安装此软件包时,我只是暂时混淆了/usr/bin/gcc链接) 我是否需要清理断开的现有(virtualenv)/build目录,如果需要,如何清理 (我已经阅读了pip

我正在安装一个为pip打包的egg,在我的virtualenv中,在Python 2.7.2下。 egg有16个需求,其中一个(pycryptopp 0.5.29)已知不符合gcc-4.6,因此必须使用4.5进行编译。系统同时安装了gcc-4.6(默认)和gcc-4.5

我如何配置/hack pip安装来专门构建这个包?(或者在安装此软件包时,我只是暂时混淆了/usr/bin/gcc链接)

我是否需要清理断开的现有(virtualenv)/build目录,如果需要,如何清理

(我已经阅读了pip文档并搜索了SO+SU)

(我重新命名了“如何使用pip安装,其中一个要求必须使用gcc-4.5进行编译?”)

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;

这不好的进一步原因是:它需要根访问权限,并且会弄乱到gcc二进制文件的链接。它当然不能是Makefile'd。

不需要在这里摆弄符号链接。在大多数Linux系统上,您可以将编译器设置为与CC env变量一起使用。对于pycryptopp和pip,以下内容可能会有所帮助:

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

假设您在该位置安装了GCC4.5。在安装了gcc-4.5和g++-4.5包的Ubuntu 11.10(oneiric)上,这对我来说非常有效。

为了完整性而添加这一功能,以扩展现有的好答案;如果您使用的是基于apt的发行版,如
Ubuntu
Debian
,您可以执行以下操作:

步骤1:安装所需的gcc/g++版本

sudo apt install gcc-7 gcc-8 g++-7 g++-8
步骤2:将您的gcc/g++版本安装到操作系统的“备选”系统中:

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
sudo update-alternatives --remove gcc /usr/bin/gcc-7
步骤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 --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
sudo update-alternatives --remove gcc /usr/bin/gcc-7

您仍然可以使用root/sudo访问来执行此操作,但这比手动删除/创建链接或在命令行上指定环境变量要干净得多。这是推荐的方式,在ARPT发行版中选择各种类型的版本。

(PyCleoptP0.5.29 -2可能会修复编译中断)一个保存我的注释:有时你也需要C++,这是G++而不是GCC。确保已将其与apt install g++-4.5(或任何您需要的版本)一起安装