web-dev-qa-db-ja.com

lxmlを再インストールする方法?

python 2,7.5 on mac 10.7.5、beautifulsoup 4.2.1を使用しています。beautifulsoupチュートリアルで説明されているように、lxmlライブラリを使用してxmlページを解析します。ただし、私は自分のコードを実行し、それは示しています

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

Easy_install、pip、portなどのすべての方法でlxmlをすでにインストールしているはずです。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)

私は知りたいです:

  1. Lxmlをアンインストールするにはどうすればよいですか?
  2. Lxmlを「正しく」インストールするにはどうすればよいですか?正しくインストールされていることをどのようにして知ることができますか?
17
Mark23333

BeautifulSoup 4.3.2とOS X 10.6.8を使用しています。不適切にインストールされたlxmlにも問題があります。これが私が見つけたいくつかのことです:

まず、この関連する質問を確認してください: 削除されたMacPorts、今Pythonが壊れています

ここで、BeautifulSoup 4のどのビルダーがインストールされているかを確認するために、

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

お気に入りのビルダーが表示されない場合は、インストールされておらず、上記のエラーが表示されます(「ツリービルダーが見つかりませんでした...」)。

また、import lxmlを実行できるからといって、すべてが完璧であるとは限りません。

試す

>>> 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'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

Ubuntu/DebianでPython2.7を使用している場合、これは私にとってはうまくいきました:

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

次のようにテストします:

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、私は同様の問題(python 3.6、os x 10.12.6)に遭遇し、実行するだけでそれを解決することができました(最初のコマンドは、conda virtualenvで作業していることを示すためだけです):

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

BeautifulSoupはJupyter + iPythonを介して同じコマンドで正しく機能していましたが、同じvirtualenvのPyCharmのターミナルでは機能していなかったため、最初により複雑なことを試しました。上記のようにlxmlを再インストールするだけで問題は解決しました。

4
basse

debian/Ubuntuのapt-get:Sudo apt-get install python3-lxml MacOS-Xの場合、lxmlのmacportを使用できます。 Sudo port install py27-lxmlなどをお試しください

http://lxml.de/installation.html が役立つ場合があります。

0
Michael