要从源代码构建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://git@github.com/lxml/lxml.git lxml

或者,使用git:

git clone ssh://git@github.com/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

您必须在sources.list中指定代码源_python如何从源代码构建lxml相关推荐

  1. E: 您必须在 sources.list 中指定代码源(deb-src) URI 解决办法

    PS:这篇是自己的笔记,用来自己查阅的,所以不是很通俗 今天遇到了如下问题: Q: "正在读取软件包列表--完成 E:您必须在 source.list中指定代码源(deb-src)URI&q ...

  2. python设计选择题代码源_Python程序的设计试题库完整

    . . . < Python 程序设计>题库 一. 填空题 第一章 基础知识 1 . Python 安装扩展库常用的是 _______ 工具.( pip ) 2 . Python 标准库 ...

  3. 在ASP.NET中指定出错页面,不让代码外泄!

    在ASP.NET中指定出错页面,不让代码外泄!在ASP.NET中原始的出错页面会暴露部分源代码,由此带来了潜在的安全隐患. ASP.NET允许应用程序出错时显示用户指定的页面,方法是在web.conf ...

  4. Spring中Bean创建完成后执行指定代码的几种实现方式

    Spring中Bean创建完成后执行指定代码的几种实现方式 1. 实现ApplicationListener接口 2. 实现InitializingBean接口 3. 使用@PostConstruct ...

  5. vb.net提取html网址,如何提取网页代码中指定内容

    怎么提取网页代码中指定内容? 某数据库网页结构如下: html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  6. 批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息

    批处理批量全篇替换txt文本文件中指定字符信息,修改三个参数后即可使用,话不多说直接上代码: @echo off setlocal EnableDelayedExpansion set path_st ...

  7. Java删除properties配置文件中指定键值的代码

    将开发过程较好的一些内容片段记录起来,下面的内容段是关于Java删除properties配置文件中指定键值的内容. public static boolean deleteKeyValue4Pro(S ...

  8. markdown中引用代码_如何在Markdown中引用您JavaScript源代码

    markdown中引用代码 您是否撰写有关Javascript和Typescript的技术文章? (Do you write technical articles about Javascript a ...

  9. 如何用python读取文本中指定行的内容

    如何用python读取文本中指定行的内容 搜索资料 我来答 分享 新浪微博 QQ空间 浏览 5284 次 查看全文 http://www.taodudu.cc/news/show-64036.ht ...

最新文章

  1. js float 取精度
  2. python绘制三维地形shade(vert_exag)参数_Python的地形三维可视化Matplotlib和gdal使用实例...
  3. 学习VUE时,利用webpack打包的错误处理方法
  4. 小记:再谈单例模式静态类区别优势
  5. CVE-2018-15473(OpenSSH用户枚举漏洞)
  6. dedecms在linux主机下的一个奇怪错误
  7. PHP: 手把手编写自己的 MVC 框架实例教程
  8. python入门--字典的特点
  9. 8.1.2 学习更多关于ConcurrentHashMap
  10. 软件设计师历年真题(2016-2021)
  11. 微信小程序 后端接口(thinkphp)
  12. Macbook Pro Air锁屏不进入睡眠
  13. Python脚本实现对Linux服务器CPU、内存、磁盘空间以及负载情况的监测
  14. linux远程连接db2,使用命令行连接远程DB2数据库
  15. Ckeditor5 整合Ckfinder3 防出错实战教程(二)整合篇
  16. 方舟生存进化服务器存档位置,方舟生存进化如何转移存档
  17. 《Java语言程序设计与数据结构》编程练习答案(第三章)(三)
  18. 如何使用KEIL5快速建立FreeRTOS项目(附建立成功的源代码以及问题解析)
  19. 人生若只如初见服务器维护,「北京服务器」人生若只如初见
  20. 用行列式的定义方法求解n阶行列式的值(C++)

热门文章

  1. 如何制定恰当的信息安全策略
  2. 解决JUnit报错 java.lang.ExceptionNo tests found matching方法
  3. WPF 仿IPhone滑块开关 样式 - CheckBox
  4. linux下安装部署ansible
  5. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
  6. php学习day9---数据库的基本知识
  7. 面向对象三大特征——继承
  8. 调试linux内核前的多虚拟机网络配置(图文教程)
  9. 个人对继承理解以及虚析构函数的理解
  10. U-Boot的LDS文件分析