web-dev-qa-db-fra.com

Comment réinstaller lxml?

J'utilise python 2,7,5 sur mac 10.7.5, beautifulsoup 4.2.1. Je vais analyser une page xml en utilisant la bibliothèque lxml, comme enseigné dans le tutoriel beautifulsoup. Cependant, lorsque Je lance mon code, ça se voit

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

Je suis sûr que j'ai déjà installé lxml par toutes les méthodes: easy_install, pip, port, etc. J'ai essayé d'ajouter une ligne à mon code pour voir si lxml est installé ou non:

import lxml

Alors python peut simplement passer avec succès ce code et afficher à nouveau le message d'erreur précédent, se produisant sur la même ligne.

Je suis donc tout à fait sûr que lxml a été installé, mais pas installé correctement. J'ai donc décidé de désinstaller lxml, puis de le réinstaller en utilisant une méthode "correcte". Mais quand je tape

easy_install -m  lxml

ça montre:

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

Je ne sais donc pas comment continuer ma désinstallation ...

J'ai recherché de nombreux messages sur ce problème sur Google, mais je ne trouve toujours pas d'informations utiles.

Voici mon code:

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)

Je veux savoir:

  1. Comment puis-je désinstaller lxml?
  2. Comment installer "correctement" lxml? Comment savoir s'il est correctement installé?
17
Mark23333

J'utilise BeautifulSoup 4.3.2 et OS X 10.6.8. J'ai également un problème avec lxml mal installé. Voici certaines choses que j'ai découvertes:

Tout d'abord, vérifiez cette question connexe: MacPorts supprimés, maintenant Python est cassé

Maintenant, afin de vérifier quels constructeurs pour BeautifulSoup 4 sont installés, essayez

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

Si vous ne voyez pas votre générateur préféré, alors il n'est pas installé et vous verrez une erreur comme ci-dessus ("Impossible de trouver un générateur d'arborescence ...").

De plus, juste parce que vous pouvez import lxml, ne veut pas dire que tout est parfait.

Essayer

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

Pour comprendre ce qui se passe, accédez au bs4 installation et ouvrez Egg (tar -xvzf). Remarquez les modules bs4.builder. À l'intérieur, vous devriez voir des fichiers tels que _lxml.py et _html5lib.py. Vous pouvez donc également essayer

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

S'il y a un problème, vous verrez pourquoi un module parriculaire ne peut pas être chargé. Vous pouvez voir comment à la fin de builder/__init__.py il charge tous ces modules et ignore tout ce qui n'a pas été chargé:

# 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's 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
13
osa

Si vous utilisez Python2.7 dans Ubuntu/Debian, cela a fonctionné pour moi:

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

Testez-le comme:

mona@Pascal:~/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
5
Mona Jalal

FWIW, j'ai rencontré un problème similaire (python 3.6, os x 10.12.6) et j'ai pu le résoudre simplement en faisant (la première commande est juste pour signifier que je travaillais dans une conda virtualenv):

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

J'ai d'abord essayé des choses plus compliquées, car BeautifulSoup fonctionnait correctement avec une commande identique via Jupyter + iPython, mais pas via le terminal de PyCharm dans le même virtualenv. Réinstaller simplement lxml comme ci-dessus a résolu le problème.

4
basse

apt-get sur Debian/Ubuntu: Sudo apt-get install python3-lxml Pour MacOS-X, un macport de lxml est disponible. Essayez quelque chose comme Sudo port install py27-lxml

http://lxml.de/installation.html peut être utile.

0
Michael