py文件转pyd文件记录 for windows

本文详细介绍如何在Windows10环境下安装Cython并配置相关环境变量。针对安装过程中可能出现的错误,提供了具体的解决方案。此外,还介绍了如何通过编写setup.py文件将Python源代码编译成pyd文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:Windows10,Python36(32bit)
Step1:首先需要安装Cython.。参考Cython[官方manual]的说明。
对于windows而言,需要安装编译器,这里选择Mingw。安装后需要设置环境MingW变量

PATH=C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw32\bin.

然后添加文件c:\Python27\Lib\distutils\distutils.cfg。文件内容为

[build]
compiler = mingw32块内容

。按照官方的说明,在安装好MingW,并设置好环境变量后,就可以用pip install Cython安装Cython了。但我安装好后,在编译为pyd文件时总是报错:

ValueError: Unknown MS Compiler version 1900

解决方法[参考1]&[参考2]在如下位置

C:\Program Files (x86)\Python36-32\Lib\distutils\cygwinccompiler.py

做如下修改

[参考]`
— cygwinccompiler.py
+++ cygwinccompiler.py

def get_msvcr():
         elif msc_ver == '1600':
             # VS2010 / MSVC 10.0
             return ['msvcr100']
        elif msc_ver == '1700':
           # Visual Studio 2012 / Visual C++ 11.0
            return ['msvcr110']
        elif msc_ver == '1800':
            # Visual Studio 2013 / Visual C++ 12.0
            return ['msvcr120']
        elif msc_ver == '1900':
            # Visual Studio 2015 / Visual C++ 14.0
            # "msvcr140.dll no longer exists" 
            return ['vcruntime140']
         else:
           # to do: can we make this futureproof?
             raise ValueError("Unknown MS Compiler version %s " % msc_ver)

然后添加vcruntime140.dll文件到C:\Python36\libs

Step2:安装 Cython

pip install Cython

Step3:将py文件编译为pyd[参考]
编写setup.py文件

try:
    from setuptools import setup
    from setuptools import Extension
except ImportError:
    from distutils.core import setup
    from distutils.extension import Extension

from Cython.Distutils import build_ext
import numpy as np

ext_modules = [Extension("my_code_cython",["my_code_cython.pyx"]),
               Extension("another_code_cython",["another_code_cython.pyx"])]

setup(
    name= 'Generic model class',
    cmdclass = {'build_ext': build_ext},
    include_dirs = [np.get_include()],
    ext_modules = ext_modules)

然后在命令窗口运行下面命令,即可

python setup.py build_ext – --inplace

如果你想指定其他的编译器,或者前面没有添加distutils.cfg文件,可以在命令行指定,如,指定Mingw32 。注意inplace 和compiler前有两个"-- --"

python setup.py build_ext – --inplace – --compiler=mingw32

如果是VS编译器参考

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

另附,利用Cython将py转化为EXE的方法,可参考
参考来源:
https://stackoverflow.com/questions/34135280/valueerror-unknown-ms-compiler-version-1900
https://blog.youkuaiyun.com/md2017/article/details/78402189
https://stackoverflow.com/questions/36921961/how-to-create-a-pyd-file

### 常见问题和注意事项 当尝试将Python (.py) 文件换为PYD文件时,遇到的主要挑战涉及编译环境配置、依赖管理以及特定于操作系统的差异。以下是详细的常见问题列表: #### 编译器兼容性 确保使用的C/C++编译器版本与目标平台相匹配至关重要。不同操作系统可能需要不同的编译工具链[^1]。 #### Python解释器ABI稳定性 创建PYD模块时需注意保持应用程序二进制接口(ABI)的一致性。这通常意味着要使用相同主要版本的Python来构建扩展模块,以避免潜在的不兼容问题[^2]。 #### 导入路径设置 为了使生成的PYD能够被正确加载并执行其中定义的功能,必须正确设定PYTHONPATH或其他相关环境变量以便让Python知道去哪里查找这些动态链接库[^3]。 #### CMakeLists.txt编写错误 如果采用现代打包方式通过`setuptools`配合`cmake`来进行项目结构化开发,则容易因缺乏经验而在配置文件中犯错,比如忘记指定输出目录或未声明所有必要的源码文件[^4]。 ```python from setuptools import setup, Extension import numpy as np ext_modules = [ Extension( "example", sources=["src/example.cpp"], include_dirs=[np.get_include()], language="c++" ) ] setup(ext_modules=ext_modules) ``` #### 调试信息丢失 默认情况下,在发布模式下编译可能会移除调试符号表和其他辅助数据,使得后续排查运行期异常变得困难。建议保留这部分元数据直到确认无误后再考虑优化去除[^5]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值