当使用pip安装linux二进制带错误:没有足够的空间的程序标题,尝试与-N连接

在Amazon Linux的某些目标文件上使用strip时,会出现以下错误: $ sudo strip dfitpack.so BFD: st6qqyd2: Not enough room for program headers, try linking with -N strip:st6qqyd2[.note.gnu.build-id]: Bad value

目标文件由pip install创build,软件包包括numpy,sklearn,pandas,xgboost,numexpr。 我们正在尝试去除代码和目标文件,以适应AWS Lambda 250MB的限制。

谷歌search在GNU邮件列表上find对binutils的引用,但是大多数提示是为开发人员构build自己的代码以及对头文件等进行更改而devise的。 我怀疑有一个生成configuration的变化,我可以在运行pip install ,并希望有更好的理解binutils的人可以帮助。

规格: $ uname -a Linux ... 4.4.5-15.26.amzn1.x86_64 #1 SMP Wed Mar 16 17:15:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ yum info binutils ... Version : 2.23.52.0.1 Release : 55.65.amzn1 ...

一些pip软件包(或它们的依赖)下载二进制代码,而不是下载源代码并在本地机器上构build,而且在另一个环境中构build的二进制文件上运行strip时可能会出现问题。 要下载源代码并在本地机器上构build,请尝试:

 CFLAGS='-O0' pip install --no-binary :all: PACKAGE 

请参阅https://pip.pypa.io/en/stable/reference/pip_install/#install-no-binary上的 pip文档

https://github.com/spotify/dh-virtualenv/issues/150上构buildDebian软件包的过程中讨论了这个问题

请注意,某些二进制文件可能无法使用优化标记进行构build,因此将CFLAGS设置为禁用优化标记,请参阅: https : //stackoverflow.com/questions/16149613/installing-lxml-with-pip-in-virtualenv-ubuntu-12-10 -错误-命令GCC-失败

另外请注意,从源代码构build所有依赖关系可能需要很长时间,所以如果您有时间来分类哪些程序包有问题,哪些没有问题,并且想要加快构build,则可以尝试一些这个配方只安装一些源码包和不同级别的优化:

 CFLAGS='-O0' pip install --no-binary :all: PACKAGE pip install --no-binary :all: PACKAGE pip install PACKAGE