【发布时间】:2015-02-18 14:17:52
【问题描述】:
尝试在 Python3.4 上构建 lxml:系统确实有 libxml2 和 libxslt。
pip build 无法确定 MULTICORE(?) 等等(?)
下载的相关版本:
- lxml-3.4.1
- libiconv-1.14
- libxml2-2.9.2
- libxslt-1.1.28
首先,尝试标准构建(动态):
$ CFLAGS="-O0" pip3 install lxml
构建没有错误,但是:
Python 3.4.2 (default, Dec 13 2014, 16:48:48)
[GCC 4.8.3] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ld.so.1: isapython3.4: fatal: relocation error: file /usr/lib/python3.4/site-packages/lxml/etree.cpython-34m.so: symbol __xmlStructuredErrorContext: referenced symbol not found
符号存在,但是:
$ nm /usr/lib/python3.4/site-packages/lxml/etree.cpython-34m.so | grep __xmlStructuredErrorContext
U __xmlStructuredErrorContext
但在底层 libxml2 中是“本地的”:
# nm /usr/lib/libxml2.so.2 | grep __xmlStructuredErrorContext
000d69d0 t __xmlStructuredErrorContext
好的,按照建议尝试构建 STATIC:
$ STATIC_DEPS=true CFLAGS="-O0" pip3 install lxml
...
**Exception: Command "make -j6" returned code 256**
Building lxml version 3.4.1.
Latest version of libiconv is 1.14
Latest version of libxml2 is 2.9.2
Latest version of libxslt is 1.1.28
...
Starting build in build/tmp/libiconv-1.14
----------------------------------------
Cleaning up... Removing temporary dir /tmp/pip_build_root...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/lxml
Exception information:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args) File "/usr/lib/python3.4/site-packages/pip/commands/install.py", line 278, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/usr/lib/python3.4/site-packages/pip/req.py", line 1229, in prepare_files
req_to_install.run_egg_info() File "/usr/lib/python3.4/site-packages/pip/req.py", line 325, in run_egg_info command_desc='python setup.py egg_info')
File "/usr/lib/python3.4/site-packages/pip/util.py", line 697, in call_subprocess
% (command_desc, proc.returncode, cwd))
pip.exceptions.InstallationError: Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/lxml
更详尽的日志:http://pastebin.com/P6T246QC
【问题讨论】:
-
对于第一种情况,
etree*so库指向哪些库(ldd ...)?我的猜测是xmlStructuredErrorContext缺少其中一个,可能是因为其中一个链接库已弃用该未来,或者因为它太旧而缺少它。 -
对于动态构建,它会找到系统库 - 例如 libxml2 的 v2.9.2。另一张海报暗示这里符号上的“本地”标志可能是问题所在?有道理? #nm /usr/lib/libxml2.so.2 | grep __xmlStructuredErrorContext 000d69d0 t __xmlStructuredErrorContext
-
尝试使用像this这样的python发行版。专门帮助我解决 lxml 问题,等等。
-
PIP 检查操作系统和硬件限制以从源代码编译模块?完全令人失望,试试
sudo apt-get install python-lxml。其中包括/要求你有什么?哪个二进制编译C/C#/C+/C++源代码?
标签: python python-3.x pip lxml