[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] Python3 igraph import error on Cygwin

From: Tamás Nepusz
Subject: Re: [igraph] Python3 igraph import error on Cygwin
Date: Tue, 30 Apr 2013 23:05:08 +0200

> In the call, __name__ is "igraph._igraph" and __file__ is 
> "/usr/local/lib/python3.2/site-packages/python_igraph-0.6.5-py3.2-cygwin-1.7.18-i686.egg/igraph/igraph_core.cpython-32m.dll".
>  The file is there. I've tried calling imp.load_dynamic manually from within 
> the directory containing the DLL (e.g. 
> "imp.load_dynamic('igraph._igraph','igraph_core.cpython-32m.dll')"). I tried 
> adding the directory to LD_LIBRARY_PATH. Same result in all cases.
Okay, I think the problem here is that imp.load_dynamic is looking for a 
specific symbol within the loaded DLL file and the name of this symbol is 
derived from the filename. This is what the Python docs say about the issue [1]:

"The initialization function must be named PyInit_name, where name is the name 
of the module, and should be the only non-static item defined in the module 


It does not matter what name you pass to imp.load_dynamic in the first 
argument, it will always use the second argument. So, the problem is that by 
renaming _igraph.cpython-32m.dll to igraph_core.cpython-32m.dll, Python will 
look for a symbol named PyInit_igraph_core in the DLL instead of 
PyInit__igraph. I think that you have to edit igraphmodule.c in the source code 
of the Python interface, replace the single occurrence of PyInit__igraph to 
PyInit_igraph_core (and also replace every occurrence of "igraph._igraph" with 
"igraph.igraph_core" while you are at it), replace "igraph._igraph" in setup.py 
with "igraph.igraph_core" as well, and recompile the Python interface. 
Hopefully this will create a "proper" igraph_core module within igraph that 
will not confuse Cygwin.

Please keep me posted; if it works, I will definitely fix it in the next 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]