GraphViz không hoạt động khi được nhập bên trong PydotPlus (không tìm thấy tệp thực thi của GraphViz`)


17

Tôi đã cố gắng làm cho các gói này hoạt động được một thời gian nhưng không thành công. Về cơ bản lỗi là:

GraphViz's Executables not found

EDIT : Tôi đã không đăng một thiết bị đầu cuối logvới lỗi ban đầu. Tôi đang sử dụng Ubuntuvì vậy tôi sẽ không thể tái tạo chính xác lỗi mà tôi đã mắc phải trong quá khứ (một năm trước, cách đây rất xa trong quá khứ ...). Tuy nhiên, tôi đã gặp một lỗi tương tự --- nếu không giống --- trong thiết lập hiện tại của tôi; ngay cả trong khi sử dụng một môi trường ảo với pipenv. Lỗi dường như đến từ các dòng được mô tả trong câu trả lời của @ :

Traceback (most recent call last):
  File "example.py", line 49, in <module>
    Image(graph.create_png())
  File "/home/philippe/.local/lib/python3.6/site-packages/pydotplus/graphviz.py", line 1797, in <lambda>
    lambda f=frmt, prog=self.prog: self.create(format=f, prog=prog)
  File "/home/philippe/.local/lib/python3.6/site-packages/pydotplus/graphviz.py", line 1960, in create
    'GraphViz\'s executables not found')
pydotplus.graphviz.InvocationException: GraphViz's executables not found

Tôi đã cố gắng để cài đặt GraphVizthông qua 2 cách khác nhau: thông qua pip install graphvizvà thông qua các .msigói (và cũng đã cố gắng để cài đặt pydot, pydotplusgraphviztrong nhiều đơn đặt hàng khác nhau).

Mã tôi đang cố chạy chỉ đơn giản là một trình dot-to-pngchuyển đổi cho Iris Dataset .

from sklearn.tree import DecisionTreeClassifier
import sklearn.datasets as datasets
from sklearn.externals.six import StringIO
from sklearn.tree import export_graphviz

import pandas as pd
import pydotplus

from IPython.display import Image

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns = iris.feature_names)
y = iris.target

dtree = DecisionTreeClassifier()
dtree.fit(df,y)

dot_data = StringIO()
export_graphviz(
    dtree, 
    out_file = dot_data,
    filled = True, 
    rounded = True,
    special_characters = True
)
graph_1 = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph_1.create_png())

Trong Jupyter Notebooksvà trong Atom, hệ thống dường như đang tìm kiếm GraphVizbên trong pydotplus, như nó chỉ ra ~\Anaconda3\lib\site-packages\pydotplus\graphviz.py. Không phải là cách khác?

Cuối cùng, tôi chỉ muốn chỉ ra rằng tôi đã thử thêm GraphVizđường dẫn của hệ thống vào PATHsử dụng C:\Users\Philippe\Anaconda3\Library\bin\graphviz.


2
Cảm ơn bạn rất nhiều vì đã hỏi câu hỏi này.
AturSams

Cách tốt nhất để xử lý các vấn đề cài đặt có vấn đề này có lẽ bằng cách sử dụng một số loại môi trường độc lập như pipenv, virtualenvhoặc Docker Containers, mặc dù tôi chưa kiểm tra đúng cách.
Philippe Fanaro

Câu trả lời:


15

Xem: Không tìm thấy tệp thực thi của Graphviz (Python 3.4) gói graphviz không thêm tệp thực thi vào PATH trên windows # 1666 và Sự cố với graphviz # 1357 - đó là sự cố lặp lại (đối với chương trình đó ) với cài đặt biến môi trường PATH. Cài đặt các phiên bản cụ thể hoặc theo một thứ tự cụ thể hoặc thêm PATH thủ công sẽ khắc phục sự cố.

Sẽ tốt nhất nếu Gói đặt PATH chính xác xóa nó khi bạn gỡ cài đặt Gói (vì vậy bạn không nhận được quá lâu PATH - điều thường không xảy ra). Cài đặt thủ công sẽ ngăn chặn sự cố trong tương lai và buộc nó hoạt động, nhưng bạn cần xóa thủ công văn bản bổ sung nếu bạn gỡ cài đặt Gói.

Đây là lời khuyên từ ba liên kết sau:

  1. pip install graphviz
  2. conda install graphviz

hoặc là

Bạn cần phải chạy

conda install python-graphviz

thay vì

pip install graphviz

để có được các ràng buộc này, cũng hoạt động với gói Graphviz của conda.

hoặc là

  1. Tải xuống và cài đặt graphviz-2.38.msi (sử dụng phiên bản mới nhất) từ https://graphviz.gitlab.io/_pages/Doad/Doad_windows.html

  2. Đặt biến đường dẫn

        (a) Bảng điều khiển> Hệ thống và bảo mật> Hệ thống> Cài đặt hệ thống nâng cao> Biến môi trường> Đường dẫn> Chỉnh sửa

        (b) thêm 'C: \ Chương trình tệp (x86) \ Graphviz2,38 \ bin'


Đó chính xác là những gì tôi mô tả tôi đã làm trong bài viết. Và các liên kết khác mà bạn đề cập tôi cũng đã thấy hoặc đã thử. Họ cũng đang trở nên khá già nên tôi nghĩ có lẽ ai đó đã nghĩ ra một giải pháp tốt hơn trong lúc này.
Philippe Fanaro

Tôi nghĩ rằng tôi sẽ cố gắng, có thể vào ngày mai, để gỡ cài đặt mọi thứ tôi có liên quan đến trăn và xem điều gì xảy ra, có thể một tờ sạch sẽ giúp ích, idk.
Philippe Fanaro

Tôi vẫn không thể chạy GraphViz sau khi thử nghiệm tất cả các phương pháp trên
Revolucion cho Monica

@IggyPass, câu trả lời này đã gần một vài năm tuổi. Tôi đã kiểm tra liên kết thứ 2 ở trên và BR đã bị đóng; một sửa chữa được cung cấp. Liên kết thứ ba gợi ý giải pháp thứ ba mà tôi đã trình bày, rõ ràng đó vẫn là phiên bản được biên dịch của bên thứ 3 mới nhất được cung cấp; các phiên bản mới nhất chỉ được cung cấp trong nguồn và bạn cần phải tự biên dịch chúng. Tôi đang sử dụng điện thoại di động trong khi chờ đợi để mua một máy tính mới, thật không may là tôi sẽ không thể cập nhật câu trả lời này cho đến lúc đó; phiên bản được biên dịch sẵn và hầu hết các câu trả lời này đều có chung một chủ đề, bạn cần thiết lập PATH thích hợp cho hệ thống của mình.
Cướp

5

Trong trường hợp của tôi, tôi có thể tìm thấy graphvizcác tệp thực thi thủ công anaconda3\Library\bin\graphviz, nhưng tôi vẫn sẽ gặp GraphViz's Executables not foundlỗi.

Tôi đã thử không thành công đề xuất của zhangqianyuan cũng như các đơn đặt hàng cụ thể về cài đặt và sử dụng mô-đun python-graphviz(giải pháp chính thức, được thảo luận rộng rãi ở đây ). Điều duy nhất tôi không thử là làm xáo trộn PATHhệ thống biến đổi của tôi .

Một phương thức làm việc cho tôi là chèn các dòng này vào mã của tôi (trước các hàm liên quan đến graphviz):

import os

os.environ['PATH'] = os.environ['PATH']+';'+os.environ['CONDA_PREFIX']+r"\Library\bin\graphviz"

Đây là một hack nhỏ bẩn, nhưng có một số lợi thế nhất định:

  • PATHthay đổi có hiệu lực cục bộ và cho đến khi osmô-đun được tải lại
  • Không cần thay đổi tập lệnh mô-đun
  • Không cần thay đổi toàn PATHhệ thống

Tôi đang sử dụng Python 3.7, Windows 10, Anaconda. Graphviz đã được cài đặt bằng cách sử dụng conda install python-graphviz, nhưng tôi không tin có sự khác biệt nào trong trường hợp này


2

Nếu bạn có Anaconda, bạn có thể sử dụng trình quản lý Conda.

Nhập Condavào Bảng điều khiển bắt đầu và thử cài đặt qua Conda.

Ví dụ:

pip3 install graphviz

1
(...) Tôi đã thử điều này ...
Philippe Fanaro

Nhưng thông qua người quản lý Conda?
fuwiak

Vâng, tôi đã làm, và trong một số đơn đặt hàng khác nhau.
Philippe Fanaro

2

Điều gì làm việc cho trường hợp sử dụng của tôi : Tạo sơ đồ mô hình trong Django. Nhưng nó cũng có thể được mở rộng để tạo sơ đồ cho bất kỳ ứng dụng nào khác.

Tôi đã cài đặt GraphVizđể xem biểu đồ từ .dottập tin. Có thể được cài đặt từ graphviz.org .

  1. Tạo một tệp chấm liên kết với dự án:

    python manage.py graph_models -a > dotfile.dot

    Hoặc bạn có thể tạo các .dottệp cho nhiều ứng dụng. Tham khảo: Sử dụng phần mở rộng django để trực quan hóa sơ đồ cơ sở dữ liệu trong ứng dụng django , bởi Thomas .

  2. Bây giờ bạn chỉ cần xem dotfile.dot. Vậy tôi nên xem nó như một hình ảnh ở đâu?

    • Bây giờ hãy mở tệp gvedit.exe(tôi không biết tệp tương ứng trong Linux) trong đường dẫn không giới hạn của ứng dụng.
      • Đối với cửa sổ : C:\Program Files (x86)\Graphviz2.38\bin\gvedit.exe.
  3. Bây giờ chạy gvedit.exevà mở .dottập tin được tạo ra cho đến nay.


1
  1. Tìm thấy:C:\Users\zhangqianyuan\AppData\Local\Programs\Python\Python36\Lib\site-packages\pydotplus

  2. Mở graphviz.py

  3. Tìm dòng 1925 - dòng 1972, tìm hàm:

    def create(self, prog=None, format='ps'):
  4. Trong hàm tìm:

    if prog not in self.progs:
        raise InvocationException(
            'GraphViz\'s executable "%s" not found' % prog)
    
    if not os.path.exists(self.progs[prog]) or \
            not os.path.isfile(self.progs[prog]):
        raise InvocationException(
            'GraphViz\'s executable "{}" is not'
            ' a file or doesn\'t exist'.format(self.progs[prog])
        )
  5. Giữa hai khối thêm điều này (đường dẫn thực thi của Graphviz):

      self.progs[prog] = "C:/Program Files (x86)/Graphviz2.38/bin/gvedit.exe"`
  6. Sau khi thêm kết quả là:

    if prog not in self.progs:
        raise InvocationException(
            'GraphViz\'s executable "%s" not found' % prog)
    
    self.progs[prog] = "C:/Program Files (x86)/Graphviz2.38/bin/gvedit.exe"
    
    if not os.path.exists(self.progs[prog]) or \
            not os.path.isfile(self.progs[prog]):
        raise InvocationException(
            'GraphViz\'s executable "{}" is not'
            ' a file or doesn\'t exist'.format(self.progs[prog])
        )
  7. lưu tập tin thay đổi sau đó bạn có thể chạy nó thành công.

  8. bạn nên lưu nó dưới dạng tệp bmp vì tệp png sẽ không hoạt động. hình ảnh ở đây


0

Tôi gặp vấn đề tương tự, vì vậy tôi chỉ cần cài đặt pydotplus một cách độc lập (pip3 cài đặt pydotplus) và nhập pydotplus, mọi thứ đều hoạt động tốt.


0

Tôi có cùng một vấn đề và đã làm mọi thứ được đề xuất trên này và các diễn đàn khác và không có gì giải quyết được. Các hướng dẫn sau đây sẽ giải quyết 100% vấn đề này nếu bạn đang sử dụng Windows và Python 3:

  1. Cài đặt pydotplusqua conda:conda install pydotplus

  2. Cài đặt graphvizđộc lập conda install python-graphviz(nếu bạn đã thực hiện 2 bước này, hãy chuyển thẳng sang bước 3)

  3. Giả sử bạn đã cài đặt graphviz và pydotplus, hãy tìm graphviz.pytệp trong thư mục cài đặt của bạn pydotplus , trong trường hợp của tôi, nó nằm trong đường dẫn sau:C:\Users\Acevedo\Anaconda3\Lib\site-packages\pydotplus\graphviz.py

  4. Mở graphviz.pyvà tìm khối này trong dòng 606

    # Method 3 (Windows only)
    if os.sys.platform == 'win32':
    
        # Try and work out the equivalent of "C:\Program Files" on this
        # machine (might be on drive D:, or in a different language)
        if 'PROGRAMFILES' in os.environ:
            # Note, we could also use the win32api to get this
            # information, but win32api may not be installed.
            path = os.path.join(
                os.environ['PROGRAMFILES'], 'ATT', 'GraphViz', 'bin'
            )
        else:
            # Just in case, try the default...
            path = r"C:\Program Files\att\Graphviz\bin"
    
        progs = __find_executables(path)
  5. Bình luận phần else if / và hardcode đường đi của bạn graphviz thư mục cài đặt, bên trong đó nên là thực thi ( dot.exe, circo.exe, gvedit.exe, vv). Mã mới phải trông như thế này:

    # Method 3 (Windows only)
    if os.sys.platform == 'win32':
    
        # Try and work out the equivalent of "C:\Program Files" on this
        # machine (might be on drive D:, or in a different language)
        """if 'PROGRAMFILES' in os.environ:
            # Note, we could also use the win32api to get this
            # information, but win32api may not be installed.
            path = os.path.join(
                os.environ['PROGRAMFILES'], 'ATT', 'GraphViz', 'bin'
            )
        else:
            # Just in case, try the default...
            path = r"C:\Program Files\att\Graphviz\bin"
            """
        path = r"C:\Users\Acevedo\Anaconda3\Library\bin\graphviz"
    
        progs = __find_executables(path)
  6. Lưu graphviz.pytập tin và mọi thứ sẽ hoạt động tốt :)


0

Cập nhật thông qua chạy trong dấu nhắc anaconda:

conda install python-graphviz

cho đến phiên bản 2.38 (2019.10.16-0) đã làm điều đó cho tôi.


0

Điều hướng đến thư mục anaconda

C:\ProgramData\Anaconda3\Library\bin

Tôi nhận ra Graphviz đã được cài đặt, tất cả những gì tôi làm là đi đến

Control Panel > System and Security > System > Advanced System Settings > Environment Variables > Path > Edit

và thêm

"C:\ProgramData\Anaconda3\Library\bin\graphviz"

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.