pydot / pydot-ng

Python interface to Graphviz's Dot language compatible with Python 2 nad Python 3
MIT License
23 stars 10 forks source link

[65] GraphViz's executables not found on Windows 7 64-bit #7

Open prmtl opened 9 years ago

prmtl commented 9 years ago

What steps will reproduce the problem?

  1. Install pydot on Win 7 64
  2. Try to run the graph write_png() method

What is the expected output? What do you see instead?

You'll see this: graph.write_png('example2_graph.png') File "build\bdist.win-amd64\egg\pydot.py", line 1809, in File "build\bdist.win-amd64\egg\pydot.py", line 1911, in write File "build\bdist.win-amd64\egg\pydot.py", line 1953, in create pydot.InvocationException: GraphViz's executables not found

What version of the product are you using? On what operating system?

Using graphviz 2.28 on Win 7 64-bit.

Please provide any additional information below.

It looks like graphviz uses a different registry setting for Win7 64:

hkey = win32api.RegOpenKeyEx( win32con.HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\AT&T Research Labs\Graphviz 2.28", 0, win32con.KEY_QUERY_VALUE )

From: https://code.google.com/p/pydot/issues/detail?id=65 Reported by mike.naq...@gmail.com, Jan 20, 2012

prmtl commented 9 years ago

mike.naq...@gmail.com, Jan 20, 2012 Adding to the potentialKeys works, but I'm not sure how easy this will be to maintain.

        hkey = None
        potentialKeys = [
            "SOFTWARE\\ATT\\Graphviz",
            "SOFTWARE\\AT&T Research Labs\\Graphviz",
            "SOFTWARE\\Wow6432Node\\AT&T Research Labs\\Graphviz 2.28",
        ]
prmtl commented 9 years ago

edeussil...@gmail.com, Feb 13, 2012 Hi mike.naq,

I am unfamiliar with the inner workings of Python. Where can I find this reference to potentialKeys, so I can edit it?

prmtl commented 9 years ago

Comment by labo...@gmail.com, 2012-05-07T07:38:58Z

Adding the changes in comment 2 to pydot.py solved the problem for me. On my computer the pydot.py file is in C:\Python27\Lib\site-packages\pydot-1.0.28-py2.7.egg\

prmtl commented 9 years ago

Comment by ero.carr...@gmail.com, 2012-06-24T11:08:19Z

With a bit of luck they will revert to not use the version in the registry key. I will add that key to the ones that are checked so pydot will find the binaries in this case as well. Assigned to ero.carr...@gmail.com

prmtl commented 9 years ago

Comment by kfine...@gmail.com, 2012-07-17T04:46:20Z

I have the same problem using graphviz 2.28 on Win 7 64 bit, and the above change to pydot.py did not correct it. Any other ideas about steps to take?

Thanks

prmtl commented 9 years ago

Comment by jos...@gmail.com, 2012-08-09T01:11:10Z

I have run into the same issue. GraphViz 2.28 does not seem to add any keys. I have found that Method 2 seems to find the executables just fine, but this does not solve my issue. The create definition gives this error: raise InvocationException( 'Program terminated with status: %d. stderr follows: %s' % (status, stderr_output) ) Any one have any thoughts on this?

prmtl commented 9 years ago

Comment by shiz...@gmail.com, 2012-11-07T20:11:28Z

I run on win 7 32bit, GraphViz 2.28, same problem.

prmtl commented 9 years ago

Comment by shiz...@gmail.com, 2012-11-07T22:38:17Z

In win 7 32-bit:

        hkey = None
        potentialKeys = [
            "SOFTWARE\\ATT\\Graphviz",
            "SOFTWARE\\AT&T Research Labs\\Graphviz",
            "SOFTWARE\\AT&T Research Labs\\Graphviz 2.28",
        ]
prmtl commented 9 years ago

Comment by apmat...@gmail.com, 2013-02-23T20:01:49Z

For anyone who arrives at the same problem on Windows 7 64-bit, I have come up with another possible fix. Set the GraphViz installation path in pydot.py explicitly, ala:

for potentialKey in potentialKeys:

try:
    path = "C:\Program Files (x86)\Graphviz2.30"

    # The regitry variable might exist, left by old installations
    # but with no value, in those cases we keep searching...
    if not path:
        continue

    # Now append the "bin" subdirectory:
    #
    path = os.path.join(path, "bin")
    progs = __find_executables(path)
    if progs is not None :
        #print "Used Windows registry"
        return progs

except Exception, excp:
    #raise excp
    pass
else:
    break
prmtl commented 9 years ago

Comment by christop...@gmail.com, 2013-04-10T05:19:25Z

Method proposed by # 10 also works on Windows 7 Professional 32-Bit with PyDot 1.0.28-py2.7 and GraphViz 2.30.

prmtl commented 9 years ago

Comment by abolot...@gmail.com, 2013-04-16T05:08:07Z

Same thing happening with Windows7x32 and GraphViz2.30.

There are no entries in the register at all! is there a walk-around for this, please?

prmtl commented 9 years ago

Comment by sidere...@gmail.com, 2013-08-22T17:57:02Z

I am running Windows 7 64 bit, and spent a long time trying to solve this issue.

What ultimately worked for me was to open pydot.py and search for the find_graphviz() function. I commented out the entirety of the function and then wrote:

return __find_executables("C:\Program Files (x86)\Graphviz2.32\bin")

The path indicates where all the executables are for Graphviz. I have no idea if this will work for everyone, but try locating that path and enter it as shown into the function and hopefully Graphviz can work for you too!

prmtl commented 9 years ago

Comment by boyet...@gmail.com, 2014-01-18T11:56:22Z

Here's a patch that doesn't change existing functionality, but adds a version agnostic search for the Windows GraphViz executable. Attached windows_exec_search.patch (view on Gist)

prmtl commented 9 years ago

Comment by ero.carr...@gmail.com, 2014-03-15T15:59:03Z

Thank you so much for the patch boyettel ! Looks great and will hopefully address the problem of finding the binaries in the different versions of Windows.

prmtl commented 9 years ago

Comment by flux07, 2014-04-12T12:47:37Z

I had the same problem in windows. Line 534 of pydot.py was trying to import the Graphvis excutable by name, (Graphviz 2.28) but I have a different version installed. I replaced this line with my correct location (Graphviz2.36 in my case) and it worked.

prmtl commented 9 years ago

Comment by amir.tavasoli@gmail.com, 2014-12-29T10:32:11Z

I just added this registry key to 64bit win7 and everything started working:

[HKEY_LOCAL_MACHINE\SOFTWARE\ATT\Graphviz] "InstallPath"="C:\Program Files (x86)\Graphviz2.38"

Just change it based on your Graphviz installation directory.

sakaia commented 6 years ago

In my environment, the graphviz works on Win7-64 with setting PATH. https://graphviz.gitlab.io/_pages/Download/Download_windows.html So In my impression, this problem already solved.