python如何从源代码构建lxml

要从源代码构建lxml,需要正确安装libxml2和libxslt,包括头文件。这些可能在单独的-dev或-devel包中提供,例如libxml2-dev,您必须在尝试构建lxml之前安装它们。

内容

用Cython
Github,git和hg
建立资源
运行测试并报告错误
建造一个鸡蛋或轮子
在MacOS-X上构建lxml
Windows上的静态链接
从SVN源构建Debian软件包
用Cython
lxml.etree和lxml.objectify模块是用Cython编写的。但是,由于我们使用lxml版本分发Cython生成的.c文件,因此您不需要Cython从正常版本源构建lxml。我们甚至鼓励您不要为正常版本构建安装Cython,因为生成的C代码在Cython版本之间可能会有很大差异,这可能会也可能不会为lxml生成正确的代码。预先生成的释放源已经过测试,因此已知可以正常工作。

所以,如果你想要一个可靠的lxml版本,我们建议a)使用lxml的源版本,b)禁用或卸载Cython进行构建。

只有当您有兴趣从开发人员来源的结帐中构建lxml时(例如,测试尚未发布的错误修复)或者如果您想成为lxml开发人员,那么您确实需要一个有效的Cython安装。您可以使用pip来安装它:

pip install -r requirements.txt
https://github.com/lxml/lxml/blob/master/requirements.txt

lxml目前至少需要Cython 0.26.1,以后的发行版本也应该可以使用。对于Python 3.7支持,至少需要Cython 0.29。

Github,git和hg
lxml包是使用 Mercurial和hg-git插件在Github上的存储库中开发的。您可以使用以下命令检索当前开发人员版

hg clone git + ssh://[email protected]/lxml/lxml.git lxml
或者,使用git:

git clone ssh://[email protected]/lxml/lxml.git lxml
这将创建一个目录lxml并将源代码下载到其中,包括完整的开发历史记录。不要害怕,存储库下载相当快。您还可以通过Web 浏览 lxml存储库,或下载包含最新主分支的ZIP存档 。

建立资源
如上所述克隆源存储库(或下载源tar-ball并解压缩),然后键入:

python setup.py构建
要么:

python setup.py bdist_egg#需要’setuptools’或’distribute’
要使用Cython(重新)构建C源代码,您必须另外传递选项–with-cython:

python setup.py build --with-cython
如果要从源目录测试lxml,最好像这样在原地构建它:

python setup.py build_ext -i --with-cython
或者,在类Unix环境中:

做到位
要加速测试环境中的构建(例如,在连续集成服务器上),请设置CFLAGS环境变量以禁用C编译器优化(例如,对于gcc,“-O0”,即负零 - 零),例如:

CFLAGS =“ - O0”就位
如果您收到有关缺少头文件(例如Python.h或 libxml / xmlversion.h)的错误,那么您需要确保正确安装了Python,libxml2和libxslt的开发包。在Linux发行版中,它们通常称为 libxml2-dev或libxslt-devel。如果这些软件包安装在非标准位置,请尝试将以下选项传递给setup.py以确保找到正确的配置:

python setup.py build --with-xslt-config = / path / to / xslt-config
还有env vars允许覆盖配置工具:

env XML2_CONFIG = / path / to / xml2-config python build
您也可以使用pkg-config作为工具:

env XSLT_CONFIG =“pkg-config libxslt”python setup.py build
如果这没有帮助,您可能必须将头文件的位置添加到包含路径,如:

python setup.py build_ext -i -I / usr / include / libxml2
文件位于/usr/include/libxml2/libxml/xmlversion.h中

要在就地使用lxml.etree,可以将lxml的src目录放在Python模块搜索路径(PYTHONPATH)上,然后导入 lxml.etree以使用它:

#cd lxml
#PYTHONPATH = src python
Python 2.7.2
输入“帮助”,“版权”,“信用”或“许可”以获取更多信息。

来自lxml import etree

要确保在更改后干净地重新编译所有内容,可以运行make clean或删除文件src / lxml / etree.c。

运行测试并报告错误
源代码分发(tgz)和源代码库包含lxml的测试套件。您可以从顶级目录运行它:

python test.py
请注意,测试脚本仅测试就地构建(请参阅上面的distutils),因为它会搜索src目录。您可以使用以下一步命令来触发就地构建并对其进行测试:

做测试
这也运行ElementTree和cElementTree兼容性测试。要单独调用它们,请确保首先在PYTHONPATH上安装lxml,然后运行:

python selftest.py
和:

python selftest2.py
如果测试给出了失败,错误或更糟糕的分段错误,我们真的很想知道。请通过邮件列表联系我们,并请指定您使用的lxml,libxml2,libxslt和Python的版本,以及您的操作系统类型(Linux,Windows,MacOS-X,…)。

建造一个鸡蛋或轮子
这是为您的平台制作lxml鸡蛋或轮子的程序。它假定您已安装setuptools或分发,以及wheel包。

首先,下载lxml-xytar.gz版本。这包含预生成的C文件,以便您可以确保从发布源完全构建。将它们解压缩并cd到生成的目录中。然后,要构建一个轮子,只需运行该命令即可

python setup.py bdist_wheel
或者,使用编译的所有libxml2,libxslt和朋友构建一个静态链接的轮,运行

python setup.py bdist_wheel --static-deps
生成的.whl文件将写入dist目录。

要构建一个egg文件,请运行

python setup.py build_egg
如果您使用的是类Unix平台,则可以先使用构建扩展模块

python setup.py构建
然后cd进入目录build / lib.your.platform,在你找到的任何.so文件上调用 strip。这大大减小了二进制分布的大小。然后,从包根目录中调用

python setup.py bdist_egg
这将快速将预构建的包打包到egg文件中并将其放入dist目录中。

在MacOS-X上构建lxml
Apple定期发布带有可怕过时系统库的新系统版本。这特别适用于libxml2和libxslt,其中系统提供的版本过于陈旧,甚至无法长时间构建lxml。

虽然MacOS-X中的Unix环境使得安装Unix / Linux风格的包管理工具和新软件变得相对容易,但实际上似乎很难将库设置为MacOS-X在旧版本中提供的独占用途。除了系统库之外,其他发行版(如macports)也会安装它们的库,但MacOS上的编译器和运行时加载程序仍会在新库之前看到系统库。这可能导致不可摧毁的崩溃,其中似乎加载了较新的库但使用了较旧的系统库。

Apple不鼓励对库进行静态构建,这有助于解决这个问题。Apple不会在其系统中发布静态库二进制文件,并且有几个软件包管理系统遵循此决定。因此,构建静态二进制文件需要首先构建依赖项。该setup.py当你这样调用脚本自动执行此操作:

python setup.py build --static-deps
这将从官方FTP下载站点下载并构建最新版本的libxml2和libxslt。如果您想使用特定版本,或者想要阻止任何在线访问,您可以自己下载两个tar.gz版本文件,将它们放入lxml发行版中的子目录库中,并 使用所需的目标版本调用setup.py:

python setup.py build --static-deps
–libxml2-version = 2.9.1
–libxslt-version = 1.1.28 \

sudo python setup.py安装
如果你想使用setuptools来构建一个可安装的蛋,或者使用 bdist_wheel作为轮包,你可以使用任何目标,如bdist_egg,而不是构建。

请注意,这也适用于pip。由于在这种情况下您无法传递命令行选项,因此您必须使用环境变量:

STATIC_DEPS = true pip install lxml
要将软件包安装到系统Python软件包目录中,请使用“sudo”运行安装:

STATIC_DEPS = true sudo pip install lxml
该STATICBUILD环境变量等效处理到STATIC_DEPS变量,但被一些其他的扩展包,太。

如果您决定进行非静态构建,则除了XCode构建环境之外,您还可能必须安装命令行工具。它们可从此处获得限制下载:

https://developer.apple.com/downloads/index.action?=命令%20line%20tools#

没有它们,根据此票证中的第二条评论,编译器可能找不到XML库的必要头文件:

https://bugs.launchpad.net/lxml/+bug/1244094

Windows上的静态链接
大多数操作系统都有适当的软件包管理,这使得安装当前版本的libxml2和libxslt变得容易。最着名的例外是Microsoft Windows,它完全缺乏这些功能。为了解决这个平台的限制,lxml的安装可以下载依赖项的预构建包并静态构建它们。假设你有一个适当的C编译器设置来构建Python扩展,这应该工作:

python setup.py bdist_wininst --static-deps
它应该在pkg目录中创建一个Windows安装程序。

从SVN源构建Debian软件包
Andreas Pakulat提出了以下方法。

apt-get source lxml
删除解压缩的目录
tar.gz lxml SVN版本并替换目录中的orig.tar.gz
检查创建的tar.gz文件的md5sum,并在dsc文件中放置新的总和和大小
将dpkg-source -x lxml- [VERSION] .dsc和cd放入新创建的目录中
运行dch -i并添加一个评论,如“使用trunk版本”,这将增加debian版本号,以便apt / dpkg不会混淆
运行dpkg-buildpackage -rfakeroot -us -uc来构建包
如果dpkg-buildpackage告诉您缺少某些依赖项,您可以手动安装它们或运行apt-get build-dep lxml。

这将为您提供父目录中的.deb包,可以使用dpkg -i进行安装。
如果大家没有找到一个好的技术交流群或者需要关于python的资料的如1.爬虫库–requests,bs4,lxml,scrapy,pyspider2.python开发—Django,Tornado,flask框架3.linux,shell脚本4.selenium自动化测试5.自动化运维Zabbix6.数据库 MySql,NoSql,redis正则表达式re,网络编程,面向对象,lambda,IO并发编程,GUI图形

可以加入小编的群418775537

你可能感兴趣的:(Python)