우리는 CentOS 환경에서 우리의 응용 프로그램을 다른 리눅스, 특히 우분투로 이식하려고합니다. 응용 프로그램은 python 기반이므로 문제가 없어야하지만 XPATH를 구문 분석 할 때 이상한 동작을 발견했습니다.동일한 xpath가 Centos, Ubuntu에서 다른 값을 반환합니다.
샘플 파일 :
<root>
<outer>
<inner>
<el/>
</inner>
<inner>
<el/>
</inner>
</outer>
</root>
코드 :
를 CentOS에from lxml import etree
r = etree.parse('foo.xml')
print 'One: ', r.xpath('.//el[2]')
print 'Two: ', r.xpath('(.//el)[2]')
(파이썬 2.7.5) :
One: [<Element el at 0x25fdcf8>]
New version: [<Element el at 0x25fdcf8>]
레드햇 엔터프라이즈 6.6 (파이썬 2.7.11)
One: []
Two: [<Element el at 0x7fa27198cd40>]
데비안과 우분투 (파이썬 2.7.9 및 2.7.12)에
는 :
One: []
Two: [<Element el at 0x7f94ed6cf200>]
이 두 번째 요소 el
에 액세스하려고 같은 코드입니다.
데비안, 우분투 및 센트 환경에는 lxml (pip
에서 설치) 버전 3.6.4가 있습니다. 그것이 libxml2를 상대로 컴파일 LXML 설치하는 경우
:
에 CentOS에$ dpkg -l | grep libxml2-dev
ii libxml2-dev:amd64 2.9.1+dfsg1-5+deb8u2 amd64
:
$ rpm -q libxml2-devel
libxml2-devel-2.7.6-21.el6.x86_64
무슨 일이야 :
$ rpm -q libxml2-devel
libxml2-devel-2.9.1-6.el7_2.3.x86_64
레드햇은 etree 3.6.0을 실행 여기에?
같은 파이썬 버전? – Hackerman
@Hackerman 아니오, 사실 데비안은 2.7.9를 실행했습니다. 2.7.22 우분투 및 2.7.5 센토. 그게 어떻게 관련 될 수 있니? – lorenzog
'lxml.etree; lxml.etree.LIBXML_COMPILED_VERSION'을 각각에 가져 오는 것은 무엇입니까?당신이 특정 버전을 가지고 있기 때문에 그것이 컴파일 된 것을 의미하지는 않습니다. –