2013-07-20 41 views
14

Tôi đang sử dụng python 2.7.5 trên máy mac 10.7.5, beautifulsoup 4.2.1. Tôi sẽ phân tích một trang xml bằng cách sử dụng thư viện lxml, như được dạy trong hướng dẫn beautifulsoup. Tuy nhiên, khi tôi chạy mã của tôi, nó cho thấyLàm cách nào để cài đặt lại lxml?

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

Tôi chắc chắn rằng tôi đã được cài đặt lxml bởi tất cả các phương pháp: easy_install, pip, cảng, vv Tôi cố gắng thêm một dòng vào mã của tôi để xem nếu lxml được cài đặt hay không:

import lxml 

Sau đó, python có thể thực hiện thành công mã này và hiển thị lại thông báo lỗi trước, xảy ra cùng một dòng.

Vì vậy, tôi khá chắc chắn rằng lxml đã được cài đặt, nhưng không được cài đặt đúng cách. Vì vậy, tôi đã quyết định gỡ cài đặt lxml và sau đó cài đặt lại bằng phương pháp 'đúng'. Nhưng khi tôi gõ vào

easy_install -m lxml 

nó cho thấy:

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 

Vì vậy, tôi không biết làm thế nào để tiếp tục gỡ bỏ cài đặt của tôi ...

Tôi nhìn lên nhiều bài viết về vấn đề này trên google nhưng tôi vẫn không thể tìm thấy bất kỳ thông tin hữu ích nào.

Đây là mã của tôi:

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) 

Tôi muốn biết:

  1. Làm thế nào tôi có thể gỡ bỏ cài đặt lxml?
  2. Làm cách nào để cài đặt lxml 'chính xác'? Làm thế nào để tôi biết rằng nó được cài đặt đúng?

Trả lời

12

Tôi đang sử dụng BeautifulSoup 4.3.2 và OS X 10.6.8. Tôi cũng gặp sự cố với cài đặt không đúng lxml. Dưới đây là một số điều mà tôi phát hiện ra:

Trước hết, kiểm tra câu hỏi có liên quan này: Removed MacPorts, now Python is broken

Bây giờ, để kiểm tra mà các nhà xây dựng cho BeautifulSoup 4 được cài đặt, hãy thử

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

Nếu bạn không thấy trình tạo yêu thích của mình, trình cài đặt chưa được cài đặt và bạn sẽ thấy lỗi như trên ("Không thể tìm thấy trình tạo hình cây ...").

Ngoài ra, chỉ vì bạn có thể import lxml, không có nghĩa là mọi thứ đều hoàn hảo.

Hãy thử

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

Để hiểu những gì đang xảy ra, đi đến việc cài đặt bs4 và mở trứng (tar -xvzf). Lưu ý các mô-đun bs4.builder. Bên trong nó, bạn sẽ thấy các tập tin như _lxml.py_html5lib.py. Vì vậy, bạn cũng có thể thử

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

Nếu có sự cố, bạn sẽ thấy, tại sao mô-đun chương trình không thể tải được.Bạn có thể nhận thấy như thế nào vào cuối builder/__init__.py nó tải tất cả những mô-đun và bỏ qua bất cứ điều gì đã không được nạp:

# 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 
+1

Đề xuất tại câu hỏi liên quan (http://stackoverflow.com/questions/14153221/removed-macports-now-python-is-broken) để gỡ cài đặt và cài đặt lại đã giải quyết được sự cố cho tôi. –

+2

Vì 'lxml' bị thiếu trên máy tính của tôi, việc thực hiện' sudo pip install lxml' đã giải quyết được vấn đề cho tôi. –

+1

Ngoài ra, bước này cũng có thể cần thiết khi cài đặt lxml: http://stackoverflow.com/questions/19548011/cannot-install-lxml-on-mac-os-x-10-9 – taylorc93

0

apt-get trên Debian/Ubuntu: sudo apt-get install python3-lxml Đối với hệ điều hành MacOS-X, một macport của lxml có sẵn . Hãy thử một cái gì đó như sudo port install py27-lxml

http://lxml.de/installation.html có thể hữu ích.

+0

Điều này không hiển thị cách thức để gỡ cài đặt đúng cách. –

3

Nếu bạn đang sử dụng Python2.7 trong Ubuntu/Debian, điều này đã làm việc cho tôi:

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

thử nghiệm nó thích:

[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 
1

FWIW, tôi chạy vào một vấn đề tương tự (python 3.6 , os x 10.12.6) và đã có thể giải quyết nó đơn giản bằng cách thực hiện (lệnh đầu tiên chỉ để biểu thị rằng tôi đang làm việc trong một conda virtualenv):

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

Trước tiên, tôi đã thử những thứ phức tạp hơn, vì BeautifulSoup đã hoạt động chính xác với một lệnh giống hệt thông qua Jupyter + iPython, nhưng không phải thông qua thiết bị đầu cuối của PyCharm trong cùng virtualenv. Đơn giản chỉ cần cài đặt lại lxml như trên đã giải quyết được vấn đề.

Các vấn đề liên quan