【问题标题】:How to use pip install where one requirement has dependency on version on gcc-4.5如何在一个要求依赖于 gcc-4.5 版本的情况下使用 pip install
【发布时间】:2011-12-12 04:02:15
【问题描述】:

我正在我的 virtualenv 中,在 Python 2.7.2 下安装一个为 pip 打包的 egg。 egg 有 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)

【问题讨论】:

  • (pycryptopp 0.5.29-2 可能会修复编译损坏)

标签: gcc pip egg pycrypto


【解决方案1】:

这里无需摆弄符号链接。在大多数 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) 上,这对我来说效果很好。

【讨论】:

  • 一个救了我的注释:有时你也需要 c++,它是 g++ 而不是 gcc。确保您已使用 apt install g++-4.5(或您需要的任何版本)安装它
【解决方案2】:

(我将问题重新命名为“How to use pip install where one requirements must becompiled with gcc-4.5?”)

1) 正确的方法是使用链接到 libcryptopp 的 "--disable-embedded-cryptopp" 进行构建。 Some people report runtime issue 但它对我有用。

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 的。

【讨论】:

    【解决方案3】:

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

    第一步:安装你需要的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 的发行版中为各种事物选择版本的推荐方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-21
      • 2017-07-18
      • 2019-10-15
      • 2016-08-01
      • 2019-05-06
      • 1970-01-01
      • 2016-05-10
      • 2021-06-19
      相关资源
      最近更新 更多