如何在一个需求依赖于gcc-4.5的版本时使用pip install



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

我如何配置/hack pip install来构建这个包?(或者我只是在安装这个包时临时拼凑链接/usr/bin/gcc)

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

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

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

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

如果您在该位置安装了GCC 4.5。在安装了gcc-4.5和g++-4.5包的Ubuntu 11.10 (oneiric)上,这对我来说工作得很好。

(我将问题从"如何使用pip install,其中一个需求必须用gcc-4.5编译?"重新命名)

1)正确的方法是使用"——disable-embedded-cryptopp"链接libcryptopp。有些人报告运行时问题,但它适用于我。

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

2)。我使用了一个非常丑陋的解决方案(并且可以通过使用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二进制文件的链接。它当然不能被生成文件

为了完整地扩展现有的好答案而添加这个;如果您使用的是基于apt的发行版,如UbuntuDebian,则可以执行以下操作:

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

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

步骤2:安装gcc/g++版本到你的OS的"alternatives"系统:

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++

它会在每种情况下询问您想要哪个版本,或者使用您提供的"weight"自动为您选择:

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的发行版中选择各种东西的版本的推荐方法。

相关内容

  • 没有找到相关文章

最新更新