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

发布于 2024-12-11 11:53:25 字数 316 浏览 0 评论 0原文

我正在我的 virtualenv 中的 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)

I am installing an egg packaged for pip, inside my virtualenv, under Python 2.7.2.
The egg has 16 requirements, one of which (pycryptopp 0.5.29) is known to fail with gcc-4.6 and hence must be compiled with 4.5. The system has both gcc-4.6 (default) and gcc-4.5 installed.

How do I configure/hack pip install to build this package specially? (or do I just temporarily kludge the link /usr/bin/gcc while installing this package)

Do I need to clean up the existing (virtualenv)/build directory where it broke, and if so how?

(I already read the pip documentation and searched SO + SU)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离旧人 2024-12-18 11:53:25

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

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

假设您已在该位置安装了 GCC 4.5。这对我在安装了 gcc-4.5 和 g++-4.5 软件包的 Ubuntu 11.10 (oneiric) 上运行得很好。

No need to fiddle around with symlinks here. On most Linux systems you can set the compiler to use with the CC env var. In case of pycryptopp and pip the following might help:

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

given that you have GCC 4.5 installed in that location. This worked fine for me on Ubuntu 11.10 (oneiric) with packages gcc-4.5 and g++-4.5 installed.

时光沙漏 2024-12-18 11:53:25

(我将问题重新命名为“如何使用 pip install 其中一个要求必须使用 gcc-4.5 进行编译?”)

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

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

(I retitled the question from "How to use pip install where one requirement must be compiled with gcc-4.5?")

1) The correct method is to build with "--disable-embedded-cryptopp" which links to libcryptopp. Some people report runtime issue but It Works For Me.

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

2.) A truly ugly workaround which I used (and which ulif helpfully points out can be obviated by using CC=.. ) is to invoke pip install specifically for the problem package, and temporarily kludge the link to 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;

Further reasons this is bad: it requires root access and messing with the link to gcc binary. It certainly can't be Makefile'd.

迷鸟归林 2024-12-18 11:53:25

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

第 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 的发行版中为各种事物选择版本的推荐方法。

Adding this for completeness to extend upon the existing good answers; if you are on apt based distribution such as Ubuntu or Debian, you can do the following:

Step 1: Install the versions of gcc/g++ you need

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

Step2: Install your gcc/g++ versions into "alternatives" system of your 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

Step 3: Select your active gcc/g++ versions

sudo update-alternatives --config gcc

sudo update-alternatives --config g++

It will in each case ask you which version you want, or use the "weight" you provided to select automatically for you:

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.

TIP: If you want to delete a version, simply use this:

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

You will still use root/sudo access to do this, but it is much cleaner than dealing with manually deleting/creating links, or specifying environment variables on the commandline. It is the recommended way of selecting versions for all kinds of things in arpt based distributions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文