I want to use Cython to convert multiple .pyx files into an executable package (.DLL).
How do I create a single Windows DLL from multiple .pyx via distutils?
Sample used:
sub1.pyx:
cimport sub1
class A():
def test(self, val):
print "A", val
sub1.pxd:
cdef class A:
cpdef test(self,val)
sub2.pyx:
cimport sub2
class B():
def test(self):
return 5
sub2.pxd:
cdef class B:
cpdef test(self)
init.py:
cimport sub1
cimport sub2
import sub1
import sub2
setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("sub", ["__init__.pyx", "sub1.pyx", "sub2.pyx"])]
setup(
name = 'Hello world app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
Error:
sub1.obj : error LNK2005: ___pyx_module_is_main_sub already defined in __init__.obj
sub1.obj : error LNK2005: _initsub already defined in __init__.obj
sub2.obj : error LNK2005: ___pyx_module_is_main_sub already defined in __init__.obj
sub2.obj : error LNK2005: _initsub already defined in __init__.obj
Creating library build\temp.win32-2.7\Release\sub.lib and object build\temp.win32-2.7\Release\sub.exp
C:\temp\ctest\sub\sub.pyd : fatal error LNK1169: one or more multiply defined symbols found
I was not aware of this :
http://groups.google.com/group/cython-users/browse_thread/thread/cbacb7e848aeec31
I report the answer of one of the main coders (Lisandro Dalcin) of cython (sorry for cross posting):
ext_modules=[
Extension("myModule",
sources=['src/MyFile1.pyx',
'src/MyFile2.pyx'],
You cannot have a single "myModule" built from two different sources. Perhaps you could add a "src/myModule.pyx" file, with the two lines below:
# file: myModule.pyx
include "MyFile1.pyx"
include "MyFile2.pyx"
and then use
Extension("myModule", sources=['src/myModule.pyx'], ...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With