网站首页Python相关

在Windows上基于Python3.7编译pyd文件

发布时间:2019-07-21编辑:fc不将就阅读(51

    注意事项

    1. 由于.net 3.7.2在windows7上安装频繁报错我放弃了用win7,系统用的windows10

    2. 编译python3.7需要安装最新版的visual studio(安装组件至少需要10G的空间),旧版的可能不支持py37,如果编译的是python2.7的请看另一个文章

    下载visual studio

    点击 下载地址 进去后只需要下载 visual studio ide community 2019 版本即可

    安装visual studio组件

    如图所示,如果不需要安装python(我电脑已经安装了anaconda,故没有在vs中安装python)只需要选择图中圈出来的组件,其他都不需要安装

    安装组件.png

    编译pyd文件

    这边演示是从py文件编译为pyd文件,测试一个加法运算,2个文件如下所示

    # file: alog.py
    def add(x, y):
        return x + y
    # file: setup.py
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Distutils import build_ext
    
    ext_modules = [
        Extension("alog", ["alog.py"])
    ]
    
    setup(
        cmdclass={'build_ext': build_ext},
        ext_modules=ext_modules
    )


    切换到当前路径,在命令行中运行, 可以看到输出如下所示即为运行成功   

    编译完的pyd文件为build/lib.win-amd64-3.7/alog.cp37-win_amd64.pyd

    (base) C:\Users\pymake\Desktop\test>python setup.py build_ext
    running build_ext
    cythoning alog.py to alog.c
    building 'alog' extension
    creating build
    creating build\temp.win-amd64-3.7
    creating build\temp.win-amd64-3.7\Release
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Users\pymake\anaconda3\include -IC:\Users\pymake\anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcalog.c /Fobuild\temp.win-amd64-3.7\Release\alog.obj
    alog.c
    creating C:\Users\pymake\Desktop\test\build\lib.win-amd64-3.7
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\pymake\anaconda3\libs /LIBPATH:C:\Users\pymake\anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x64" /EXPORT:PyInit_alog build\temp.win-amd64-3.7\Release\alog.obj /OUT:build\lib.win-amd64-3.7\alog.cp37-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.7\Release\alog.cp37-win_amd64.lib
    正在创建库 build\temp.win-amd64-3.7\Release\alog.cp37-win_amd64.lib 和对象 build\temp.win-amd64-3.7\Release\alog.cp37-win_amd64.exp
    正在生成代码
    已完成代码的生成

    测试pyd文件

    (base) C:\Users\pymake\Desktop\test>cd build\lib.win-amd64-3.7
    
    (base) C:\Users\pymake\Desktop\test\build\lib.win-amd64-3.7>ipython
    Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)]
    Type 'copyright', 'credits' or 'license' for more information
    IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: from alog import  add
    
    In [2]: add(1,10)
    Out[2]: 11