Как переустановить lxml? - программирование
Подтвердить что ты не робот

Как переустановить lxml?

Я использую python 2,7.5 на mac 10.7.5, beautifulsoup 4.2.1. Я собираюсь проанализировать XML-страницу, используя библиотеку lxml, как описано в учебнике beautifulsoup. Однако, когда я запускаю свой код, он показывает

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested:
lxml,xml. Do you need to install a parser library?

Я уверен, что я уже установил lxml всеми способами: easy_install, pip, port и т.д. Я попытался добавить строку в свой код, чтобы увидеть, установлен ли lxml или нет:

import lxml

Затем python может просто успешно пройти этот код и снова отобразить предыдущее сообщение об ошибке, происходящее в той же строке.

Итак, я уверен, что lxml был установлен, но не установлен правильно. Поэтому я решил удалить lxml, а затем переустановить с помощью "правильного" метода. Но когда я печатаю

easy_install -m  lxml

он показывает:

Searching for lxml
Best match: lxml 3.2.1
Processing lxml-3.2.1-py2.7-macosx-10.6-intel.egg

Using /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-
3.2.1-py2.7-macosx-10.6-intel.egg

Because this distribution was installed --multi-version, before you can
import modules from this package in an application, you will need to
'import pkg_resources' and then use a 'require()' call similar to one of
these examples, in order to select the desired version:

pkg_resources.require("lxml")  # latest installed version
pkg_resources.require("lxml==3.2.1")  # this exact version
pkg_resources.require("lxml>=3.2.1")  # this version or higher

Processing dependencies for lxml
Finished processing dependencies for lxml

Итак, я не знаю, как продолжить деинсталляцию...

Я просмотрел много сообщений об этой проблеме в Google, но до сих пор не могу найти никакой полезной информации.

Вот мой код:

import mechanize
from bs4 import BeautifulSoup
import lxml

class count:
    def __init__(self,protein):
        self.proteinCode = protein
        self.br = mechanize.Browser()

    def first_search(self):
        #Test 0
        soup = BeautifulSoup(self.br.open("http://www.ncbi.nlm.nih.gov/protein/21225921?report=genbank&log$=prottop&blast_rank=1&RID=YGJHMSET015"), ['lxml','xml'])
        return

if __name__=='__main__':
    proteinCode = sys.argv[1]
    gogogo = count(proteinCode)

Я хочу знать:

  • Как удалить lxml?
  • Как установить lxml "правильно"? Как узнать, что он правильно установлен?
4b9b3361

Ответ 1

Я использую BeautifulSoup 4.3.2 и OS X 10.6.8. У меня также есть проблема с неправильно установленным lxml. Вот некоторые вещи, которые я узнал:

Прежде всего, проверьте этот связанный вопрос: Удаленные MacPorts, теперь Python сломан

Теперь, чтобы проверить, какие сборки для BeautifulSoup 4 установлены, попробуйте

>>> import bs4
>>> bs4.builder.builder_registry.builders

Если вы не видите свой любимый строитель, он не установлен, и вы увидите ошибку, как указано выше ( "Не удалось найти конструктор дерева..." ).

Кроме того, только потому, что вы можете import lxml, не означает, что все идеально.

Try

>>> import lxml
>>> import lxml.etree

Чтобы понять, что происходит, перейдите к установке bs4 и откройте яйцо (tar -xvzf). Обратите внимание на модули bs4.builder. В нем вы увидите файлы, такие как _lxml.py и _html5lib.py. Таким образом, вы также можете попробовать

>>> import bs4.builder.htmlparser
>>> import bs4.builder._lxml
>>> import bs4.builder._html5lib

Если есть проблема, вы увидите, почему модуль для учащихся не может быть загружен. Вы можете заметить, как в конце builder/__init__.py он загружает все эти модули и игнорирует все, что не было загружено:

# Builders are registered in reverse order of priority, so that custom
# builder registrations will take precedence. In general, we want lxml
# to take precedence over html5lib, because it faster. And we only
# want to use HTMLParser as a last result.
from . import _htmlparser
register_treebuilders_from(_htmlparser)
try:
    from . import _html5lib
    register_treebuilders_from(_html5lib)
except ImportError:
    # They don't have html5lib installed.
    pass
try:
    from . import _lxml
    register_treebuilders_from(_lxml)
except ImportError:
    # They don't have lxml installed.
    pass

Ответ 2

Если вы используете Python2.7 в Ubuntu/Debian, это сработало для меня:

$ sudo apt-get build-dep python-lxml
$ sudo pip install lxml 

Протестируйте его так:

[email protected]:~/computer_vision/image_retrieval$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml

Ответ 3

FWIW, я столкнулся с аналогичной проблемой (python 3.6, os x 10.12.6) и смог решить ее просто, выполнив (первая команда просто означает, что я работал в виртуальной виртуальной сети):

$ source activate ml-general
$ pip uninstall lxml
$ pip install lxml

Сначала я попробовал более сложные вещи, потому что BeautifulSoup корректно работал с идентичной командой через Jupyter + iPython, но не через терминал PyCharm в том же виртуальном пространстве. Просто переустановка lxml, как описано выше, решила проблему.

Ответ 4

apt-get на Debian/Ubuntu: sudo apt-get install python3-lxml Для MacOS-X доступен macport lxml. Попробуйте что-нибудь вроде sudo port install py27-lxml

http://lxml.de/installation.html может быть полезно.