lỗi pydot và graphviz: Không thể nhập dot_parser, không thể tải các tệp dot


107

Khi tôi chạy một mã rất đơn giản với 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')

Nó in cho tôi thông báo lỗi:

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

Tôi đang sử dụng python 2.7.3


6
pip install pydot2nên khắc phục sự cố này. pip uninstallĐẹp hơn nhiều so với việc sử dụng bởi vì nếu bạn chia sẻ mã, bạn chỉ có thể thêm pydot2 vào tệp tệp tin request.txt của mình và không để người dùng chạy các lệnh lạ.
RussellStewart

Câu trả lời:


220

Câu trả lời cho pydot >= 1.1 :

Sự không tương thích của (ngược dòng) pydotđã được 6dff94b3f1 khắc phục và do đó pydot >= 1.1sẽ tương thích vớipyparsing >= 1.5.7 .


Câu trả lời áp dụng cho pydot <= 1.0.28 :

Đối với bất kỳ ai khác gặp phải điều này, đó là do những thay đổi trong pyparsing từ 1.x sang 2.x phát hành. Để cài đặt pydot bằng pip, trước tiên hãy cài đặt phiên bản pyparsing cũ hơn:

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

Nếu bạn không cài đặt pyparsingbằng cách sử dụng pipmà thay vào đó đã sử dụng setup.py, thì hãy xem giải pháp gỡ cài đặt gói này. Cảm ơn @qtips.


1
Tôi đã cài đặt NetworkX, GraphViz và pydot, nhưng không thể làm cho chức năng Graphviz hoạt động với NetworkX (ví dụ: ví dụ NetworkX này không thành công). Tôi tiếp tục nhận được: tên toàn cầu 'dot_parser' không được xác định . Giải pháp của bạn đã giải quyết vấn đề này.
qtips

1
cũng sudo pip uninstallkhông hoạt động nếu bạn đã cài đặt gói của mình bằng cách sử dụng python setup.py installtrong trường hợp đó, hãy làm theo giải pháp này . Đây ít nhất là trường hợp trên máy Mac OSX Mountain Lion của tôi
qtips

sudorõ ràng là không phải lúc nào cũng cần thiết, như nếu bạn đang sử dụng virtualenv. Ngoài ra, điều này làm việc cho tôi!
David Reynolds

Trong Ubuntu 12.04, tôi gặp lỗi này khi cài đặt byparsing: "Đã yêu cầu pyparsing == 1.5.7, nhưng đang cài đặt phiên bản 2.0.1". Sau đó, lỗi ở trên vẫn xảy ra Vì vậy, giải pháp là chỉ định vị trí tải xuống của python egg: sudo pip install -Iv pypi.python.org/packages/source/p/pyparsing/…
lefterav

45
Tại sao không chỉ pip install pyparsing==1.5.7?
Suor

57

Có một gói mới trong pip repo được gọi là pydot2 hoạt động chính xác với pyparsing2. Tôi không thể hạ cấp các gói của mình vì matplotlib phụ thuộc vào gói pyparsing mới hơn.

Lưu ý: python2.7 từ macports


7
IMHO Câu trả lời này nên được xem xét dựa trên Ý tưởng hạ cấp pyparsing. Hoạt động hoàn hảo đối với tôi với networkx. Cảm ơn !
Raghav RV

Vẫn cho lỗi này nhưng lỗi dot_parser đã biến mất. Bạn phải cài đặt pydot pydotprintđể hoạt động.
Inanc Gumus

21

pydot đã sử dụng một biến mô-đun riêng (_noncomma) từ pyparsing. Khác biệt bên dưới sửa nó để sử dụng cho 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
Chỉ để hoàn thiện, đây là báo cáo sự cố cho pydot báo cáo sự cố này và bản sửa lỗi được đề cập bởi @Gabi Davar.
Jack Kelly

7

Tôi đã tách kho lưu trữ pydot [1], áp dụng bản vá Gabi Davar và một số thay đổi để hỗ trợ python-3. Gói này có sẵn trong PyPI [2].

Chúc mừng


1
Trang PyPI dường như ngừng hoạt động. Thật quá tệ! Bất kỳ ý tưởng tại sao?
Dav Clark

gói pip dường như bị hỏng. pip install...không thành công ở giữa mà không có lỗi rõ ràng. Có vẻ như tệp kê khai và tệp thực tế không khớp. Tôi kiểm tra git repo, và mv README.rst READMEsau đó python setup.py install. Điều này đã làm việc cho tôi :-)
Kenji Noguchi

2
liên kết, pypi.python.org/pypi/pydot2 , bị hỏng nhưng pip install pydot2hoạt động và liên kết này, pypi.python.org/pypi/pydot2/1.0.32 , hoạt động.
Mark Mikofski


5

Giải pháp không phải là cài đặt pydot từ đâu đó, mà là "python-pydot" từ kho lưu trữ ubuntu chính thức.


Kể từ ngày 25 tháng 8 năm 2013 pip install python-pydotkhông hoạt động cho tôi (không tìm thấy bản phân phối); pip install pydotlàm. Vì vậy, tôi không nghĩ rằng nó pydotnhất thiết phải là không chính thức. Có lẽ bạn đã cài đặt thông qua bản phân phối hệ điều hành?
Owen S.

5
Không phải với pip, sudo apt-get install python-pydotđã làm điều đó cho tôi.
Sadik

Điều đó có thể sẽ hiệu quả vì Ubuntu hiện có python-pyparsing1.5.2, điều này tránh được sự không tương thích của phiên bản được liệt kê ở trên. Tôi đã khắc phục sự cố ở trên và không gặp sự cố nào kể từ đó. Cảm ơn!
Owen S.

1
Thật không may trong Ubuntu kể từ Saucy pyparsing đã được nâng cấp nhưng pydot vẫn chưa được vá một cách thích hợp.
Tully

1
Tôi đã yêu cầu sửa gói Ubuntu: bug.launchpad.net/ubuntu/+source/pydot/+bug/1321135
Tully

3

Hiện đã có thêm ít nhất 2 phiên bản hỗ trợ PyParsing-2 và Python-3:

  • PyDotPlus của Carlos Jenkins với một công cụ xây dựng travis đẹp mắt và tài liệu lạ mắt . Tuy nhiên, bạn sẽ cần phải thay đổi tên thư mục của nó từ site-packages\pydotplusthành site-packages\pydotđể nó hoạt động với các chương trình hiện có nhập pydot.
  • pydot3k bởi bmcorser . Đáng buồn thay, không hoạt động!
  • prologic / pydot của James Mills được liên kết đến từ trang mã pydot chính thức của Google là ...

    một nhánh để tương thích với Python 3

  • và đây là một liên kết hoạt động đến pydot2 của David Villa, hoạt động tốt: https://pypi.python.org/pypi/pydot2/1.0.32


3

Tôi lại gặp sự cố và giải pháp trên của tôi không hoạt động. Nếu điều đó đúng với bạn và bạn cũng đang sử dụng Anaconda trên máy Mac với El Capitan, hãy thử cách này:

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

3

Những gì tôi đã làm cuối cùng sau rất nhiều lần thử từ những gì tôi đã thấy ở đây (chuỗi giả để nó hoạt động cho 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

Điều này làm việc cho tôi (Mac OS X 10.9 với Python 2.7.10 trên Anaconda):

conda uninstall pydot

Sau đó,

conda install pydot

Pyparsing sau đó bị hạ cấp (từ 2.x xuống 1.5.7) khi cài đặt pydot. Nhân viên Google tương lai: điều này cho phép tôi cài đặt và nhập Theano một cách chính xác.


1

Trên OSX Mavericks, phần sau đã thực hiện thủ thuật ... Tôi gặp lỗi tương tự nhưng ở phía dưới cũng có khiếu nại rằng tệp thực thi graphviz không hiển thị ... Tôi nghĩ vấn đề là tôi đã cài đặt graphviz trước các mô-đun khác?

brew uninstall graphviz
brew install graphviz

1

Khi các giải pháp khác không hoạt động, đây là một phương pháp nhanh chóng và bẩn thỉu để giải quyết vấn đề:

Ví dụ này là từ python 2.7 trên Ubuntu 16.04.

Chỉnh sửa tệp python2.7 / site-package / keras / utils / visual_util.py và nhận xét đoạn mã bên dưới.

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

find_graphviz () là dư thừa trên các phiên bản mới hơn của pydot và lệnh gọi trên không hoạt động.


1

Tôi cũng đã gặp sự cố và pydot của tôi == 1.0.28 trong khi pyparsing == 2.2.0. Tôi đã khắc phục sự cố bằng cách tải xuống pydot 1.2.3 (tar.gz) mới nhất từ ​​google và sau đó cài đặt nó ngoại tuyến. Khi tôi cập nhật pydot trong ubuntu 14.04, nó cho biết pydot 1.0.28 là phiên bản mới nhất. Do đó tôi tải xuống từ google phiên bản 1.2.3.


0

Bạn cần hạ cấp pyparsing từ phiên bản 2.x xuống phiên bản 1.5.7 để pydot hoạt động chính xác.

Đối với win-64, sử dụng Conda, điều này phù hợp với tôi:

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

Sau đó, tôi đã tắt / gỡ cài đặt phiên bản 2.x và tải lại pyparsing trong tập lệnh của mình:

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

Để kiểm tra xem bạn có phiên bản phù hợp đang chạy hay không:

print pyparsing.__version__
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.