Description of problem: graphviz was not installed Version-Release number of selected component: pylint-1.1.0-1.fc20 Additional info: reporter: libreport-2.2.2 cmdline: /usr/bin/python /usr/bin/pyreverse --ignore tests -o png -p MetaOpt metaopt executable: /usr/bin/pyreverse kernel: 3.13.10-200.fc20.x86_64 runlevel: N 5 type: Python uid: 1000 Truncated backtrace: subprocess.py:1308:_execute_child:OSError: [Errno 2] No such file or directory Traceback (most recent call last): File "/usr/bin/pyreverse", line 9, in <module> load_entry_point('pylint==1.2.0', 'console_scripts', 'pyreverse')() File "/usr/lib/python2.7/site-packages/pylint/__init__.py", line 39, in run_pyreverse Run(sys.argv[1:]) File "/usr/lib/python2.7/site-packages/pylint/pyreverse/main.py", line 98, in __init__ sys.exit(self.run(args)) File "/usr/lib/python2.7/site-packages/pylint/pyreverse/main.py", line 119, in run writer.DotWriter(self.config).write(diadefs) File "/usr/lib/python2.7/site-packages/pylint/pyreverse/writer.py", line 43, in write self.close_graph() File "/usr/lib/python2.7/site-packages/pylint/pyreverse/writer.py", line 135, in close_graph self.printer.generate(self.file_name) File "/usr/lib/python2.7/site-packages/logilab/common/graph.py", line 123, in generate shell=use_shell) File "/usr/lib64/python2.7/subprocess.py", line 524, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__ errread, errwrite) File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory Local variables in innermost frame: errread: None c2pread: None gc_was_enabled: True errwrite: None shell: False errpipe_write: 4 executable: 'dot' close_fds: False self: <subprocess.Popen object at 0x72d10d0> env: None cwd: None child_exception: OSError(2, 'No such file or directory') args: ['dot', '-T', 'png', '/tmp/packages_MetaOptvMDfzT.dot', '-o', 'packages_MetaOpt.png'] c2pwrite: None data: 'cexceptions\nOSError\np0\n(I2\nS\'No such file or directory\'\np1\ntp2\nRp3\n(dp4\nS\'child_traceback\'\np5\nS\'Traceback (most recent call last):\\n File "/usr/lib64/python2.7/subprocess.py", line 1263, in _execute_child\\n os.execvp(executable, args)\\n File "/usr/lib64/python2.7/os.py", line 344, in execvp\\n _execvpe(file, args)\\n File "/usr/lib64/python2.7/os.py", line 380, in _execvpe\\n func(fullname, *argrest)\\nOSError: [Errno 2] No such file or directory\\n\'\np6\nsb.' creationflags: 0 errpipe_read: 3 preexec_fn: None p2cread: None startupinfo: None p2cwrite: None universal_newlines: False
Created attachment 892193 [details] File: backtrace
Created attachment 892194 [details] File: dso_list
Created attachment 892195 [details] File: environ
You need to have graphviz installed in order to use pyreverse. I don't really want to add this as a Requires on pylint since it will drag in a pile of dependencies that other users of pylint likely don't want.
I see that adding graphviz to pylint's requirements will add unwanted installations for users that do not ever start pyreverse. On the other hand, not having graphviz as a requirements of pylint causes unwanted errors for those users who do try to use pyreverse. I think, having possibly unused requirements is far less painful than installing programs via the package manager and not having all dependencies installed. I do not know the rationale for bundling pylint, pyreverse, symilar, epylint and pylint-gui. I could but imagine them being a set of tools for working with a repository of python code. In that case it makes sense to install the entire toolbox even if not all tools will be used by every user. Isn't that in any case a decision that logilab makes, not RedHat? If RedHat was do decide these should be unbundled, I would expect to be able to install one without the other and that all dependencies for the installed parts get installed, too.
See also: https://bitbucket.org/logilab/pylint/issue/168/pyverse-crashes-if-graphviz-is-not
It is useful (eg. headless test box witout X running) to have pylint not drag in a bunch of dependencies. It might make sense to move pyreverse into pylint-gui though. Also, while inconvenient, you only have to install the dependency once.