代码之家  ›  专栏  ›  技术社区  ›  Alex B

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

  •  0
  • Alex B  · 技术社区  · 8 年前

    主.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创建库main.lib和对象main.exp MSVCRT.lib(crtexew.obj):错误LNK2019:未解析的外部符号 _函数tmainCRTStartup main.exe中引用的WinMain@16:致命错误LNK1120:1未解析的外部

    2 回复  |  直到 8 年前
        1
  •  2
  •   Ori Arbes    8 年前

    尝试使用PyInstaller

    pip install pyinstaller
    

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

        2
  •  2
  •   Alex B    8 年前

    我想出来了。

    setup.py必须公开入口点:

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

    命令行.py:

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

    __初始年:

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

    之后 python setup.py develop mypackage-cli.exe 带“shim”脚本 mypackage-cli-script.py 在%PYTHONPATH%\Scripts中

    c:\tmp\mypackage>C:\Python27-32\Scripts\mypackage-cli.exe
    

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

    它要求Python发行版位于 C:\Python27-32

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