¿Cómo reinstalar lxml?

Estoy usando python 2,7.5 en mac 10.7.5, beautifulsoup 4.2.1. Voy a analizar una página xml utilizando la biblioteca lxml, tal como se enseña en el tutorial de beautifulsoup. Sin embargo, cuando ejecuto mi código, se muestra

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

Estoy seguro de que ya instalé lxml con todos los métodos: instalación fácil, pip, puerto, etc. Intenté agregar una línea a mi código para ver si lxml está instalado o no:

 import lxml 

Luego, Python puede pasar este código con éxito y mostrar nuevamente el mensaje de error anterior, que aparece en la misma línea.

Así que estoy bastante seguro de que lxml se instaló, pero no se instaló correctamente. Así que decidí desinstalar lxml y luego reinstalarlo usando un método ‘correcto’. Pero cuando escribo

 easy_install -m lxml 

muestra:

 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 

Así que no sé cómo continuar mi desinstalación …

Busqué muchas publicaciones sobre este problema en Google pero aún no puedo encontrar ninguna información útil.

Aquí está mi código:

 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) 

Quiero saber:

  1. ¿Cómo puedo desinstalar lxml?
  2. ¿Cómo puedo instalar lxml ‘correctamente’? ¿Cómo sé que está correctamente instalado?

Estoy usando BeautifulSoup 4.3.2 y OS X 10.6.8. También tengo un problema con lxml mal instalado. Aquí hay algunas cosas que descubrí:

En primer lugar, revise esta pregunta relacionada: Se eliminaron los MacPorts, ahora Python está roto

Ahora, para verificar qué constructores para BeautifulSoup 4 están instalados, intente

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

Si no ve su constructor favorito, entonces no está instalado, y verá un error como el de arriba (“No se pudo encontrar un generador de árboles …”).

Además, solo porque puedes import lxml , no significa que todo sea perfecto.

Tratar

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

Para entender lo que está pasando, vaya a la instalación de bs4 y abra el huevo ( tar -xvzf ). Observe los módulos bs4.builder . Dentro de él deberías ver archivos como _lxml.py y _html5lib.py . Así que también puedes probar

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

Si hay un problema, verá por qué no se puede cargar un módulo parricular. Puede observar cómo al final del builder/__init__.py carga todos esos módulos e ignora lo que no se cargó:

 # 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 

Si está utilizando Python2.7 en Ubuntu / Debian, esto funcionó para mí:

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

Pruébalo como

 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 

FWIW, me encontré con un problema similar (python 3.6, os x 10.12.6) y pude resolverlo simplemente haciendo (el primer comando es solo para indicar que estaba trabajando en un conda virtualenv):

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

Primero intenté cosas más complicadas, porque BeautifulSoup funcionaba correctamente con un comando idéntico a través de Jupyter + iPython, pero no a través del terminal de PyCharm en el mismo virtualenv. Simplemente reinstalar lxml como se resuelve anteriormente solucionó el problema.

apt-get en Debian / Ubuntu: sudo apt-get install python3-lxml Para MacOS-X, está disponible un macport de lxml. Intente algo como sudo port install py27-lxml

http://lxml.de/installation.html puede ser útil.