Python 如何使用Cython创建站dll

Python 如何使用Cython创建站dll,python,dll,Python,Dll,我有一个Python脚本,我将脚本重命名为.pyx文件。我想把这段代码编译成一个标准的dll文件 我看到Cython将创建一个dll文件,但我只得到一个pyd 我使用了mingw,并尝试使用命令python setup.py build--compiler=mingw32编译脚本my code(只是一个hello world): 有什么想法吗?谢谢所以首先要做的是重命名 文件到helloworld.pyx。现在我们需要 将setup.py设置为 python Makefile(有关更多信息 见汇

我有一个Python脚本,我将脚本重命名为.pyx文件。我想把这段代码编译成一个标准的dll文件

我看到Cython将创建一个dll文件,但我只得到一个pyd

我使用了mingw,并尝试使用命令
python setup.py build--compiler=mingw32
编译脚本my code(只是一个hello world):


有什么想法吗?谢谢

所以首先要做的是重命名 文件到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"])] )
使用它来构建Cython文件 使用命令行选项:

$ python setup.py build_ext --inplace
这将在您的本地计算机中留下一个文件 unix中名为helloworld.so的目录 或Windows中的helloworld.dll

现在到 使用这个文件:启动python 解释器并简单地将其导入 这是一个常规的python模块:

是的,.pyd文件是dll文件,但有一些区别。如果你 如果有一个名为
foo.pyd
的DLL,那么它必须有一个函数
PyInit\u foo()
。 然后可以编写Python“import foo”,Python将搜索 foo.pyd(以及foo.py、foo.pyc),如果找到它,将尝试 调用
PyInit\u foo()
对其进行初始化。您没有将.exe链接到 foo.lib,因为这将导致Windows要求DLL存在

请注意,foo.pyd的搜索路径是PYTHONPATH,与PYTHONPATH不同 Windows用于搜索foo.dll的路径。另外,foo.pyd需要 如果你链接了你的程序 对于dll,dll是必需的。当然,如果需要,则需要foo.pyd 想说
导入foo
。在DLL中,链接在源中声明 使用
\uuu declspec(dllexport)
编码。在.pyd中,链接是在 可用功能的列表


这不是Cython的目的。它用于用Python方言编写CPython扩展,可以而且应该用来编写必须与Python密切配合的低级静态类型代码。不用于将python代码转换为可以从无关代码调用的内容(例如,不知道CPython的C程序)。谢谢。我和你做的一样,在xp sp3中。但是我不能得到helloworld.dll,但是有一个helloworld.pyd和一个构建文件夹。这就是我想知道为什么没有dllfill@JaKob如果我运行上面给出的相同命令,我将获得.c扩展名文件。我可以知道为什么我使用.c扩展名而不是.dll文件吗。
$ python setup.py build_ext --inplace