У lxml по существу ничего нет - PullRequest
1 голос
/ 29 января 2010

Пакет lxml для Python в моей системе абсолютно не работает. Я не уверен в проблеме, так как все файлы на месте, кажется. Я подозреваю, что проблема в __init__.py, но у меня недостаточно практики с системой, чтобы поставить точный диагноз или решить проблему.

Вот код, который, я думаю, поможет диагностировать проблему:

Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
>>> dir(lxml)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> print lxml.__path__
['/usr/lib/python2.6/dist-packages/lxml']
>>> c = open("/usr/lib/python2.6/dist-packages/lxml/__init__.py", "r")
>>> for line in c:
...     print line
... 
# this is a package



>>> c.close()
>>> import os
>>> os.system("ls /usr/lib/python2.6/dist-packages/lxml/")
builder.py      ElementInclude.py   __init__.py    sax.pyc
builder.pyc     ElementInclude.pyc  __init__.pyc       usedoctest.py
cssselect.py        _elementpath.py objectify.so       usedoctest.pyc
cssselect.pyc       _elementpath.pyc    pyclasslookup.py
doctestcompare.py   etree.so        pyclasslookup.pyc
doctestcompare.pyc  html        sax.py
0
>>> 

Как я уже сказал, мое подозрение в том, что __init__.py содержит проблему, но я не уверен на 100%.

Кроме того, я использую Linux Mint 8 - грубый эквивалент Ubuntu 9.10.

Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 29 января 2010

Нет, вы просто делаете это неправильно! Попробуйте, например, from lxml import etree, и вы сможете полностью использовать etree. import lxml - импорт пакета ! - не предоставляет вам неявный доступ к любому из модулей пакета ! -)

1 голос
/ 29 января 2010

Для файла __init__.py совершенно нормально не иметь ничего: http://docs.python.org/tutorial/modules.html#packages

Файл предназначен для того, чтобы Python знал, что это пакет, а не просто каталог с кучей модулей в нем.

Вам просто нужно импортировать модули внутри пакета напрямую.

from lxml import etree, html

и т.д ...

1 голос
/ 29 января 2010

Я думаю, что весь код lxml находится в подпакетах. Попробуйте

from lxml import etree
...