这个setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
extensions = (
Extension('myext', ['myext/__init__.py',
'myext/algorithms/__init__.py',
'myext/algorithms/dumb.py',
'myext/algorithms/combine.py'])
)
setup(
name='myext',
ext_modules=cythonize(extensions)
)
Run Code Online (Sandbox Code Playgroud)
没有预期的效果.我想要它生产单一的myext.so,它做的; 但是当我通过它调用它时
python -m myext.so
Run Code Online (Sandbox Code Playgroud)
我明白了:
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)
由于myext试图参考的事实.algorithms.
知道如何让这个工作吗?
我有多个.pyx文件,有没有办法将它们导入单个pyx文件并将该文件编译成共享库,而不必编译15个独立模块?
我想使用Cython将多个.pyx文件转换为可执行包(.DLL).
如何通过distutils从多个.pyx创建单个Windows DLL?
使用的样本:
sub1.pyx:
cimport sub1
class A():
def test(self, val):
print "A", val
Run Code Online (Sandbox Code Playgroud)
sub1.pxd:
cdef class A:
cpdef test(self,val)
Run Code Online (Sandbox Code Playgroud)
sub2.pyx:
cimport sub2
class B():
def test(self):
return 5
Run Code Online (Sandbox Code Playgroud)
sub2.pxd:
cdef class B:
cpdef test(self)
Run Code Online (Sandbox Code Playgroud)
init .py:
cimport sub1
cimport sub2
import sub1
import sub2
Run Code Online (Sandbox Code Playgroud)
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
)
Run Code Online (Sandbox Code Playgroud)
错误: …