ข้อผิดพลาด pydot และ graphviz: ไม่สามารถนำเข้า dot_parser การโหลดไฟล์ dot จะไม่สามารถทำได้


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 ให้กับความต้องการของคุณ txt และไม่มีผู้ใช้เรียกใช้คำสั่งที่ไม่คุ้นเคย
RussellStewart

คำตอบ:


220

คำตอบสำหรับpydot >= 1.1:

ความเข้ากันไม่ได้ของ (ต้นน้ำ) pydotได้รับการแก้ไขโดย6dff94b3f1และpydot >= 1.1จะเข้ากันได้กับpyparsing >= 1.5.7 .


คำตอบใช้ได้กับpydot <= 1.0.28:

สำหรับใครก็ตามที่เจอปัญหานี้มันเกิดจากการเปลี่ยนแปลงในการแยกประเภทจาก 1.x เป็น 2.x ในการติดตั้ง pydot โดยใช้ pip ให้ติดตั้ง 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

1
ยังsudo pip uninstallไม่ทำงานถ้าคุณได้ติดตั้งแพคเกจของคุณโดยใช้python setup.py installในกรณีที่ทำตามนี้วิธีการแก้ปัญหา อย่างน้อยก็เป็นกรณีของ Mac Mountain Lion OSX ของฉัน
qtips

sudoเห็นได้ชัดว่าไม่จำเป็นเสมอไปเช่นถ้าคุณใช้ Virtualenv นอกเหนือจากนั้นสิ่งนี้ใช้ได้ผลกับฉัน!
David Reynolds

ใน Ubuntu 12.04 ฉันได้รับข้อผิดพลาดนี้เมื่อติดตั้ง byparsing: "Requested pyparsing == 1.5.7 แต่กำลังติดตั้งเวอร์ชัน 2.0.1" แล้วความผิดพลาดดังกล่าวเกิดขึ้นยังคงดังนั้นการแก้ปัญหาคือการระบุตำแหน่งการดาวน์โหลดของไข่งูหลาม: sudo pip ติดตั้ง -Iv pypi.python.org/packages/source/p/pyparsing/...
lefterav

45
ทำไมไม่เพียงpip install pyparsing==1.5.7?
สุอร

57

มีแพ็คเกจใหม่ใน pip repo ที่เรียกว่า pydot2 ซึ่งทำงานได้อย่างถูกต้องกับ pyparsing2 ฉันไม่สามารถดาวน์เกรดแพ็กเกจได้เนื่องจาก matplotlib ขึ้นอยู่กับแพ็กเกจ pyparsing ที่ใหม่กว่า

หมายเหตุ: python2.7 จาก macports


7
IMHO คำตอบนี้ควรได้รับการพิจารณามากกว่าแนวคิดการปรับลดรุ่น pyparsing ใช้งานได้ดีกับ networkx ด้วย ขอบคุณ!
Raghav RV

ยังคงให้ข้อผิดพลาดนี้ แต่ข้อผิดพลาด dot_parser หายไป คุณต้องติดตั้ง pydot เพื่อpydotprintให้ทำงานได้
Inanc Gumus

21

pydot ใช้ตัวแปรโมดูลส่วนตัว (_noncomma) จาก pyparsing ความแตกต่างด้านล่างแก้ไขเพื่อใช้สำหรับ 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
เพื่อความสมบูรณ์นี่คือรายงานปัญหาสำหรับ pydot ซึ่งรายงานปัญหานี้และการแก้ไขที่กล่าวถึงโดย @Gabi Davar
Jack Kelly

7

ฉันแยกที่เก็บ pydot [1] ใช้แพตช์ Gabi Davar และการเปลี่ยนแปลงบางอย่างเพื่อรองรับ python-3 แพคเกจนี้มีอยู่ใน PyPI [2]

ไชโย


1
หน้า PyPI ดูเหมือนจะหยุดทำงาน แย่จัง! ความคิดใด ๆ ทำไม?
Dav Clark

ดูเหมือนว่าแพ็คเกจ pip จะเสีย pip install...ล้มเหลวตรงกลางโดยไม่มีข้อผิดพลาดที่ชัดเจน ดูเหมือนไฟล์ Manifest กับไฟล์จริงไม่ตรงกัน ฉันชำระเงิน repo คอมไพล์และแล้วmv README.rst README python setup.py installสิ่งนี้ใช้ได้ผลสำหรับฉัน :-)
Kenji Noguchi

2
ลิงก์pypi.python.org/pypi/pydot2เสีย แต่ใช้pip install pydot2งานได้และลิงก์นี้pypi.python.org/pypi/pydot2/1.0.32 ใช้งานได้
Mark Mikofski

6

$ sudo pip uninstall pydot

$ sudo pip install pydot2

ดูลิงค์ต่อไปนี้: http://infidea.net/troubleshooting-couldnt-import-dot_parser-loading-of-dot-files-will-not-be-possible/


ฉันทำในทางกลับกันpip uninstall pydot2แล้วpip install pydotเพื่อแก้ไขข้อผิดพลาด นี่คือลิงก์สำหรับคำตอบที่ถูกต้อง: github.com/pydot/pydot/issues/166#issuecomment-356066120
FooBar167

5

วิธีแก้ปัญหาไม่ใช่การติดตั้ง pydot จากที่ไหนสักแห่ง แต่เป็น "python-pydot" จากที่เก็บ Ubuntu อย่างเป็นทางการ


ณ วันที่ 25 ส.ค. 2556 pip install python-pydotไม่ได้ผลสำหรับฉัน (ไม่พบการแจกจ่าย) pip install pydotทำ. ดังนั้นฉันไม่คิดว่ามันpydotจำเป็นต้องไม่เป็นทางการ บางทีคุณอาจติดตั้งผ่านการแจกจ่ายระบบปฏิบัติการแทน?
Owen S.

5
ไม่ใช่ด้วย pip sudo apt-get install python-pydotทำเพื่อฉัน
Sadik

นั่นอาจใช้งานได้เนื่องจากปัจจุบัน Ubuntu มีpython-pyparsing1.5.2 ซึ่งหลีกเลี่ยงความเข้ากันไม่ได้ของเวอร์ชันที่ระบุไว้ด้านบน ฉันแก้ไขปัญหาข้างต้นและไม่มีปัญหาตั้งแต่นั้นมา ขอบคุณ!
Owen S.

1
น่าเสียดายใน Ubuntu เนื่องจาก Saucy pyparsing ได้รับการอัปเกรดแล้ว แต่ pydot ไม่ได้รับการแก้ไขอย่างเหมาะสม
Tully

1
ฉันได้ยื่นตั๋วเพื่อแก้ไขแพ็คเกจ Ubuntu: bugs.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

ตอนนี้มีอีกอย่างน้อย 2 เวอร์ชันที่รองรับ PyParsing-2 และ Python-3:

  • PyDotPlusโดยCarlos Jenkinsพร้อมกับ travis buildbot ที่สวยงามและเอกสารประกอบที่สวยงาม อย่างไรก็ตามคุณจะต้องเปลี่ยนชื่อโฟลเดอร์จากsite-packages\pydotplusเป็นsite-packages\pydotเป็นเพื่อให้ทำงานกับโปรแกรมที่มีอยู่ซึ่งนำเข้า pydot
  • pydot3kโดยbmcorser เศร้าไม่ได้ผล!
  • prologic / pydotโดย James Mills ที่เชื่อมโยงจากหน้ารหัส pydot Google อย่างเป็นทางการเป็น ...

    สาขาสำหรับความเข้ากันได้ของ Python 3

  • และนี่คือลิงค์ที่ใช้งานได้กับ pydot2 ของ David Villa ซึ่งใช้งานได้ดี: https://pypi.python.org/pypi/pydot2/1.0.32


3

ฉันมีปัญหาอีกครั้งและวิธีแก้ปัญหาข้างต้นไม่ได้ผล หากเป็นเช่นนั้นสำหรับคุณและคุณกำลังใช้ Anaconda บน Mac กับ El Capitan ให้ลองทำดังนี้:

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

สิ่งนี้ใช้ได้ผลสำหรับฉัน (Mac OS X 10.9 พร้อม Python 2.7.10 บน Anaconda):

conda uninstall pydot

จากนั้น

conda install pydot

จากนั้น Pyparsing จะลดระดับลง (จาก 2.x เป็น 1.5.7) เมื่อติดตั้ง pydot Googler ในอนาคต: สิ่งนี้ทำให้ฉันสามารถติดตั้งและนำเข้า Theano ได้อย่างถูกต้อง


1

บน OSX Mavericks ทำเคล็ดลับต่อไปนี้ ... ฉันได้รับข้อผิดพลาดเดียวกัน แต่ที่ด้านล่างยังมีข้อร้องเรียนว่าไม่มีไฟล์ปฏิบัติการของ graphviz ... ฉันคิดว่าปัญหาคือฉันได้ติดตั้ง graphviz ก่อนโมดูลอื่นหรือไม่

brew uninstall graphviz
brew install graphviz

1

เมื่อวิธีแก้ปัญหาอื่นไม่ได้ผลนี่เป็นวิธีที่รวดเร็วและสกปรกในการแก้ปัญหา:

ตัวอย่างนี้มาจาก python 2.7 บน Ubuntu 16.04

แก้ไขไฟล์ 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

ฉันยังพบปัญหาและ pydot ของฉัน == 1.0.28 ในขณะที่ pyparsing == 2.2.0 ฉันแก้ไขปัญหาโดยดาวน์โหลด pydot 1.2.3 (tar.gz) ใหม่ล่าสุดจาก google แล้วติดตั้งแบบออฟไลน์ เมื่อฉันอัปเดต pydot ใน ubuntu 14.04 มันบอกว่า pydot 1.0.28 เป็นเวอร์ชันใหม่ล่าสุด ดังนั้นฉันจึงดาวน์โหลดจาก Google เวอร์ชัน 1.2.3


0

คุณต้องดาวน์เกรด pyparsing จากเวอร์ชัน 2.x เป็นเวอร์ชัน 1.5.7 เพื่อให้ pydot ทำงานได้อย่างถูกต้อง

สำหรับ 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.