如何在 Windows OS 上使用 setuptools 为 Cython 项目创建可执行文件?

How do I create executable for Cython project using setuptools on Windows OS?

main.py:

print('test')

我可以使用这个命令构建:

python setup.py build_ext --inplace --compiler=msvc

这将创建 *.pyd 文件并将它们放入我的包中所需的文件夹中。

但是我的 main.py 被编译为 main.pyd.

Extension(
    'main',
    sources=['main.c','main.py'],
    include_dirs=[np.get_include()],
)

试过这个:

cl.exe  /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\P\Python27-32\include /Tcmain.c /link /OUT:"main.exe" /SUBSYSTEM:WINDOWS /MACHINE:X86 /LIBPATH:C:\P\Python27-32\libs

但是失败了:

main.c Creating library main.lib and object main.exp MSVCRT.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup main.exe : fatal error LNK1120: 1 unresolved externals

有没有办法使用 Cython 将其构建为 Windows 可执行文件 main.exe?

尝试使用 PyInstaller

pip install pyinstaller

根据我的经验,这个框架始终有效

并在必要时下载 Cython 捆绑包: https://github.com/prologic/pyinstaller-cython-bundling

我想出来了。

setup.py 必须公开 entry_point:

entry_points={
          'console_scripts': [
            'mypackage-cli=mypackage.command_line:main',
            ],
      },

command_line.py:

from . import cli
def main():
    print cli()

__init__.py:

from markdown import markdown

def cli():
    return markdown(u'It''s a CLI!')

python setup.py develop之后 它在 %PYTHONPATH%\Scripts

中使用 'shim' 脚本 mypackage-cli-script.py 创建可执行文件 mypackage-cli.exe
c:\tmp\mypackage>C:\Python27-32\Scripts\mypackage-cli.exe

<p>It's a CLI!</p>

需要 Python 分布在 C:\Python27-32

我在这里发布了演示:github:mycyexepackage