AppliedDataSciencePartners/DeepReinforcementLearning

Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.

jbarrigapartarrieu opened this issue ยท 36 comments

Hi everyone!
Trying to run the second block in run.ipynb (start learning process) but I get the following error. I have Python 3.5 installed. Both pydot and graphviz are installed in the proper environment. This is the error I get. Thanks in advance for your help.


FileNotFoundError Traceback (most recent call last)
~/anaconda2/envs/py35/lib/python3.5/site-packages/pydot.py in create(self, prog, format)
1877 shell=False,
-> 1878 stderr=subprocess.PIPE, stdout=subprocess.PIPE)
1879 except OSError as e:

~/anaconda2/envs/py35/lib/python3.5/subprocess.py in init(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds)
675 errread, errwrite,
--> 676 restore_signals, start_new_session)
677 except:

~/anaconda2/envs/py35/lib/python3.5/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
1288 err_msg += ': ' + repr(orig_executable)
-> 1289 raise child_exception_type(errno_num, err_msg)
1290 raise child_exception_type(err_msg)

FileNotFoundError: [Errno 2] No such file or directory: 'dot'

During handling of the above exception, another exception occurred:

Exception Traceback (most recent call last)
~/anaconda2/envs/py35/lib/python3.5/site-packages/keras/utils/vis_utils.py in _check_pydot()
26 # to check the pydot/graphviz installation.
---> 27 pydot.Dot.create(pydot.Dot())
28 except Exception:

~/anaconda2/envs/py35/lib/python3.5/site-packages/pydot.py in create(self, prog, format)
1882 '"{prog}" not found in path.'.format(
-> 1883 prog=prog))
1884 else:

Exception: "dot" not found in path.

During handling of the above exception, another exception occurred:

ImportError Traceback (most recent call last)
in ()
39 #copy the config file to the run folder
40 copyfile('./config.py', run_folder + 'config.py')
---> 41 plot_model(current_NN.model, to_file=run_folder + 'models/model.png', show_shapes = True)
42
43 print('\n')

~/anaconda2/envs/py35/lib/python3.5/site-packages/keras/utils/vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
133 'LR' creates a horizontal plot.
134 """
--> 135 dot = model_to_dot(model, show_shapes, show_layer_names, rankdir)
136 _, extension = os.path.splitext(to_file)
137 if not extension:

~/anaconda2/envs/py35/lib/python3.5/site-packages/keras/utils/vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
54 from ..models import Sequential
55
---> 56 _check_pydot()
57 dot = pydot.Dot()
58 dot.set('rankdir', rankdir)

~/anaconda2/envs/py35/lib/python3.5/site-packages/keras/utils/vis_utils.py in _check_pydot()
29 # pydot raises a generic Exception here,
30 # so no specific class can be caught.
---> 31 raise ImportError('Failed to import pydot. You must install pydot'
32 ' and graphviz for pydotprint to work.')
33

ImportError: Failed to import pydot. You must install pydot and graphviz for pydotprint to work.

jdori commented

@jbarrigapartarrieu make sure you have Graphviz installed separately on your system, not just in your project directory. You can find source and executable package installers here: https://www.graphviz.org/download/

Same issue for me. Thanks to @jdori , I use homebrew to install graphviz and the problem sovled.

brew install graphviz
or equivalent should fix this

@DataInformer thank you

I solved with this 2 steps:

  • install Graphviz after download installer (https://www.graphviz.org/)
  • insert in code this two lines:
    import os
    os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

@MirkosMartins The issue still persists for me even after doing the same as you did.

@MirkosMartins The issue still persists for me even after doing the same as you did.

Kiran-kkt, could you send me the error message?

@MirkosMartins The issue still persists for me even after doing the same as you did.

Kiran-kkt, could you send me the error message?

Error message:


FileNotFoundError

                     Traceback (most recent call last)

C:\Program Files\Anaconda3\lib\site-packages\pydot.py in create(self, prog, format, encoding)
1914 arguments=arguments,
-> 1915 working_dir=tmp_dir,
1916 )

C:\Program Files\Anaconda3\lib\site-packages\pydot.py in call_graphviz(program, arguments, working_dir, **kwargs)
135 stdout=subprocess.PIPE,
--> 136 **kwargs
137 )

C:\Program Files\Anaconda3\lib\subprocess.py in init(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds)
946 errread, errwrite,
--> 947 restore_signals, start_new_session)
948 except:

C:\Program Files\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
1223 cwd,
-> 1224 startupinfo)
1225 finally:

FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

During handling of the above exception, another exception occurred:

FileNotFoundError Traceback (most recent call last)
C:\Program Files\Anaconda3\lib\site-packages\keras\utils\vis_utils.py in _check_pydot()
25 # to check the pydot/graphviz installation.
---> 26 pydot.Dot.create(pydot.Dot())
27 except OSError:

C:\Program Files\Anaconda3\lib\site-packages\pydot.py in create(self, prog, format, encoding)
1921 prog=prog)
-> 1922 raise OSError(*args)
1923 else:

FileNotFoundError: [WinError 2] "dot" not found in path.

During handling of the above exception, another exception occurred:

OSError Traceback (most recent call last)
in ()
7 model.add(Dense(2, input_dim=1, activation='relu'))
8 model.add(Dense(1, activation='sigmoid'))
----> 9 plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)

C:\Program Files\Anaconda3\lib\site-packages\keras\utils\vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
130 'LR' creates a horizontal plot.
131 """
--> 132 dot = model_to_dot(model, show_shapes, show_layer_names, rankdir)
133 _, extension = os.path.splitext(to_file)
134 if not extension:

C:\Program Files\Anaconda3\lib\site-packages\keras\utils\vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
53 from ..models import Sequential
54
---> 55 _check_pydot()
56 dot = pydot.Dot()
57 dot.set('rankdir', rankdir)

C:\Program Files\Anaconda3\lib\site-packages\keras\utils\vis_utils.py in _check_pydot()
27 except OSError:
28 raise OSError(
---> 29 'pydot failed to call GraphViz.'
30 'Please install GraphViz (https://www.graphviz.org/) '
31 'and ensure that its executables are in the $PATH.')

OSError: pydot failed to call GraphViz.Please install GraphViz (https://www.graphviz.org/) and ensure that its executables are in the $PATH.

Sample code:

from keras.models import Sequential
from keras.layers import Dense
from keras.utils.vis_utils import plot_model
import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
model = Sequential()
model.add(Dense(2, input_dim=1, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)

User path variable:

user varaibles

If you have setup the PATH variable in Windows and still the same error shows up in any IDE like PyCharm, then restart your IDE. It fixes the error as the PATH variable does not get updated dynamically.

@Kiran-kkt You need to install Graphviz with conda, and not from the binaries.
See here for syntax: https://anaconda.org/anaconda/graphviz
It's probably better to uninstall Graphviz first, but actually I'm not sure if there would be any clash.

Reason: Pydot checks whether you have graphviz installed by calling the dot executable. On Windows it appends an extension "exe" unless you have Anaconda, in which case it appends "bat". You can check that your Graphviz installation from binaries has only "dot.exe". So since pydot tries to execute "dot.bat" you;'re getting the error.
You can see it in Pydot's sources here: https://github.com/pydot/pydot/blob/master/pydot.py#L103-L108

@onomatopeia I've installed Graphviz via conda and now I get a new error like this.

Error message:


AssertionError Traceback (most recent call last)
in
7 model.add(Dense(2, input_dim=1, activation='relu'))
8 model.add(Dense(1, activation='sigmoid'))
----> 9 plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)

C:\ProgramData\Anaconda3\envs\masterprjt_v_1.0\lib\site-packages\keras\utils\vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
130 'LR' creates a horizontal plot.
131 """
--> 132 dot = model_to_dot(model, show_shapes, show_layer_names, rankdir)
133 _, extension = os.path.splitext(to_file)
134 if not extension:

C:\ProgramData\Anaconda3\envs\masterprjt_v_1.0\lib\site-packages\keras\utils\vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
53 from ..models import Sequential
54
---> 55 _check_pydot()
56 dot = pydot.Dot()
57 dot.set('rankdir', rankdir)

C:\ProgramData\Anaconda3\envs\masterprjt_v_1.0\lib\site-packages\keras\utils\vis_utils.py in _check_pydot()
24 # Attempt to create an image of a blank graph
25 # to check the pydot/graphviz installation.
---> 26 pydot.Dot.create(pydot.Dot())
27 except OSError:
28 raise OSError(

C:\ProgramData\Anaconda3\envs\masterprjt_v_1.0\lib\site-packages\pydot.py in create(self, prog, format, encoding)
1883 out=stdout_data,
1884 err=stderr_data))
-> 1885 assert p.returncode == 0, p.returncode
1886 return stdout_data

AssertionError: 1

Line #24 #25 suggests me that its checking for graphviz installation. I've also looked up in stackoverflow and I see the same answer

I also tried this by installing python package anaconda python-graphviz but of no use.

I don't understand why this problem still exsists it's kind of wierd.

Sorry to hear that @Kiran-kkt, this solution worked on my machine :(.
Anyway, the error you're getting says that the subprocess ended with exit code = 1.

Are you also getting an error message (just before the AssertionError) - something like

message = '"{prog}" with args {arguments} returned code: {code}\n\n'
                'stdout, stderr:\n {out}\n{err}\n'

Maybe that gives more details as to what is going on?

This message is formed and displayed in the latest version of pydot, but from the line numbers in your stack trace I can see that you have some older version. Could you check what version that is? (e.g. by running pip freeze from the command line inside the virtual environment)

@onomatopeia Thanks. Installing with conda worked for me.

@onomatopeia Here is the message

"dot" with args ['-Tps', 'C:\\Users\\TUNUGU~1\\AppData\\Local\\Temp\\tmp4dwfnf5z'] returned code: 1

stdout, stderr:
 b''
b''

pydot version is 1.4.1 and graphviz version is 2.38

Ah, that is so unhelpful!
Ok, some last checks before I give up.
In the command line activate your virtual env, type where dot. This is just a sanity check, the path should be something like <path_to_anaconda>\envs\<your_virtual_env>\Library\bin\dot.bat.

Then check that this file actually exists: C:\\Users\\TUNUGU~1\\AppData\\Local\\Temp\\tmp4dwfnf5z (I copied it from your post). Run (still from the command line inside the virtual env) dot -Tps C:\\Users\\TUNUGU~1\\AppData\\Local\\Temp\\tmp4dwfnf5z
That should generate a lot of textual output, and no errors.

If any of the above fails I would advise reinstalling graphviz (with conda).

@onomatopeia Thank you very much for the help. I'll get back to you if I get it right.

It worked with the following command on windows 10:

conda install graphviz

I solved with this 2 steps on Linux

  1. conda install -c conda-forge graphviz
  2. restart jupyter notebook
    then ,it solved!

@jbarrigapartarrieu make sure you have Graphviz installed separately on your system, not just in your project directory. You can find source and executable package installers here: https://www.graphviz.org/download/

in Ubuntu, I use 'apt-get install graphviz', then , it sovled.

@jbarrigapartarrieu make sure you have Graphviz installed separately on your system, not just in your project directory. You can find source and executable package installers here: https://www.graphviz.org/download/

in Ubuntu, I use 'apt-get install graphviz', then , it sovled.

This worked for me !

I had the same issue and the install of graphviz via Anaconda solved it for me on Windows 8.1.
I used this one:
conda install -c anaconda python-graphviz

I found it at the link below.
https://anaconda.org/anaconda/python-graphviz

brew install graphviz
or equivalent should fix this

be careful, it will remove all python link

@jbarrigapartarrieu make sure you have Graphviz installed separately on your system, not just in your project directory. You can find source and executable package installers here: https://www.graphviz.org/download/

in Ubuntu, I use 'apt-get install graphviz', then , it sovled.

This worked @xjzhou

On Windows 10:

  • Run PowerShell as Adnin
  • dot -c

"dot" with args ['-Tps', 'C:\Users\RUSHI\AppData\Local\Temp\tmpc4sohz9l'] returned code: 1

stdout, stderr:
b''
b"'C:\Users\RUSHI\Anaconda' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"


AssertionError                            Traceback (most recent call last)
<ipython-input-2-39ccd97d46fc> in <module>
     39 #copy the config file to the run folder
     40 copyfile('./config.py', run_folder + 'config.py')
---> 41 plot_model(current_NN.model, to_file=run_folder + 'models/model.png', show_shapes = True)
     42 
     43 print('\n')

~\Anaconda Python\envs\tf-gpu\lib\site-packages\keras\utils\vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir, expand_nested, dpi)
    238     """
    239     dot = model_to_dot(model, show_shapes, show_layer_names, rankdir,
--> 240                        expand_nested, dpi)
    241     _, extension = os.path.splitext(to_file)
    242     if not extension:

~\Anaconda Python\envs\tf-gpu\lib\site-packages\keras\utils\vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir, expand_nested, dpi, subgraph)
     77     from ..models import Sequential
     78 
---> 79     _check_pydot()
     80     if subgraph:
     81         dot = pydot.Cluster(style='dashed', graph_name=model.name)

~\Anaconda Python\envs\tf-gpu\lib\site-packages\keras\utils\vis_utils.py in _check_pydot()
     26         # Attempt to create an image of a blank graph
     27         # to check the pydot/graphviz installation.
---> 28         pydot.Dot.create(pydot.Dot())
     29     except OSError:
     30         raise OSError(

~\Anaconda Python\envs\tf-gpu\lib\site-packages\pydot.py in create(self, prog, format, encoding)
   1943             print(message)
   1944 
-> 1945         assert process.returncode == 0, process.returncode
   1946 
   1947         return stdout_data

AssertionError: 1

I get this error. Someone please help. I've already tried doing:

  1. pip install graphviz
  2. conda install graphviz
  3. Downloading graphviz on my system and manually adding its path to environment variable in my script
  4. Adding downloaded graphviz's bin folder to the environment variable

Nothing worked for me. If someone can please help out would be really helpful. Thanks!

On Windows 10:

  • Run PowerShell as Adnin
  • dot -c

This reply helped!
Use PowerShell!

On Windows 10:

* Run PowerShell as Adnin

* `dot -c`

So much time lost but so easy to fix. Thank you so much!

For Mac, that's how it works for my case:

pydot:
pip3 install pydot

graphviz:
(note it doesn't work if just pip3 install graphviz, even it's listed under pip3 list)
This works:
brew install graphviz, as indicated by them (https://www.graphviz.org/download/) (note you might need to install brew first on you Mac, so copy and paste this line in terminal and run to install brew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)")

On Windows 10:

  • Run PowerShell as Adnin
  • dot -c

This reply helped!
Use PowerShell!

yes,this is very useful

@jbarrigapartarrieu make sure you have Graphviz installed separately on your system, not just in your project directory. You can find source and executable package installers here: https://www.graphviz.org/download/

in Ubuntu, I use 'apt-get install graphviz', then , it sovled.

This worked @xjzhou

Thank you for your share

I solved with this 2 steps on Linux

  1. conda install -c conda-forge graphviz
  2. restart jupyter notebook
    then ,it solved!

I can confirm this worked on Windows too. Thanks

  1. Install Graphviz from https://www.graphviz.org/download/
  2. Import:
    from tensorflow.python.keras.utils.vis_utils import model_to_dot
    from tensorflow.python.keras.utils.vis_utils import plot_model

I did this:
"Install Graphviz from https://www.graphviz.org/download/
Import:
from tensorflow.python.keras.utils.vis_utils import model_to_dot
from tensorflow.python.keras.utils.vis_utils import plot_model"

and I have this:
UnimplementedError: The Conv2D op currently only supports the NHWC tensor format on the CPU. The op was given the format: NCHW
[[node model_9/conv2d_117/Conv2D (defined at C:\Users\Admin\Desktop\finantial risk\DeepReinforcementLearning-master\model.py:30) ]] [Op:__inference_predict_function_10471]

Function call stack:
predict_function

NHWC tensor format
All you need to do is a permutation of the dimensions from NHWC to NCHW (or the contrary).
[(https://stackoverflow.com/questions/37689423/convert-between-nhwc-and-nchw-in-tensorflow)]