pydot dan graphviz error: Tidak dapat mengimpor dot_parser, pemuatan file dot tidak dapat dilakukan

107

Ketika saya menjalankan kode yang sangat sederhana dengan 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')

Ini mencetak saya pesan kesalahan:

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

Saya menggunakan python 2.7.3

Sadik
sumber
6
pip install pydot2harus memperbaiki masalah ini. Jauh lebih bagus daripada menggunakan pip uninstallkarena jika Anda berbagi kode, Anda dapat menambahkan pydot2 ke terms.txt Anda dan tidak meminta pengguna menjalankan perintah yang tidak dikenal.
RussellStewart

Jawaban:

220

Jawaban untuk pydot >= 1.1:

Ketidakcocokan (upstream) pydottelah diperbaiki oleh 6dff94b3f1 , dan dengan demikian pydot >= 1.1akan kompatibel denganpyparsing >= 1.5.7 .


Jawaban berlaku untuk pydot <= 1.0.28:

Bagi siapa pun yang menemukan ini, itu karena perubahan pyparsing dari 1.x ke rilis 2.x. Untuk menginstal pydot menggunakan pip, instal pyparsing versi lama terlebih dahulu:

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

Jika Anda tidak menginstal pyparsingmenggunakan pip, tetapi malah digunakan setup.py, lihat solusi ini untuk menghapus paket. Terima kasih @qtips.

Jonathan
sumber
1
Saya menginstal NetworkX, GraphViz dan pydot, tetapi tidak bisa mendapatkan fungsionalitas Graphviz untuk bekerja dengan NetworkX (misalnya contoh NetworkX ini gagal). Saya terus mendapatkan: nama global 'dot_parser' tidak ditentukan . Solusi Anda memecahkan masalah ini.
qtips
1
juga, sudo pip uninstalltidak berfungsi jika Anda telah menginstal paket Anda menggunakan python setup.py installdalam kasus itu, ikuti solusi ini . Ini setidaknya terjadi pada Mountain Lion OSX Mac saya
qtips
sudojelas tidak selalu diperlukan, seperti jika Anda menggunakan virtualenv. Selain itu, ini berhasil untuk saya!
David Reynolds
Di Ubuntu 12.04 saya mendapatkan error ini, ketika menginstal byparsing: "Diminta pyparsing == 1.5.7, tetapi menginstal versi 2.0.1". Kemudian kesalahan di atas masih terjadi Jadi solusinya adalah menentukan lokasi unduhan telur python: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
lefterav
45
Kenapa tidak pip install pyparsing==1.5.7?
Suor
57

Ada paket baru di repo pip yang disebut pydot2 yang berfungsi dengan benar dengan pyparsing2. Saya tidak dapat menurunkan versi paket saya karena matplotlib bergantung pada paket pyparsing yang lebih baru.

Catatan: python2.7 dari macports

Dana the Waras
sumber
7
IMHO Jawaban ini harus dipertimbangkan atas Ide pyparsing downgrading. Bekerja untuk saya dengan sempurna dengan networkx juga. Terima kasih!
Raghav RV
Masih memberikan kesalahan ini tetapi kesalahan dot_parser hilang. Anda harus menginstal pydot agar pydotprintdapat bekerja.
Inanc Gumus
21

pydot menggunakan variabel modul privat (_noncomma) dari pyparsing. Diff di bawah ini memperbaikinya untuk digunakan untuk 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:
Gabi Davar
sumber
2
Sekadar kelengkapan, berikut laporan masalah pydot yang melaporkan masalah ini dan perbaikan yang disebutkan oleh @Gabi Davar.
Jack Kelly
7

Saya membuat fork repositori pydot [1], menerapkan patch Gabi Davar dan beberapa perubahan untuk mendukung python-3. Paket ini tersedia di PyPI [2].

Bersulang

villa david
sumber
1
Halaman PyPI tampaknya down. Itu sangat buruk! Ada ide mengapa?
Dav Clark
paket pip sepertinya rusak. pip install...gagal di tengah tanpa kesalahan eksplisit. Sepertinya manifes dan file sebenarnya tidak cocok. Saya melakukan checkout git repo, mv README.rst READMElalu python setup.py install. Ini berhasil untuk saya :-)
Kenji Noguchi
2
tautan, pypi.python.org/pypi/pydot2 , rusak tetapi pip install pydot2berfungsi dan tautan ini, pypi.python.org/pypi/pydot2/1.0.32 , berfungsi.
Mark Mikofski
5

Solusinya bukanlah menginstal pydot dari suatu tempat, tetapi "python-pydot" dari repositori resmi ubuntu.

Sadik
sumber
Per 25-Agustus-2013 pip install python-pydottidak bekerja untuk saya (distribusi tidak ditemukan); pip install pydottidak. Jadi saya rasa itu pydottidak selalu tidak resmi. Mungkin Anda menginstal melalui distribusi OS?
Owen S.
5
Bukan dengan pip, sudo apt-get install python-pydotlakukan untukku.
Sadik
Itu mungkin akan berhasil karena Ubuntu saat ini memiliki python-pyparsing1.5.2, yang menghindari ketidakcocokan versi yang tercantum di atas. Saya pergi dengan perbaikan di atas dan tidak mengalami masalah sejak itu. Terima kasih!
Owen S.
1
Sayangnya di Ubuntu pada saat penguraian Saucy telah ditingkatkan tetapi pydot belum ditambal dengan tepat.
Tully
1
Saya telah mengajukan tiket untuk memperbaiki paket Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully
3

Sekarang ada setidaknya 2 versi lagi yang tampaknya mendukung PyParsing-2 dan Python-3:

  • PyDotPlus oleh Carlos Jenkins dengan travis buildbot yang bagus dan dokumentasi yang mewah . Namun Anda perlu mengubah nama foldernya dari site-packages\pydotplusmenjadi site-packages\pydotagar dapat bekerja dengan program yang ada yang mengimpor pydot.
  • pydot3k oleh bmcorser . Sayangnya, tidak berhasil!
  • prologic / pydot oleh James Mills ditautkan dari halaman kode resmi Google pydot sebagai ...

    cabang untuk kompatibilitas Python 3

  • dan berikut ini tautan yang berfungsi ke pydot2 David Villa yang berfungsi dengan baik: https://pypi.python.org/pypi/pydot2/1.0.32

Mark Mikofski
sumber
3

Saya mengalami masalah lagi dan solusi saya di atas tidak berhasil. Jika itu benar untuk Anda dan Anda juga menggunakan Anaconda di Mac dengan El Capitan, coba ini:

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

Apa yang saya lakukan di akhir setelah begitu banyak percobaan dari apa yang saya lihat di sini (urutan semu agar berfungsi untuk 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'
#
sten
sumber
2

Ini berhasil untuk saya (Mac OS X 10.9 dengan Python 2.7.10 di Anaconda):

conda uninstall pydot

Kemudian,

conda install pydot

Pyparsing kemudian diturunkan (dari 2.x ke 1.5.7) setelah instalasi pydot. Karyawan Google Masa Depan: ini memungkinkan saya menginstal dan mengimpor Theano dengan benar.

scottlittle
sumber
1

Di OSX Mavericks, berikut ini melakukan triknya ... Saya mendapat kesalahan yang sama tetapi di bagian bawah ada juga keluhan bahwa graphviz dapat dieksekusi tidak ada ... Saya pikir masalahnya adalah saya telah menginstal graphviz sebelum modul lain?

brew uninstall graphviz
brew install graphviz
ecordo
sumber
1

Ketika solusi lain tidak berfungsi, ini adalah metode cepat dan kotor untuk menyelesaikan masalah:

Contoh ini dari python 2.7 di Ubuntu 16.04.

Edit file python2.7 / site-packages / keras / utils / visualize_util.py dan beri komentar pada segmen kode di bawah.

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

find_graphviz () redundan pada versi pydot yang lebih baru, dan panggilan di atas tidak berfungsi.

Totoro
sumber
1

Saya juga menemui masalah dan pydot saya == 1.0.28 saat pyparsing == 2.2.0. Saya memperbaiki masalah dengan mengunduh pydot 1.2.3 (tar.gz) terbaru dari google dan kemudian menginstalnya secara offline. Ketika saya memperbarui pydot di ubuntu 14.04, dikatakan bahwa pydot 1.0.28 adalah versi terbaru. Oleh karena itu saya mendownload dari google versi 1.2.3.

Cna
sumber
0

Anda perlu menurunkan pyparsing dari versi 2.x ke versi 1.5.7 agar pydot berfungsi dengan benar.

Untuk win-64, menggunakan Conda, ini berhasil untuk saya:

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

Saya kemudian menonaktifkan / mencopot pemasangan versi 2.x dan memuat ulang pyparsing di skrip saya:

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

Untuk memeriksa apakah Anda menjalankan versi yang benar:

print pyparsing.__version__
Sander van den Oord
sumber