在Windows 10 64位操作系统上安装pygraphviz和Python 3.6

32

我正试图在Windows 10上安装pygraphviz。网上有许多解决方案,但目前为止没有一个适用于我。我遇到的具体问题是在jupyter笔记本上-->

我正在尝试在Windows 10上安装pygraphviz。虽然网上有很多解决此问题的方案,但至今还没有一个能够解决我的问题。我遇到的具体问题是在使用jupyter notebook时-->

[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()

我在 [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'

ImportError                               Traceback (most recent call last)
<ipython-input-2-86a15892f0f0> in <module>()
  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/')

我尝试过以下解决方法

(1) 常规pip安装: "pip install pygraphviz",但在最后出现了这个错误。 编辑 即使以管理员身份运行cmd,我仍然会得到相同的错误。

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) 下载并安装graphviz-2.38.msi,然后下载64位版本的wheel。这是结果。

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.

我想尝试的事情,但不确定如何正确地执行:

编辑setup.py文件。我读了很多关于人们通过更改路径来找到解决方案,但我不是很确定如何做到这一点。这种方法看起来非常复杂。

感谢任何帮助/见解!


@Jason:你的 Python 版本是多少? - CristiFati
@CristiFati 3.6,我正在从2.7升级。在2.7上,我有pygraphviz,并且它运行得很好。 - jason
@CristiFati。在2.7和3.6上,Pip install pygraphviz对我都不起作用。我能够通过下载cp27 whl文件来安装2.7版本。所以我正在寻找Python 3的cp34文件。 - jason
@jason:你是在使用 Anaconda,还是普通的 Python 安装,或者是 VEnv - CristiFati
我认为这是因为我正在尝试在3.6上安装64位版本,而该版本并不存在。 - jason
显示剩余2条评论
4个回答

19

更新了 repo: [GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyGraphviz/v1.5:

  • 使用官方的 Graphviz 2.42.2 源代码

  • .whls (win_amd64, win32) 适用于当前支持的 Python 版本

  • 可能会添加新版本 (请检查上一级目录)

对于 Python 2.7,它们已经构建好了: [UCI.LFD]: Unofficial Windows Binaries for Python Extension Packages - PyGraphviz, an interface to the Graphviz graph layout and visualization package..

注释:

  • 在一些(我想,大部分)情况下,需要在PyGraphviz运行的系统上安装Graphviz软件,因为PyGraphviz使用了Graphviz的一些工具(可执行文件)。它们可以下载或构建(它们不必匹配PyGraphviz的架构(032位PC032),064位PC064)),因为它们被调用了)。
    更新:我还添加了Graphviz 2.42.2版本PC032 - 因为它可在WinPC064PC032上运行)到上述存储库中

    • 检查是否有更新的软件版本
  • 此外,修复了一个错误(在以前的版本中存在)。请查看[SO]: pygraphviz 1.5 default edge no arrow? (@CristiFati's answer)获取更多细节

任何想要了解构建过程的详细信息的人,请继续阅读!



1. 介绍

近两年过去了,问题(虽然不完全与问题描述一致)仍然存在。

我想先强调一下这两个包之间的区别:

Anaconda环境中,[SO]: 在 Windows 10 64 位、Python 3.6 上安装 PyGraphviz(@TomHanks 的回答)完美地运行

PyGraphwiz只提供了一个存档文件(在这种情况下是.zip文件),这意味着它包含(C / C++)源代码。

关于那些名称包含类似于cp34-none-win_amd64的.whl包的几句话(请查看[SO]: Python 中版本名称“cp27”或“cp35”代表什么?(@WayneWerner的回答)以获取详细信息):

  • 它们包含二进制文件(.so.pyd (.dll)),这些文件与特定的Python库链接

    • 它们只能与该Python版本一起使用 (所以34不适用于Python 3.6)

    • 即使有人以某种方式“智取”PIP并成功安装了这样的软件包(实际上并不难),它也将在导入时失败,或者更糟糕的是,它很可能会崩溃Python

现在,许多软件包都为运行在各种OS上的大多数常见Python版本提供了预构建的二进制文件(例如[PyPI]: mysql-connector-python - Download files),但同样许多软件包没有提供,只包含源代码。不幸的是,PyGraphviz属于后者。对于后者,pip install将会:

  • 下载源代码

  • 本地构建源代码

    • 需要一个C(C++)编译器,通常使用以下编译器:

      • Nix上的GCC

      • Win上的VStudio

    • 它们可能有其他依赖项

  • 安装已构建的构件(二进制文件和.py(c)文件)

顺带一提:pip -v ...为当前命令启用详细模式,在遇到安装错误时非常方便

回到我们的问题:Python 3.6需要VStudio 2015[Python.Wiki]: WindowsCompilers)。
这是一个非常广泛的话题,我在以下部分中涵盖了一些内容:

在继续之前,您应该检查它们并保持打开状态,因为您下一步肯定需要它们。

我安装了VStudio 2015 Community(还有许多其他版本),您也应该安装它,它是免费的([MS.VStudio]:仍然想要旧版本吗?)。

PyGraphviz依赖于[Graphviz]:图形可视化软件。 因此,在构建时,它将需要已经构建好(部分)Graphviz(它本身也有其他依赖项)。 不幸的是,我找不到预构建的二进制文件(有[Graphviz]:Windows Packages - graphviz-2.38.zip,但那没用),因此必须手动构建。

在进一步操作之前:

[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 "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'pygraphviz'

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> dir /b
other
src
这是我的顶级目录,所有源代码都会下载到src目录中,二进制文件将放置在bin目录中。

2. 构建Graphviz

在开始之前,我想提到我在很大程度上依赖Cygwin(您不必使用它,还有其他变量(MSYS2)),并且我的一些工具已安装在那里,因此我将在CygwinCmd终端之间交替使用(可能会令人困惑)。 [Graphviz]: Windows的Graphviz构建说明指出:

要在Windows上构建:

(Graphviz版本≥2.41)

首先,在代码库的根目录下执行git submodule update --init。 这将下载所有子模块,这些子模块大多是Windows构建所需的依赖关系。 接下来,将windows\dependencies\graphviz-build-utilities目录添加到PATH中(然后重新启动Visual Studio或在此之后执行msbuild的提示符)。 此文件夹包含已测试版本的Bison、Flex和SED等工具(以及未来的添加)。 如果一切顺利,现在就设置好了依赖项,可以构建Graphviz了。

首先,我们需要下载所有东西:
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q045093811/src/graphviz]> ~/sopr.sh
### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###

[064bit prompt]> 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.
[064bit prompt]>
[064bit prompt]> 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'
[064bit prompt]>
[064bit prompt]> git show head
commit 89292b5945933b1501293c04894ed9cf886241be (HEAD -> master, origin/master, origin/HEAD)
Merge: 429d43615 97811bd35
Author: Stephen C North <scnorth@gmail.com>
Date:   Mon Feb 4 08:09:40 2019 -0500

    Merge branch 'wasbridge/graphviz-master' into HEAD

[064bit prompt]> git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
你最终会得到一个包含大约320 MiB的东西的目录dir。该dir包含一个graphviz.sln文件,这是一个VStudio(2015)解决方案文件,其中包含63个项目。

查看AnacondaPython 2.7PyGraphviz(已构建)软件包,它仅依赖于cgraph.dll,而cgraph.dll又依赖于cdt.dll,因此只有这两个项目与我们相关。请注意,这两个项目可能不需要所有的Git子模块(因此dir可能会被削减),但我没有进一步调查。

不幸的是,这些项目仅配置为032bitWin32平台(pc032))。064bit的必须手动添加(我是从VStudio IDE中添加的,并在我引用的答案中描述了该过程)。保存项目后,它们将被Git标记为已修改:

[064bit prompt]> git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." 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")

第三个项目是因为我需要重置两个可执行文件的一些安全权限(在构建cgraph时使用):

  • bison.exe

  • flex.exe

很可能是由于Cygwin,导致设置不正确。

你可以从IDE构建这两个项目,但我选择使用命令行([MS.Docs]:MSBuild命令行参考),因为我觉得更加灵活:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q045093811]> sopr.bat
### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###

[prompt]> "c:\Install\x86\Microsoft\Visual Studio Community\2015\vc\vcvarsall.bat" x64

[prompt]> set PATH=%PATH%;%CD%\src\graphviz\windows\dependencies\graphviz-build-utilities

[prompt]> 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

[prompt]> echo %errorlevel%
0

[prompt]> dir /b
bin
build_cdt.txt
other
src

[prompt]> 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

[prompt]> echo %errorlevel%
0

[prompt]> 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
所以,我们已经拥有了完成操作所需的一切(2个.lib文件和2个.dll文件)。
3. 构建PyGraphviz
PyGraphviz源代码(从[GitHub]: pygraphviz/pygraphviz - (pygraphviz-1.5) pygraphviz-pygraphviz-1.5.zip下载并)解压到src/pygraphviz/pygraphviz-pygraphviz-1.5
还需要对Graphviz进行一些调整(可能作为另一个项目的一部分-安装步骤):准备头文件:
[prompt]> mkdir include\graphviz

[prompt]> copy src\graphviz\lib\cdt\cdt.h include\graphviz
        1 file(s) copied.

[prompt]> copy src\graphviz\lib\cgraph\cgraph.h include\graphviz
        1 file(s) copied.

遗憾的是,PyGraphviz不能够直接编译成功,因为[GitHub]: pygraphviz/pygraphviz - Python 3 support。为了解决这个问题,必须应用[GitHub]: eendebakpt/pygraphviz - Workaround for PyIOBase_Type for Python2 on win。我修改了这个方法以适配当前的源码(因为它也不能够直接编译成功)仅对于 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);

那是一个diff(补丁)。请参见[SO]:如何在PyCharm社区版中的鼠标右键上下文菜单中运行/调试Django应用程序的UnitTests?(@CristiFati's答案)(Patching UTRunner部分),了解如何在Win上应用补丁(基本上,每一行以一个"+" 符号开头的都需要添加,每一行以一个"-" 符号开头的都需要删除)。
[prompt]> :: Restore the original prompt as cwd is important
[prompt]> exit

[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']
 <module '_graphviz' (e:\Work\Dev\VEnvs\py_064_03.06.08_test0\lib\site-packages\pygraphviz\_graphviz.cp36-win_amd64.pyd)>

如上所示,模块已成功导入。

需要注意的是,在导入模块时必须有前面一节提到的2个.dll依赖项,因此它们的dir被添加到了%PATH%中。
当然,这只是一种(简陋的)解决方法(gainarie),不能每次使用该包时都这样操作。

我还不知道如何指示setup.py在构建/安装目录中也复制它们,因此作为替代方法(同样是解决方法),必须手动将它们复制到PyGraphviz安装目录下(与_graphviz.cp36-win_amd64.pyd放在一起,在我的情况下是:“e:\Work\Dev\VEnvs\py_064_03.06.08_test0\lib\site-packages\pygraphviz”)。

4.快捷方式

由于整个过程比较复杂,需要大量的手动干预和hack,我已经成功地构建了一个(.whl)包(通过对setup.py进行小修改)。

我不知道有什么简单的方法可以公开使用,所以(虽然这可能不是最佳实践),我将其上传到[GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyGraphviz/v1.5/pygraphviz-1.5-cp36-cp36m-win_amd64.whl
  • 以下是关于 PyGraphviz 的内容,但可以概括并应用于任何( .whl )软件包

  • 此外,将使用 GitHub 存储库作为示例,但(再次)它可以应用于( .whl )存储库中的任何内容,包括[PyPI]:Python软件包索引 (我没有使用 PyGraphviz ,因为它没有二进制文件,但例如[PyPI]:numpy 1.17.0 - 下载文件

你可以将其本地下载(例如在C:\Path\to\downloaded中),然后像这样安装它(这是一种方法,请查看[SO]: 如何在Windows 10上为特定的Python版本安装包?(@CristiFati's answer)以获取其他选项):
"C:\Path\to\Python-3.6-amd64\python.exe" -m pip install "C:\Path\to\downloaded\pygraphviz-1.5-cp36-cp36m-win_amd64.whl"
上述的.whl文件位于其他几个文件旁边。它们是针对不同的Python版本(当.whl包含链接到特定Python库的.dll.pyd)或.so(在Nix上)时会发生这种情况)。要匹配您的Python版本,请搜索.whl名称以查找cp${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}。在当前情况下,它是cp36对应于Python 3.6,但相同的原则适用于其他Python版本(cp37cp38cp39cp310cp311等)。有关更多详细信息,请查看[SO]:Python中版本名称“cp27”或“cp35”表示什么?
体系结构也是如此(win_amd64/win32(在Nix上为x86_64/i686))。 注意它也适用于Anaconda环境!

嗨,Cristi,你能看一下这个问题吗?它与你的轮子有关。https://stackoverflow.com/questions/55196206/pygraphviz-1-5-default-edge-no-arrow - jason
@jason:请注意,我只是构建了它,但从未使用过它(为了处理图形),但我会看一下。 - CristiFati
是的,这很奇怪,因为它很基本。我在 pygraphviz 的 Github 上查看了一下,没有看到任何人抱怨,所以我认为这可能是某种错误。 - jason
1
谢谢。我在不同客户的现场已经走过这个圈子无数次,每个客户都有不同的工具链锁定方式。这是我遇到的最清晰、最完整的端到端流程描述之一。 - Thomas Kimber

11

最受欢迎的答案似乎是安装Graphviz,而不是Pygraphviz。

如果您使用的是conda环境,则可以尝试使用此频道:

conda install graphviz pygraphviz -c alubbock

我用networkx 2.1试过了,它正常工作。


1
对我来说,它抛出了以下错误:ImportError: ('需要 pygraphviz', 'http://pygraphviz.github.io/') - Talha Junaid
@TomHanks:不错的发现!不过请检查我的答案,因为它可以提供更一般化的解决方案。 - CristiFati

2

这是对我有效的方法:

Win 7 AMD64

安装 MSFT C++编译器。 安装 适用于Win AMD64,Python3的Anaconda。 安装 适用于Win的graphviz。 将 C:\Program Files (x86)\Graphviz2.38\bin 添加到你的PATH环境变量中。 下载 pygraphviz-1.3.1-cp34-none-win_amd64.whl。 使用Python 3.4创建一个Conda环境: conda create --name digraphs python=3.4 anaconda。 进入环境: activate digraphs。 使用pip安装pygraphviz:pip install pygraphviz-1.3.1-cp34-none-win_amd64.whl。 运行示例:python ./gviz_simple.py。 退出环境:deactivate
我在GitHub上放了一些相关的东西。它很凌乱,请自行承担风险: https://github.com/darkhipo/Easy-Digraph-Draw

2
我不知道为什么这个被踩了,而 @dot-nix 的那个没有被踩(尽管它本应该被踩)。 - CristiFati

1

我在Windows 10 64位和Python 3.6上解决了这个问题。

步骤:

  1. 从Graphviz网站下载Windows版Graphviz

  2. 将Graphviz bin路径C:\Program Files (x86)\Graphviz2.38\bin添加到Windows路径中。

  3. 关闭并重新打开终端,以使路径更改得到识别。

  4. 下载graphviz python 3.6 wheel

  5. 安装graphviz wheel。

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

  6. 完成!


3
我认为你和adurbin正在讨论不同的软件包。有两个名称相似的库:pygraphviz似乎是问题所在,而你的解决方案涉及包graphviz,因此与这个问题无关。请参考:https://dev59.com/nloU5IYBdhLWcg3wi3WW - Librarian
这个答案是不正确的(从步骤***#4.***开始)。-1。它应该被完全删除。 - CristiFati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接