使用Easy_Install-2.7从https://pypi.python.org/pypi/lxml/3.2.1安装LXML后,我遇到了很多麻烦。我使用cygwin在Windows上安装它,起初包装似乎没问题。然而,经过进一步测试,我遇到了问题。
当我使用以下代码运行代码时
import lxml
它完全正常。但是一旦我尝试:
import lxml.etree
我收到此错误:
Traceback (most recent call last):
File "D:\Nick_Code\NewsScraper\testdummy.py", line 7, in <module>
import lxml.etree
File "/usr/lib/python2.7/site-packages/lxml-3.2.0-py2.7-cygwin-1.7.20-i686.egg/lxml/etree.py", line 7, in <module>
__bootstrap__()
File "/usr/lib/python2.7/site-packages/lxml-3.2.0-py2.7-cygwin-1.7.20-i686.egg/lxml/etree.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: Permission denied
我一直试图找到信息/工作很长一段时间但没有成功。如果您有任何见解或需要信息,请与我们联系。
谢谢!
迈克尔
答案 0 :(得分:3)
这不是一个可靠的答案。但我将重点介绍获得解决方案所涉及的几个问题。最有可能是上述问题,就像是由几个因素共同造成的癌症造成的。
当我尝试在我的Windows Vista计算机上使用本机Cygwin提供的Python软件包时,我遇到与OP相同的问题。作为Python新手,我花了几天时间试图让它工作,并理解它为什么不起作用。但我所有的谷歌都没有返回任何死胡同。所以这就是我对此的看法。
有很多原因导致Python在Cygwin下遇到麻烦,有些是你可以做些什么,有些是超出大多数人控制的。归结为以下几个关键问题:
在文件权限方面,Windows是一个完整的混乱,Cygwin无法很好地处理Windows文件权限。所以你在Cygwin看到的远不是整个故事。
Windows可耻地与字符大小写无关,这会导致很多麻烦,特别是当您需要(交叉)编译最初在基于* nix的系统(即所有内容)下开发的任何内容时。实际上,如果您尝试提取包含名称仅以大写形式不同的文件的任何存档。 (即#34; makefile &#34; vs&#34; Makefile &#34;等等)Windows或Cygwin下的文件,除了其中一个文件。如果他们你需要使用区分大小写来做除了#34; hello world&#34;之外的任何事情。 * nix汇编。
Windows处理与Cygwin完全不同的符号链接。如果您的ZIP,TAR等档案包含任何符号链接,它们将在提取到Windows环境后被破坏。
软件代码实践,开发人员未在各种环境中正确测试其创建,或仔细设置其*.tar.gz
集合的正确文件权限。包括正确的依赖规范,或提及二进制文件是否已静态链接等。
有关完整的血腥细节和进一步(Win-Cygwin)问题,请查看HERE。
起初我尝试使用Cygwin自己的Python,没有任何额外的软件包,并使用PIP和easy_install安装lxml。然后我尝试使用Cygwin自己的libxml2,libxslt和xml python包,我遇到了同样的问题。
首先,安装静态Windows二进制文件后(如其他地方所示), 我收到了这个错误:
File "/usr/lib/python2.7/site-packages/lxml-3.2.4-py2.7-cygwin-1.7.24-i686.egg/lxml/etree.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: Permission denied
Aborted (core dumped)
然后我调查了文件权限并更改了:chmod -R 755 /usr/lib/python2.7/
我进一步将问题隔离到一个明显丢失的文件。 并且启用详细和诊断模式也没有多大帮助。
File "/usr/lib/python2.7/site-packages/lxml-3.2.4-py2.7-cygwin-1.7.24-i686.egg/lxml/etree.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: No such file or directory
Aborted (core dumped)
HERE是确切的声明规范:
加载并初始化一个实现为动态可加载共享的模块 库并返回其模块对象。如果模块已经初始化,那么 将再次初始化。重新初始化涉及复制
__dict__
模块的缓存实例的属性超过模块中使用的值 缓存在 sys.modules 中。 pathname参数必须指向共享库。 name参数用于构造初始化函数的名称: 调用共享库中名为 initname()的外部C函数。该 可选的文件参数被忽略。 (注意:使用共享库非常重要 系统依赖,并非所有系统都支持它。)
所以我开始阅读lxml website,它清楚地说明lxml对 libxml2 和 libxslt 的依赖关系,除非它们是静态链接的,他们还依赖于iconv和zlib。因此,您必须相信您需要安装所有这些。唐&#39;吨!继续阅读。但是如果您要从源代码构建(就像easy_install可能会尝试做的那样),您将需要一切,包括开发头库: libxml2-devel,libxslt-devel 。另一个地方声明你还需要 Cython 并安装:
easy_install lxml==dev
依赖关系显示在HERE的这张图片中:
所以你认为你可能会逃避:
STATIC_DEPS=true pip install lxml
但那也不行。可能是因为用于编译Cygwin的Python的库必须与编译lxml的库相同。但我不知道。请注意lxml包如何引用Cygwin &#34; 1.7.24&#34; 。我的Cygwin已经&#34; 1.7.25&#34; ,您可以使用uname -a
进行检查。然后,您可以使用file
和ldd
检查静态python可执行文件。然后你就会明白这也取决于用于在Windows或* nix下构建python / cygwin的C编译器。嗅到一场噩梦,我决定建立自己的噩梦是不可能的。接下来我尝试安装Python库(提供为
可执行文件)适用于Windows Python。这没有用,因为我从来没有安装过Windows原生Python,我遇到了一个错误,安装程序无法在我的注册表中找到Python。我当然可以提取可执行文件,但我不知道在没有安装程序的情况下放置二进制文件的位置。所以我有另一个想法......
据我所见,有三种可能的解决方案可以让它发挥作用。
安装Windows本机Python解释器的简便方法。你放弃了一些原生的Cygwin功能,除非你安装在正确的位置:/usr/lib/python2.7并确保Cygwin可以找到并使用它。这也使用与Cygwin(UTF-8)不同的文件权限,区分大小写和字符集(UTF-16LE),可能会产生许多其他问题! 难度:容易
继续攻击Cygwin的Python,使其与(1)中使用的二进制库一起使用。但这需要:
通过从头开始编译Python和所有库来正确地完成它。 难度:难!
我成功地做了(1),但我仍然认为(2)是更聪明的方式,但我没有测试过,这就是为什么我不认为这是一个好的答案。 BTW。还有一个怪癖,我必须运行解释器:python.exe -E
以避免烦人:&#34; 语法错误:语法无效 &#34;什么时候回来!
结论:
显然,你不需要libxml2和libxslt python包来使用lxml! 在我的情况下,我需要Scrapy,所以我还必须安装一些其他软件包。
$ pip.exe list
cssselect (0.9.1)
lxml (3.2.4)
pip (1.4.1)
pyOpenSSL (0.11)
pywin32 (218)
queuelib (1.1.1)
Scrapy (0.20.0)
setuptools (1.4.1)
six (1.4.1)
Twisted (13.2.0)
w3lib (1.5)
zope.interface (4.0.5)
$ll /cygdrive/c/Python27/Lib/site-packages/
adodbapi
cssselect
isapi
lxml
OpenSSL
pip
pythonwin
pywin32_system32
queuelib
scrapy
twisted
w3lib
win32
win32com
win32comext
zope
cssselect-0.9.1-py2.7.egg-info
lxml-3.2.4-py2.7.egg-info
pip-1.4.1-py2.7.egg-info
queuelib-1.1.1-py2.7.egg-info
Scrapy-0.20.0-py2.7.egg-info
six-1.4.1-py2.7.egg-info
Twisted-13.2.0-py2.7.egg-info
w3lib-1.5-py2.7.egg-info
zope.interface-4.0.5-py2.7.egg-info
PyWin32.chm
setuptools-1.4.1-py2.7.egg
pyOpenSSL-0.11-py2.7.egg-info
pywin32-218-py2.7.egg-info
easy-install.pth
pywin32.pth
setuptools.pth
zope.interface-4.0.5-py2.7-nspkg.pth
pythoncom.py
six.py
pythoncom.pyc
six.pyc
pythoncom.pyo
pywin32.version.txt
README.txt
有用的参考资料: