Instalación de pygraphviz en Windows 10 de 64 bits, Python 3.6

Bien, aquí vamos … Estoy tratando de instalar pygraphviz en Windows 10. Hay muchas soluciones para este problema en línea, pero ninguna ha funcionado para mí. El problema preciso que tengo es con este portátil jupyter ->

[1] import networkx as nx import pylab as plt from networkx.drawing.nx_agraph import graphviz_layout [2]G = nx.DiGraph() G.add_node(1,level=1) G.add_node(2,level=2) G.add_node(3,level=2) G.add_node(4,level=3) G.add_edge(1,2) G.add_edge(1,3) G.add_edge(2,4) nx.draw(G, pos=graphviz_layout(G), node_size=1600, cmap=plt.cm.Blues, node_color=range(len(G)), prog='dot') plt.show() 

Recibo los siguientes errores después de [2]:

 ModuleNotFoundError Traceback (most recent call last) C:\Users\name\Anaconda3\lib\site-packages\networkx\drawing\nx_agraph.py in pygraphviz_layout(G, prog, root, args) 254 try: --> 255 import pygraphviz 256 except ImportError: ModuleNotFoundError: No module named 'pygraphviz' 

y

 ImportError Traceback (most recent call last)  in () 9 G.add_edge(2,4) 10 ---> 11 nx.draw(G, pos=graphviz_layout(G), node_size=1600, cmap=plt.cm.Blues, 12 node_color=range(len(G)), 13 prog='dot') C:\Users\name\Anaconda3\lib\site-packages\networkx\drawing\nx_agraph.py in graphviz_layout(G, prog, root, args) 226 227 """ --> 228 return pygraphviz_layout(G,prog=prog,root=root,args=args) 229 230 def pygraphviz_layout(G,prog='neato',root=None, args=''): C:\Users\name\Anaconda3\lib\site-packages\networkx\drawing\nx_agraph.py in pygraphviz_layout(G, prog, root, args) 256 except ImportError: 257 raise ImportError('requires pygraphviz ', --> 258 'http://pygraphviz.github.io/') 259 if root is not None: 260 args+="-Groot=%s"%root ImportError: ('requires pygraphviz ', 'http://pygraphviz.github.io/') 

Esto es lo que he tratado de resolver esto.

(1) Instalación normal de pip: “pip install pygraphviz” Este es el error que recibo al final. EDITAR Recibo el mismo error incluso si ejecuto cmd como administrador.

 Command "C:\Users\name\Anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\name~1\\AppData\\Local\\Temp\\pip-build- n81lykqs\\pygraphviz\\setup.py';f=getattr(tokenize, 'open', open) (__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\name~1\AppData\Local\Temp\pip- b3jz1lk5-record\install-record.txt --single-version-externally-managed -- compile" failed with error code 1 in C:\Users\name~1\AppData\Local\Temp\pip- build-n81lykqs\pygraphviz\ 

(2) Descargando e instalando graphviz-2.38.msi, y luego descargando ambas versiones de la rueda de 64 bits. Este es el resultado.

 C:\Users\name\Anaconda3>pip install pygraphviz-1.3.1-cp34-none- win_amd64.whl pygraphviz-1.3.1-cp34-none-win_amd64.whl is not a supported wheel on this platform. C:\Users\name\Anaconda3>pip install pygraphviz-1.3.1-cp27-none- win_amd64.whl pygraphviz-1.3.1-cp27-none-win_amd64.whl is not a supported wheel on this platform. 

Lo que me gustaría probar, pero no estoy seguro de cómo hacerlo correctamente:

Editar setup.py. He leído mucho sobre personas que encuentran soluciones para cambiar los caminos, pero no estoy muy seguro de cómo hacerlo. Este método parece muy complejo.

Gracias por cualquier ayuda / visión!

Las respuestas más votadas parecían ser instalar graphviz, en lugar de pygraphviz.

Si está utilizando un entorno conda, puede intentar usar este canal:

conda install graphviz pygraphviz -c alubbock

Lo probé con networkx 2.1 , funcionó bien.

Resuelto en Windows 10 de 64 bits y Python 3.6.

Pasos:

  1. Descarga Graphviz para Windows desde el sitio de graphiviz.
  2. Agregue la ruta de Graphviz bin C:\Program Files (x86)\Graphviz2.38\bin en su ruta de Windows.
  3. Cierre y vuelva a abrir sus terminales para que se reconozcan los cambios de ruta.
  4. Descarga la rueda Graphviz Python 3.6 .
  5. Instale la rueda Graphviz.

    pip install graphviz-0.8.3-py2.py3-none-any.whl

  6. ¡Hecho!

Se actualizó el repository: [GitHub]: CristiFati / Prebuilt-Binaries – (master) Prebuilt-Binaries / Windows / PyGraphviz .
Se agregó .whl s ( win_amd64 , win32 ) para Python :

  • 3.5
  • 3.6
  • 3.7

Para Python 2.7 , ya están construidos: [UCI.LFD]: Binarios no oficiales de Windows para paquetes de extensión de Python – PyGraphviz, una interfaz para el diseño de gráficos Graphviz y el paquete de visualización. .

Notas :

  • En algunos (supongo, en la mayoría de los) casos, se requerirá una instalación de Graphviz en el sistema donde se ejecuta PyGraphviz , porque PyGraphviz usa algunas de las herramientas de Graphviz (ejecutables). Se pueden descargar o crear (no tienen que coincidir con la architecture de PyGraphviz ( 32 bits , 64 bits ), ya que se invocan)
  • Además, un error (presente en versiones anteriores) fue corregido
  • Compruebe [SO]: pygraphviz 1.5 borde predeterminado sin flecha? (Respuesta de @CristiFati) para más detalles.

Cualquiera que quiera saber más detalles sobre el proceso de construcción, ¡ sigue leyendo !


1. Introducción

Casi 2 años después, y el problema (bueno, no exactamente como en la pregunta) aún persiste.

Quiero comenzar enfatizando la diferencia entre los 2 paquetes:

  • [PyPI]: py graphviz – Descargar archivos : el en cuestión
  • [PyPI]: graphviz – Descargar archivos : (uno más simple) uno con un nombre similar

En el entorno de Anaconda , [SO]: Instalando PyGraphviz en Windows 10 de 64 bits, Python 3.6 (la respuesta de @TomHanks) funciona perfectamente .

pygraphwiz solo tiene disponible para descargar un archivo comprimido ( .zip , en este caso), lo que significa que contiene fonts ( C / C ++ ).

Un par de palabras sobre paquetes ( .whl s) cuyos nombres contienen elementos como cp34-none-win_amd64 (marque [SO]: ¿Qué significa el nombre de la versión ‘cp27’ o ‘cp35’ en Python? (Respuesta de @WayWerner) para más detalles) :

  • Contienen archivos binarios ( .so o .pyd ( .dll )), que están vinculados a una biblioteca de Python específica
    • Están diseñados para funcionar solo con esa versión de Python (por lo que 34 no está diseñado para funcionar con Python 3.6 )
    • Incluso es un pip de “extravagancia” y se las arregla para instalar dicho paquete (no es tan difícil, en realidad), fallará en el momento de la importación o, peor aún, tiene una alta probabilidad de fallar Python

Ahora, muchos paquetes tienen binarios precomstackdos para las versiones más comunes de Python que se ejecutan en varios sistemas operativos (por ejemplo, [PyPI]: mysql-connector-python – Descargar archivos ), pero muchos no lo hacen, y esos solo contienen fonts. Desafortunadamente, PyGraphviz está en la categoría. Para los últimos, pip install :

  • Descargar las fonts
  • Construye las fonts localmente
    • Se requiere un comstackdor de C ( C ++ ), típicamente:
      • gcc en nix
      • VStudio on Win
    • Podrían tener otras dependencias.
  • Instale los artefactos construidos (archivos binarios y archivos .py (c) )

Como nota al margen: pip -v ... habilita el modo detallado para el comando actual, que es extremadamente útil cuando se producen errores de instalación .

De vuelta a nuestro problema: Python 3.6 necesita VStudio 2015 ( [Python.Wiki]: WindowsCompilers ).
Este es un tema muy amplio, cubrí algunas partes en:

  • [SO]: Instalación de Simstring (python) en windows (respuesta de @ CristiFati)
  • [SO]: ¿Cómo construir una versión DLL de libjpeg 9b? (@ La respuesta de CristiFati)

Debe verificarlos antes de continuar y también mantenerlos abiertos, ya que definitivamente los necesitará en los próximos pasos .

Tengo instalada la Comunidad VStudio 2015 (entre muchas otras versiones), también deberías instalarla, es gratis ( [MS.VStudio]: ¿Aún quieres una versión anterior? ).

PyGraphviz depende de [Graphviz]: Software de visualización de gráficos . Por lo tanto, en el momento de la comstackción necesitará (partes de) Graphviz (que también tiene otras dependencias propias) para estar ya construido. Desafortunadamente, no pude encontrar binarios precomstackdos (hay [Graphviz]: Paquetes de Windows – graphviz-2.38.zip , pero eso no ayuda), por lo que tendrá que construirse manualmente.

Antes de seguir adelante:

 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" -c "import pygraphviz" Traceback (most recent call last): File "", line 1, in  ModuleNotFoundError: No module named 'pygraphviz' [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> dir /b other src 

Este es mi directorio principal , todas las fonts se descargan en el directorio src , los archivos binarios se colocarán en el directorio bin .

2. Construye Graphviz

Antes de comenzar, quiero mencionar que confío mucho en Cygwin (no es necesario), y algunas de mis herramientas están instaladas allí, así que alternaré entre los terminales Cygwin y cmd (lo que podría ser confuso).

[Graphviz]: instrucciones de comstackción de Graphviz para los estados de Windows :

Para construir en Windows:

(Versiones de Graphviz ≥ 2.41)

Primero, en la raíz del repository, ejecute git submodule update –init. Esto descargará todos los submódulos, que son principalmente las dependencias para la comstackción de Windows. A continuación, agregue el directorio windows \ dependencies \ graphviz-build-utilities a su PATH (y reinicie Visual Studio o el indicador con el que ejecuta msbuild después de eso). Esta carpeta contiene las herramientas Bison, Flex y SED (y futuras adiciones) con versiones que se han probado. Si todo salió bien, las dependencias ahora están configuradas y usted puede construir Graphviz.

Primero, necesitamos descargar todo:

 [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> git clone https://gitlab.com/graphviz/graphviz.git . Cloning into '.'... remote: Enumerating objects: 71728, done. remote: Counting objects: 100% (71728/71728), done. remote: Compressing objects: 100% (19331/19331), done. remote: Total 71728 (delta 52200), reused 71681 (delta 52157) Receiving objects: 100% (71728/71728), 163.79 MiB | 480.00 KiB/s, done. Resolving deltas: 100% (52200/52200), done. Checking out files: 100% (3870/3870), done. [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> git submodule update --init Submodule 'dependencies/criterion' (https://github.com/Snaipe/Criterion.git) registered for path 'dependencies/criterion' Submodule 'windows/dependencies/graphviz-build-utilities' (https://github.com/ErwinJanssen/graphviz-build-utilities.git) registered for path 'windows/dependencies/graphviz-build-utilities' Submodule 'windows/dependencies/libraries' (https://github.com/ErwinJanssen/graphviz-windows-dependencies.git) registered for path 'windows/dependencies/libraries' Cloning into '/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz/dependencies/criterion'... Cloning into '/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz/windows/dependencies/graphviz-build-utilities'... Cloning into '/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz/windows/dependencies/libraries'... Submodule path 'dependencies/criterion': checked out '301d143ea42c024f22b673b69c72a4cb3c8d151f' Submodule path 'windows/dependencies/graphviz-build-utilities': checked out '050fff84ce195e0740878748760fd801eeb07b23' Submodule path 'windows/dependencies/libraries': checked out '141d3a21be904fa8dc2ae3ed01d36684db07a35d' [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> git show head commit 89292b5945933b1501293c04894ed9cf886241be (HEAD -> master, origin/master, origin/HEAD) Merge: 429d43615 97811bd35 Author: Stephen C North  Date: Mon Feb 4 08:09:40 2019 -0500 Merge branch 'wasbridge/graphviz-master' into HEAD [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean 

Terminarás con un directorio que contiene ~ 320 MiB de cosas. El directorio contiene un archivo graphviz.sln , que es un archivo de solución VStudio (2015) que contiene 63 proyectos.

Mirando el paquete pygraphviz (built) de Anaconda o Python 2.7 , solo depende de cgraph.dll , que a su vez depende de cdt.dll , por lo que solo los 2 proyectos son relevantes para nosotros. Tenga en cuenta que estos 2 proyectos podrían no necesitar todos los submódulos de git (por lo que el directorio podría estar recortado), pero no investigué más.

Desafortunadamente, los proyectos solo están configurados para 32 bits (plataforma Win32 ). El de 64 bits se debe agregar manualmente (lo hice desde VStudio IDE , y también describí el proceso en una de mis respuestas a las que hice referencia). Después de guardar los proyectos, se mostrarán como modificados por git :

 [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) (commit or discard the untracked or modified content in submodules) modified: lib/cdt/cdt.vcxproj modified: lib/cgraph/cgraph.vcxproj modified: windows/dependencies/graphviz-build-utilities (modified content) no changes added to commit (use "git add" and/or "git commit -a") 

El tercer elemento se debe a que necesitaba restablecer algunos permisos de seguridad en 2 archivos ejecutables (que se usan al comstackr cgraph ):

  • bison.exe
  • flex.exe

que no se configuraron correctamente (lo más probable, debido a Cygwin ).

Puede comstackr los 2 proyectos desde IDE , pero elegí la línea de comandos ( [Ms.Docs]: MSBuild referencia de línea de comandos ) ya que me parece más flexible:

 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> "c:\Install\x86\Microsoft\Visual Studio Community\2015\vc\vcvarsall.bat" x64 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> set PATH=%PATH%;%CD%\src\graphviz\windows\dependencies\graphviz-build-utilities [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> msbuild src\graphviz\lib\cdt\cdt.vcxproj /t:Rebuild /p:Platform=x64;Configuration=Release;SolutionDir=%CD%\src\graphviz\;OutDir=%CD%\bin\Win\dynamic\064\UCRTv140\md\Release\graphviz\ >build_cdt_064.txt 2>&1 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> echo %errorlevel% 0 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> dir /b bin build_cdt.txt other src [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> msbuild src\graphviz\lib\cgraph\cgraph.vcxproj /t:Rebuild /p:Platform=x64;Configuration=Release;SolutionDir=%CD%\src\graphviz\;OutDir=%CD%\bin\Win\dynamic\064\UCRTv140\md\Release\graphviz\ >build_cgraph_064.txt 2>&1 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> echo %errorlevel% 0 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> dir /b "bin\Win\dynamic\064\UCRTv140\md\Release\graphviz" cdt.dll cdt.dll.lastcodeanalysissucceeded cdt.exp cdt.lib cgraph.dll cgraph.dll.lastcodeanalysissucceeded cgraph.exp cgraph.lib 

Entonces, tenemos todo lo necesario (2 archivos .lib y 2 .dll ) para poder continuar.

3. Construir PyGraphviz

Las fonts de PyGraphviz son (descargadas de [GitHub]: pygraphviz / pygraphviz – (pygraphviz-1.5) pygraphviz-pygraphviz-1.5.zip y) desempaquetadas en src / pygraphviz / pygraphviz-pygraphviz-1.5 .

Se necesita un ajuste más para Graphviz (probablemente se realice como parte de otro proyecto, un paso de instalación ): preparar los archivos de encabezado:

 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> mkdir include\graphviz [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> copy src\graphviz\lib\cdt\cdt.h include\graphviz 1 file(s) copied. [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> copy src\graphviz\lib\cgraph\cgraph.h include\graphviz 1 file(s) copied. 

Desafortunadamente, PyGraphviz no genera OOTB , debido a [GitHub]: pygraphviz / pygraphviz – Compatibilidad con Python 3 . Para solucionarlo, [GitHub]: eendebakpt / pygraphviz – Se debe aplicar la solución para PyIOBase_Type para Python2 en win . Lo adapté para trabajar con las fonts actuales (ya que no funciona OOTB , también: X () solo para graphviz_wrap.cpp :

pygraphviz-1.5-all-pyiobase_b85d12ac22d39063f7dbcc396e825c563431e352.patch :

 --- pygraphviz/graphviz_wrap.c.orig 2018-09-10 16:07:12.000000000 +0300 +++ pygraphviz/graphviz_wrap.c 2019-02-26 18:05:20.281741400 +0200 @@ -2988,7 +2988,18 @@ #if PY_VERSION_HEX >= 0x03000000 -extern PyTypeObject PyIOBase_Type; +static PyObject *PyIOBase_TypeObj; + +static int init_file_emulator(void) +{ + PyObject *io = PyImport_ImportModule("_io"); + if (io == NULL) + return -1; + PyIOBase_TypeObj = PyObject_GetAttrString(io, "_IOBase"); + if (PyIOBase_TypeObj == NULL) + return -1; + return 0; +} #endif @@ -3449,7 +3460,7 @@ { #if PY_VERSION_HEX >= 0x03000000 || defined(PYPY_VERSION) #if !defined(PYPY_VERSION) - if (!PyObject_IsInstance(obj0, (PyObject *)&PyIOBase_Type)) { + if (!PyObject_IsInstance(obj0, PyIOBase_TypeObj)) { PyErr_SetString(PyExc_TypeError, "not a file handle"); return NULL; } @@ -3523,7 +3534,7 @@ { #if PY_VERSION_HEX >= 0x03000000 || defined(PYPY_VERSION) #if !defined(PYPY_VERSION) - if (!PyObject_IsInstance(obj1, (PyObject *)&PyIOBase_Type)) { + if (!PyObject_IsInstance(obj1, PyIOBase_TypeObj)) { PyErr_SetString(PyExc_TypeError, "not a file handle"); return NULL; } @@ -6051,6 +6062,12 @@ SWIG_InstallConstants(d,swig_const_table); +#if PY_VERSION_HEX >= 0x03000000 + if (init_file_emulator() < 0) { + return NULL; + } +#endif + PyDict_SetItemString(md,(char*)"cvar", SWIG_globals()); SWIG_addvarlink(SWIG_globals(),(char*)"Agdirected",Swig_var_Agdirected_get, Swig_var_Agdirected_set); SWIG_addvarlink(SWIG_globals(),(char*)"Agstrictdirected",Swig_var_Agstrictdirected_get, Swig_var_Agstrictdirected_set); 

Eso es un diff ( parche ). Ver [SO]: Ejecutar / depurar las pruebas de unidad de una aplicación de Django desde el menú contextual del botón derecho del ratón en PyCharm Community Edition? (Respuesta de @ CristiFati) ( Parcheando la sección de utrunner ) para saber cómo aplicar los parches en Win (básicamente, cada línea que comienza con un signo "+" entra, y cada línea que comienza con un signo "-" se apaga).

 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> set _TOP_DIR=%CD% [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> pushd src\pygraphviz\pygraphviz-pygraphviz-1.5 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811\src\pygraphviz\pygraphviz-pygraphviz-1.5]> pushd pygraphviz && "c:\Install\x64\Cygwin\Cygwin\AllVers\bin\patch.exe" -p 1 -buNi ..\pygraphviz-1.5-all-pyiobase_b85d12ac22d39063f7dbcc396e825c563431e352.patch && popd patching file graphviz_wrap.c [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811\src\pygraphviz\pygraphviz-pygraphviz-1.5]> echo %errorlevel% 0 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811\src\pygraphviz\pygraphviz-pygraphviz-1.5]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" setup.py install --include-path=%_TOP_DIR%\include --library-path=%_TOP_DIR%\bin\Win\dynamic\064\UCRTv140\md\Release\graphviz >%_TOP_DIR%\install_pygraphviz_064.txt 2>&1 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811\src\pygraphviz\pygraphviz-pygraphviz-1.5]> echo %errorlevel% 0 [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811\src\pygraphviz\pygraphviz-pygraphviz-1.5]> popd [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> set PATH=%PATH%;%CD%\bin\Win\dynamic\064\UCRTv140\md\Release\graphviz [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" -c "import pygraphviz;print(dir(pygraphviz), \"\n\", pygraphviz.graphviz._graphviz)" ['AGraph', 'Attribute', 'DotError', 'Edge', 'ItemAttribute', 'Node', '__all__', '__author__', '__builtins__', '__cached__', '__date__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__path__', '__revision__', '__spec__', '__version__', 'absolute_import', 'agraph', 'division', 'graphviz', 'print_function', 'release', 'test', 'tests', 'version']  

Como se ve, el módulo fue importado con éxito.

Como observación, las 2 .dll dependencias (de la sección anterior) deben estar disponibles cuando se importa el módulo, por lo que su dir se agrega a % PATH% .
Por supuesto, esto es solo una solución alternativa (coja) ( ganancia ), esto no debería suceder cada vez que uno tiene que trabajar con el paquete.

No sé (aún) cómo dar instrucciones a setup.py para que también las copie en el directorio de comstackción / instalación del paquete, por lo que como alternativa (también solución alternativa), hay que copiarlas manualmente en el directorio de instalación de pygraphviz (al lado de _graphviz.cp36 -win_amd64.pyd , que es (en mi caso): "e: \ Work \ Dev \ VEnvs \ py_064_03.06.08_test0 \ lib \ site-packages \ pygraphviz" ).

4. Atajo

Dado que todo el proceso es complejo y requiere muchas intervenciones manuales y trucos, he logrado crear (con modificaciones menores de setup.py ) el paquete ( rueda ).

No conozco una forma sencilla de hacerlo público, por lo que (aunque sé que es una mala práctica), lo subí a [GitHub]: CristiFati / Prebuilt-Binaries - (master) Prebuilt-Binaries / Windows / PyGraphviz / pygraphviz-1.5-cp36-cp36m-win_amd64.whl .
Puedes descargarlo, luego instalarlo como (esta es una forma):

 "C:\Path\to\Python-3.6-amd64\pip" install "C:\Path\to\downloaded\pygraphviz-1.5-cp36-cp36m-win_amd64.whl" 

Nota : ¡ También funciona para entornos Anaconda !

Esto es lo que funcionó para mí:

Gana 7 AMD64

  • Instalar el comstackdor MSFT C ++ .
  • Instale Anaconda para Win AMD64, Python3 .
  • Instale Graphviz para Win .
  • Agregue C:\Program Files (x86)\Graphviz2.38\bin a su variable de entorno PATH.
  • Descarga pygraphviz-1.3.1-cp34-none-win_amd64.whl .
  • Cree un entorno Conda con Python versión 3.4: conda create --name digraphs python=3.4 anaconda .
  • Entra en el entorno: activate digraphs .
  • Instale pygraphviz utilizando pip: pip install pygraphviz-1.3.1-cp34-none-win_amd64.whl .
  • Ejecute el ejemplo: python ./gviz_simple.py .
  • Salir del entorno: deactivate

Puse algunas cosas en github al respecto. Es desordenado, úselo bajo su propio riesgo: https://github.com/darkhipo/Easy-Digraph-Draw