pydotおよびgraphvizエラー:dot_parserをインポートできませんでした。ドットファイルをロードできません


107

pydotで非常に単純なコードを実行すると

import pydot
graph = pydot.Dot(graph_type='graph')

for i in range(3):

  edge = pydot.Edge("king", "lord%d" % i)
  graph.add_edge(edge)

vassal_num = 0
for i in range(3):
  for j in range(2):
    edge = pydot.Edge("lord%d" % i, "vassal%d" % vassal_num)
    graph.add_edge(edge)
    vassal_num += 1

graph.write_png('example1_graph.png')

それは私にエラーメッセージを出力します:

Couldn't import dot_parser, loading of dot files will not be possible.

私はpython 2.7.3を使用しています


6
pip install pydot2この問題を修正する必要があります。pip uninstallコードを共有する場合は、pydot2をrequirements.txtに追加するだけで、ユーザーが慣れないコマンドを実行することがないため、使用するよりもはるかに優れています。
RussellStewart 2015

回答:


220

の回答pydot >= 1.1

(上流)の非互換性pydotにより固定されている6dff94b3f1ので、pydot >= 1.1あろうと互換pyparsing >= 1.5.7


該当する回答pydot <= 1.0.28

これに遭遇した他の誰にとっても、それは1.xから2.xリリースへのpyparsingの変更によるものです。pipを使用してpydotをインストールするには、最初に古いバージョンのpyparsingをインストールします。

pip install pyparsing==1.5.7
pip install pydot==1.0.28

pyparsingを使用してインストールせずpip、代わりにを使用setup.pyした場合は、このソリューションを確認してパッケージをアンインストールしてください。@qtipsに感謝します。


1
NetworkX、GraphViz、およびpydotをインストールしましたが、Graphviz機能をNetworkXで動作させることができませんでした(たとえば、この NetworkXの例は失敗しました)。取得し続けました:グローバル名 'dot_parser'が定義されていません。あなたの解決策はこの問題を解決しました。
qtips 2013

1
また、その場合にsudo pip uninstall使用python setup.py installしてパッケージをインストールしている場合は機能しません。この解決策に従ってください。これは、少なくとも私のMountain Lion OSX Macの場合
でした

sudovirtualenvを使用している場合のように、必ずしも常に必要なわけではありません。それ以外は、これでうまくいきました!
デビッドレイノルズ

Ubuntu 12.04では、byparsingをインストールするときに、「要求されたpyparsing == 1.5.7ですが、バージョン2.0.1をインストールしています」というエラーが発生します。そして、上記のように、エラーを解決はPythonの卵のダウンロード場所を指定することでした、まだ発生します。sudoピップ-Ivインストールpypi.python.org/packages/source/p/pyparsing/...
lefterav

45
なぜpip install pyparsing==1.5.7ですか?
Suor

57

pyparsing2で正しく機能するpydot2と呼ばれる新しいパッケージがpipリポジトリにあります。matplotlibは新しいpyparsingパッケージに依存しているため、パッケージをダウングレードできませんでした。

注:macportsのpython2.7


7
IMHOこの答えは、pyparsingダウングレードのアイデアを検討する必要があります。networkxでも完璧に機能します。よろしくお願いします!
Raghav RV 14

このエラーは引き続き発生しますが、dot_parserエラーは発生しません。動作さpydotprintせるにはpydotをインストールする必要があります。
Inanc Gumus 2014

21

pydotは、pyparsingのプライベートモジュール変数(_noncomma)を使用しました。以下のdiffは、pyparsing 2.0.1に使用するように修正します。

diff --git a/dot_parser.py b/dot_parser.py
index dedd61a..138d152 100644
--- a/dot_parser.py
+++ b/dot_parser.py
@@ -25,8 +25,9 @@ from pyparsing import __version__ as pyparsing_version
 from pyparsing import ( nestedExpr, Literal, CaselessLiteral, Word, Upcase, OneOrMore, ZeroOrMore,
     Forward, NotAny, delimitedList, oneOf, Group, Optional, Combine, alphas, nums,
     restOfLine, cStyleComment, nums, alphanums, printables, empty, quotedString,
-    ParseException, ParseResults, CharsNotIn, _noncomma, dblQuotedString, QuotedString, ParserElement )
+    ParseException, ParseResults, CharsNotIn, dblQuotedString, QuotedString, ParserElement )

+_noncomma = "".join( [ c for c in printables if c != "," ] )

 class P_AttrList:

2
完全を期すために、この問題と@Gabi Davarによって言及された修正を報告するpydot の問題レポートを次に示します。
ジャックケリー

7

私はpydotリポジトリをフォークして[1]、Gabi Davarパッチとpython-3をサポートするためのいくつかの変更を適用しました。このパッケージはPyPI [2]で入手できます。

乾杯


1
PyPIページがダウンしているようです。ひどい!何かアイデアはありますか?
Dav Clark

pipパッケージが壊れているようです。pip install...明示的なエラーなしで途中で失敗しました。マニフェストと実際のファイルが一致していないようです。私はGitのレポをチェックアウトし、mv README.rst READMEその後python setup.py install。これは私のために働きました:-)
野口健二

2
リンクpypi.python.org/pypi/pydot2は壊れていますがpip install pydot2機能し、このリンクpypi.python.org/pypi/pydot2/1.0.32は機能します。
Mark Mikofski、2015


5

解決策は、pydotをどこかからインストールするのではなく、公式のUbuntuリポジトリから「python-pydot」をインストールすることでした。


2013年8月25日現在、pip install python-pydot私には機能しません(配布が見つかりません)。pip install pydotします。だから、それpydotが必ずしも非公式であるとは思いません。おそらく、代わりにOSディストリビューションを介してインストールしていましたか?
オーウェンS.

5
ピップでsudo apt-get install python-pydotはなく、私のためにそれをしました。
サディク2013

Ubuntuの現在python-pyparsingのバージョンは1.5.2であり、上記のバージョンの非互換性を回避できるため、おそらくこれでうまくいくでしょう。私は上記の修正を行い、それ以来問題はありませんでした。ありがとう!
オーウェンS.

1
残念ながら、Saucyの時点でUbuntuではpyparsingがアップグレードされていますが、pydotは適切にパッチされていません。
タリー

1
Ubuntuパッケージを修正するためのチケットを提出しました:bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

現在、PyParsing-2とPython-3をサポートしているように見える少なくとも2つのバージョンがあります。


3

再び問題が発生し、上記の解決策が機能しませんでした。それがあなたに当てはまり、El Capitanを搭載したMacでAnacondaも使用している場合は、これを試してください:

conda install --channel https://conda.anaconda.org/RMG graphviz`
conda install --channel https://conda.anaconda.org/RMG pydot

3

私がここで見たものからの多くの試行の後に私が最後に何をしたか(それがnetworkxで機能するための疑似シーケンス):

apt-get remove python-pydot
pip install pydotplus
apt-get install libcgraph6
apt-get install python-pygraphviz


# pip freeze | grep pydot
 pydotplus==2.0.2
# pip freeze | grep pyparsing
pyparsing==2.2.0
# pip freeze | grep graphviz
pygraphviz==1.2
# python -c 'import pydotplus'
#

2

これは私のために働きました(Anaconda上のPython 2.7.10を搭載したMac OS X 10.9):

conda uninstall pydot

そして、

conda install pydot

Pyparsingは、pydotのインストール時に(2.xから1.5.7に)ダウングレードされます。今後のGoogle社員:これにより、Theanoを正しくインストールしてインポートすることができました。


1

OSX Mavericksで次のトリックを実行しました...同じエラーが発生しましたが、下部にgraphviz実行可能ファイルが存在しないという不満もありました...問題は他のモジュールの前にgraphvizをインストールしたためだと思いますか?

brew uninstall graphviz
brew install graphviz

1

他の解決策が機能しない場合、これは問題を解決するための迅速で汚れた方法です。

この例は、Ubuntu 16.04のpython 2.7からのものです。

python2.7 / site-packages / keras / utils / visualize_util.pyファイルを編集し、以下のコードセグメントにコメントを付けます。

if not pydot.find_graphviz():
    raise ImportError('Failed to import pydot. You must install pydot'
                      ' and graphviz for `pydotprint` to work.')

find_graphviz()はpydotの新しいバージョンでは冗長であり、上記の呼び出しは機能しません。


1

pyparsing == 2.2.0の間に問題とpydot == 1.0.28にも遭遇しました。Googleから最新のpydot 1.2.3(tar.gz)をダウンロードしてオフラインでインストールすることで問題を修正しました。ubuntu 14.04でpydotを更新したとき、pydot 1.0.28が最新バージョンだと言っていました。したがって、Googleから1.2.3バージョンをダウンロードします。


0

pydotを正しく動作させるには、pyparsingをバージョン2.xからバージョン1.5.7にダウングレードする必要があります。

Win-64の場合、Condaを使用すると、これは私にとってうまくいきました:

conda install -c https://conda.anaconda.org/Trentonoliphant pyparsing=1.5.7

次に、2.xバージョンを無効化/アンインストールし、スクリプトでpyparsingをリロードしました。

pyparsing = reload(pyparsing)
pydot = reload(pydot)

正しいバージョンが実行されているかどうかを確認するには:

print pyparsing.__version__
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.