windows下安裝pygraphviz過程 及 相關錯誤解決


簡單的在windows安裝pygraphiviz的過程如下:
3. 解壓后
    1. 修改setup.py,三個地方要改
        library_path=r'D:\Program Files (x86)\Graphviz 2.28\lib\release\lib'   #按你的graphviz路徑修改
        include_path=r'D:\Program Files (x86)\Graphviz 2.28\include\graphviz'   #按你的graphviz路徑修改
    2. 修改文件unixcompiler.py,一般是285行(“C:\python27\lib\distutils\unixcompiler.py")如下:
        old:  compiler = os.path.basename(sysconfig.get_config_var("CC"))
        new: compiler =  "gcc"
        編譯完pygraphviz后,記得改回去。

4. python setup.py build -c mingw32   要先確定已安裝mingw32
5. 手工拷貝pygraphviz目錄(像:D:\Downloads\pygraphviz\build\lib.win32-2.7) 到python的site-packages下:C:\Python27\Lib\site-packages
6. 檢查下是否安裝成功
    import pygraphviz

按上述方法基本就可以安裝成功。

但是,我在這個過程中碰見如下幾個問題:
1. 嘗試用python setup.py build -c mingw32的時候,碰到:gcc: 錯誤:unrecognized command line option ‘-mno-cygwin’
錯誤如下:
     running build_ext
     building 'pygraphviz._graphviz' extension
     d:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-ID:\Program Files (x86)\Graphviz 2.28\include\grap
     hviz" -ID:\Python\Python27\include -ID:\Python\Python27\PC -c pygraphviz/graphviz_wrap.c -o build\te
     mp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
     gcc: 錯誤:unrecognized command line option ‘-mno-cygwin’
     error: command 'gcc' failed with exit status 1
原因:
    mingw版本太新了...無語...找了個老版本的mingw32就可以了。

2. 編譯過程中,碰見:cannot find -lcgraph
錯誤如下:
    D:\Downloads\pygraphviz>python setup.py build -c mingw32
     elease\libth=D:\Program Files (x86)\Graphviz 2.28\lib
     include_path=D:\Program Files (x86)\Graphviz 2.28\include\graphviz
     running build
     running build_py
     running build_ext
     building 'pygraphviz._graphviz' extension
     C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-ID:\Program Files (x86)\Graphviz 2.28\include\grap
     hviz" -ID:\Python\Python27\include -ID:\Python\Python27\PC -c pygraphviz/graphviz_wrap.c -o build\te
     mp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
     pygraphviz/graphviz_wrap.c: In function 'agattr_label':
     pygraphviz/graphviz_wrap.c:2855: warning: return makes integer from pointer without a cast
     writing build\temp.win32-2.7\Release\pygraphviz\_graphviz.def
     C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.7\Release\pygraphviz\graphviz_wrap.o
     elease\lib" -LD:\Python\Python27\libs -LD:\Python\Python27\PCbuild "-Wl,-RD:\Program Files (x86)\Gra
     elease\lib" -lcgraph -lcdt -lpython27 -lmsvcr90 -o build\lib.win32-2.7\pygraphviz\_graphviz.pyd
     c:/mingw/bin/../lib/gcc/mingw32/4.4.1/http://www.cnblogs.com/http://www.cnblogs.com/mingw32/bin/ld.exe: cannot find -lcgraph
     collect2: ld returned 1 exit status
     error: command 'gcc' failed with exit status 1
原因:
    library_path沒有設置對。這個要說起windows路徑的問題。如果我們把一個路徑賦值給一個字符串的時候,簡單說有兩種
辦法保持路徑不會被轉義或者截斷:
    1. 使用原始字符串r:
          library_path=r'D:\Program Files (x86)\Graphviz 2.28\lib\release\lib'
          include_path=r'D:\Program Files (x86)\Graphviz 2.28\include\graphviz'
     2. 自己把'\'改為'\\':
          library_path='D:\\Program Files (x86)\\Graphviz 2.28\\lib\\release\\lib'
          include_path='D:\\Program Files (x86)\\Graphviz 2.28\\include\\graphviz'

3. 測試是否安裝成功的時候,發現:ImportError: No module named _graphviz
錯誤如下:
     D:\Downloads\pygraphviz>python
     Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
     Type "help", "copyright", "credits" or "license" for more information.
     >>> import pygraphviz
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "pygraphviz\__init__.py", line 54, in <module>
          from agraph import AGraph, Node, Edge, Attribute, ItemAttribute
       File "pygraphviz\agraph.py", line 19, in <module>
          import graphviz as gv
       File "pygraphviz\graphviz.py", line 7, in <module>
          import _graphviz
     ImportError: No module named _graphviz
原因:
    不要運行python命令在pygraphviz目錄下,隨便新開個cmd窗口,再次運行python命令並且嘗試import,這下就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM