תרגיל graph - חיפוש מודול מתאים

תגיות:

היי,

אני יושב מהבוקר על התרגיל graph ובינתיים תקוע עדיין בחיפוש מודול שאפשר להציג באמצעותו גרף מתאים.
ניסיתי את pydot ואת graphviz, בשתיהן היו לי הרבה תקלות רק בהתקנה.
אחר כך ניסיתי את networkx אבל דוגמאות הקוד מהתיעוד מקפיצות לי כל מיני שגיאות שלא מצאתי להן פתרונות.
אשמח להכוונה :slight_smile:

אם מצליחים לעבור את ההתקנה של graphviz בשלום, הוא נהדר לתרגיל לדעתי :relaxed:
גם אני הסתבכתי קצת בהתחלה, אבל זה בהחלט אפשרי :pray:

זה פשוט לא עובד לא משנה מה אני עושה.
ניסיתי מספר התקנות. אחר כך ניסיתי לעדכן את conda, בכל פעם זה מה שאני מקבל:

להתקין/לעדכן דרך conda זה מה שעבד לי בסוף למיטב זכרוני.
הפעלת את המחשב מחדש? גם זה יכול לעזור :slight_smile:

התקנתי את החבילה באמצעות conda install -c anaconda graphviz
וגם באמצעות pip רגיל.
התקנתי את graphviz דרך האתר שלהם.

אני מריץ קוד מהדוקומנטציה וקופצת לי השגיאה:
Exception has occurred: CalledProcessError

Command ‘[‘dot’, ‘-Tpdf’, ‘-O’, ‘round-table.gv’]’ returned non-zero exit status 1. [stderr: b’Format: “pdf” not recognized. Use one of:\r\n’]

מצאתי בגוגל כל מיני דברים לא לגמרי קשורים, זה כנראה משהו בהתקנה.
אני ממש מתוסכל, אני כבר יותר מיום יושב על זה ועוד לא נגעתי בתרגיל.

לייק 1

זה נראה כאילו זה מותקן אצלך בסדר, אבל אתה מנסה לקרוא קובץ PDF ו־graphviz כעוס על זה.

האם, נניח, הקוד הבא עובד אצלך?

ni = Graph('ni')

ni.attr('node', shape='rarrow')

ni.node('1', 'Ni!')

ni.node('2', 'Ni!')

ni.node('3', 'Ni!', shape='egg')

ni.attr('node', shape='star')

ni.node('4', 'Ni!')

ni.node('5', 'Ni!')

ni.attr(rankdir='LR')

ni.edges(['12', '23', '34', '45'])

print(ni.source)  

ניסיתי להוריד את ההתקנה לווינדוז מהאתר שלהם. זה מוריד לי קובץ זיפ שבתוכו אני לא מוצא שום קובץ התקנה. איך הצלחת לבצע את ההתקנה מהאתר עצמו?

אדווה @adva.alkalay המדהימה עזרה לי כמה שעות עם התקלות ובסוף נראה שזה עבד עם הקוד הזה:

from graphviz import Digraph
g = Digraph('G', filename='hello', format='png')
g.edge('Hello', 'World')
g.view()

והדפיס את הגרף כמו שצריך. אני חושב שמה שקרה זה שהייתה לי תקלה כלשהי בconda שמנעה התקנה מלאה של החבילה. רק אחרי שמחקתי את הconda והתקנתי מחדש את conda ואת החבילה של graphviz (ואחרי עוד כמה תקלות עם PATH שאין לי שמץ מה זה) אז הדברים הסתדרו. היה מאוד מאוד מתסכל.

בנוגע לקוד ששלחת, הוספתי את השורה from graphviz.dot import Graph (אין לי שמץ מה זה graphviz.dot או Graph, זה פשוט מה ש-VS Code הציע, בינתיים רק התעסקתי עם התקלה הטכנית).
וזה הפלט:

graph ni {
        node [shape=rarrow]
        1 [label="Ni!"]
        2 [label="Ni!"]
        3 [label="Ni!" shape=egg]
        node [shape=star]
        4 [label="Ni!"]
        5 [label="Ni!"]
        rankdir=LR
        1 -- 2
        2 -- 3
        3 -- 4
        4 -- 5
}

אני מתחיל עכשיו את את התרגיל עצמו ואעדכן אם עוד יש תקלות, תודה.

2 לייקים

מהאתר שלהם פה,

Windows >> * Stable Windows install packages >> * 10/ >> * cmake/ >> * Release/ >>

ואז תבחר 32 או 64 לפי סוג המערכת שלך.
אני הורדתי 64 והיה קובץ התקנה.

מצאתי דרך שישר עבדה להתקנה דרך pycharm
קרדיט: https://stackoverflow.com/a/61189654
למי שיצטרך בעתיד רק לרשום את השורה הבאה:

conda install -c anaconda python-graphviz
לייק 1

אז התקנתי את החבילה במחשב דרך האתר וביצעתי התקנה בקומנד ליין (כאדמינסטרטור) באמצעות השורות שפורסמו כאן על ידי כמה אנשים (conda install -c anaconda python-graphviz). הקוד בדיקה שפרסמת עובד, אבל הקוד דוגמה מהדוקומנטציה מחזיר לי את אותה שגיאת pdf. האם זה אומר שאני צריך להסיר את קונדה ולהתקין מחדש את כל העסק?

@mbrodsky תנסה את הקוד הבא, ואם יש שגיאה תצלם:

from graphviz import Digraph


g = Digraph('G', filename='hello', format='png')
g.edge('Hello', 'World')
g.view()

לייק 1

אני כבר שעות מנסה לסדר את הבעיה הזו. במסגרת החיפושים שלי קראתי שצריך לבצע אקטיבציה לפלאגינים שמאפשרים עבודה עם קבצים כמו pdf ו png באמצעות הרצה הפקודה dot -c. אז ניסיתי להריץ את הפקודות שהומלצו כאדמין:

Microsoft Windows [Version 10.0.19041.450]
© 2020 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>dot -c

C:\WINDOWS\system32>dot -v
dot - graphviz version 2.38.0 (20140413.2041)
libdir = “C:\ProgramData\Anaconda3\Library\bin\graphviz”
Activated plugin library: gvplugin_dot_layout.dll
Using layout: dot:dot_layout
Activated plugin library: gvplugin_core.dll
Using render: dot:core
Using device: dot:dot:core
The plugin configuration file:
C:\ProgramData\Anaconda3\Library\bin\graphviz\config6
was successfully loaded.
render : cairo dot fig gd gdiplus map pic pov ps svg tk vml vrml xdot
layout : circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
textlayout : textlayout
device : bmp canon cmap cmapx cmapx_np dot emf emfplus eps fig gd gd2 gif gv imap imap_np ismap jpe jpeg jpg metafile pdf pic plain plain-ext png pov ps ps2 svg svgz tif tiff tk vml vmlz vrml wbmp xdot xdot1.2 xdot1.4
loadimage : (lib) bmp eps gd gd2 gif jpe jpeg jpg png ps svg

מהבדיקה שביצעתי עם dot -v נראה שהפלאגינים אכן מותקנים. בנוסף גם ביצעתי בדיקה לנתיב ב environment variables ונראה שהנתיב נכון. אחרי שביצעתי את כל הבדיקות האלה גם עשיתי ריבוט למחשב רק כדי לראות אם זה יעזור. בינתיים אני ממשיך להתקל באותן הודעות שגיאה שאומרות לי שהוא לא מזהה את סוגי הקבצים האלה.

אם אתה מבצע:

import pydot
print(pydot.find_graphviz())

מה יוצא?

גם שאני מנסה להריץ את:

dot.render('graph.gv', view=True)

מתקבל השגיאה:

graphviz.backend.CalledProcessError: Command '['dot', '-Tpdf', '-O', 'graph.gv']' returned non-zero exit status 1. [stderr: b'Format: "pdf" not recognized. Use one of:\r\n']

האם מישהו בסוף הצליח להתגבר עלזה ?

לי יוצא:

AttributeError: module 'pydot' has no attribute 'find_graphviz'

אבלל ממה שקראתי בstack הפונקציה find_graphviz לא קיימת ב pydot כבר מאז גרסא 1.2.3

תבדוק את ההתקנה על המערכת הפעלה שלך:
https://www.graphviz.org/download/
תוודא ש dot -V עובד משורת הפקודה.
הקטע הזה בקוד צריך לאשר את ההתקנה -

def check_dependencies():
    if not shutil.which('dot'):
        logging.error(
            'Command "dot" was not found, visual graph will not be available.')

דיברתי עם @aviadamar ומה שפתר את זה אצלו היה להריץ את dot -c ב־cmd עם הרשאות administrator.

2 לייקים

מה כתוב אחרי המילה stderr? (השורה האדומה האחרונה)

זה נראה כאילו יש לך שני dot במחשב (זו התוכנה ש־graphviz מתקשר איתה כדי ליצור גרפים) וזה עושה בלאגן.
אם תרצה מוזמן לשלוח הודעה פרטית וננסה לפתור את זה במהרה