我正在使用Python 2.7.2在我的virtualenv中安装一个为pip打包的鸡蛋。 鸡蛋有16个要求,其中一个(pycryptopp 0.5.29)已知用gcc-4.6失败,因此必须用4.5编译。系统同时安装了gcc-4.6(默认)和gcc-4.5。
如何配置/破解pip install以专门构建此软件包? (或者我只是在安装此软件包时暂时插入链接/ usr / bin / gcc)
我是否需要清理现有的(virtualenv)/ build目录,如果是这样的话,该怎么办?
(我已经阅读了pip文档并搜索了SO + SU)
答案 0 :(得分:3)
这里不需要乱用符号链接。在大多数Linux系统上,您可以将编译器设置为与CC env var一起使用。在pycryptopp和pip的情况下,以下可能会有所帮助:
$ CC=/usr/bin/gcc-4.5 pip install pycryptopp
假设您在该位置安装了GCC 4.5。在Ubuntu 11.10(oneiric)上安装了gcc-4.5和g ++ - 4.5包,这对我来说很好。
答案 1 :(得分:1)
添加此内容是为了完整性,以扩展现有的良好答案;如果您使用Ubuntu
或Debian
之类的基于apt的发行版,则可以执行以下操作:
步骤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
第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的发行版中为所有事物选择版本的推荐方法。
答案 2 :(得分:0)
(我重写了“如何使用pip install,其中一个需求必须使用gcc-4.5编译?”)
1)正确的方法是使用链接到libcryptopp的“ - disable-embedded-cryptopp”进行构建。 Some people report runtime issue但它适用于我。
pip install --install-option="--disable-embedded-cryptopp" pycryptopp
2。)我使用的一个真正丑陋的解决方法(以及使用CC = ..可以避免使用哪个ulif)是专门为问题包调用pip install,并暂时将链接粘贴到gcc。< / p>
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。