如何使用Cython创建一个stand dll

ljx*_*517 10 python dll

我有一个Python脚本,我将脚本重命名为.pyx文件.我想将此代码编译为stand dll文件.

我在本文档中看到Cython将创建一个dll文件,但我只得到一个pyd.

我有mingw并尝试使用命令python setup.py build --compiler=mingw32编译脚本我的代码(只是一个问候世界):

def init():
    return "hello world"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

Jak*_*yer 6

因此,第一件事是将文件重命名为helloworld.pyx。现在,我们需要制作setup.py,它类似于python Makefile(有关更多信息,请参见编译)。您的setup.py应该如下所示:

from distutils.core import setup
from distutils.extension import Extension

from Cython.Distutils import build_ext
    setup(
        cmdclass = {'build_ext': build_ext},
        ext_modules = [Extension("helloworld",
    ["helloworld.pyx"])] )
Run Code Online (Sandbox Code Playgroud)

要使用它来构建Cython文件,请使用命令行选项:

$ python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

它将在您的本地目录中的unix或Windows中的helloworld.dll中保留一个名为helloworld.so的文件。

现在要使用此文件:启动python解释器,并像导入常规python模块一样简单地将其导入:


Cee*_*man 6

\n

*.pyd 文件与 DLL 相同吗?

\n\n

是的,.pyd 文件是 dll\xe2\x80\x99s,但有一些区别。如果您有一个名为 的 DLL foo.pyd,那么它必须有一个函数PyInit_foo()。然后您可以编写 Python \xe2\x80\x9cimport foo\xe2\x80\x9d,Python 将搜索\n foo.pyd(以及如 foo.py、foo.pyc),如果找到它,将尝试\n 调用PyInit_foo()来初始化它。您不要将 .exe 与 foo.lib 链接,因为这会导致 Windows 要求 DLL 存在。

\n\n

请注意,foo.pyd 的搜索路径是 PYTHONPATH,与 Windows 用于搜索 foo.dll 的路径不同。另外,运行您的程序不需要 foo.pyd,而如果您将程序与 dll 链接,则需要该 dll。当然,如果你想要说 ,则需要 foo.pyd import foo。在 DLL 中,链接在源代码中以__declspec(dllexport). 在 .pyd 中,链接是在可用函数列表中定义的。

\n
\n\n

修改Python\xe2\x80\x99s搜索路径绝对和相对导入

\n