我有一个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)
有任何想法吗?谢谢
因此,第一件事是将文件重命名为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模块一样简单地将其导入:
\n \n\n\n\n是的,.pyd 文件是 dll\xe2\x80\x99s,但有一些区别。如果您有一个名为 的 DLL
\n\nfoo.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 存在。请注意,foo.pyd 的搜索路径是 PYTHONPATH,与 Windows 用于搜索 foo.dll 的路径不同。另外,运行您的程序不需要 foo.pyd,而如果您将程序与 dll 链接,则需要该 dll。当然,如果你想要说 ,则需要 foo.pyd
\nimport foo。在 DLL 中,链接在源代码中以__declspec(dllexport). 在 .pyd 中,链接是在可用函数列表中定义的。
修改Python\xe2\x80\x99s搜索路径、绝对和相对导入
\n