开发环境说明:
- python 3.6.2
- Vs studio 2017 (已经安装C++桌面开发)

我的 vcvarsall.bat 路径为:
"D:\vsstudio\VC\Auxiliary\Build\vcvarsall.bat"
一般在Vs studio 的此安装路径下

- 修改python源代码
修改文件为 python3.6.2\Lib\distutils\_msvccompiler.py 注意 前面存在下划线 :
我的文件路径为:
"D:\core_package\python3.6.2\Lib\distutils\_msvccompiler.py"

接下来 使用记事本打开:
- 将 _find_vcvarsall 函数修改:
- 源代码:
-
def _find_vcvarsall(plat_spec): try: key = winreg.OpenKeyEx( winreg.HKEY_LOCAL_MACHINE, r"Software\Microsoft\VisualStudio\SxS\VC7", access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY ) except OSError: log.debug("Visual C++ is not registered") return None, None with key: best_version = 0 best_dir = None for i in count(): try: v, vc_dir, vt = winreg.EnumValue(key, i) except OSError: break if v and vt == winreg.REG_SZ and os.path.isdir(vc_dir): try: version = int(float(v)) except (ValueError, TypeError): continue if version >= 14 and version > best_version: best_version, best_dir = version, vc_dir if not best_version: log.debug("No suitable Visual C++ version found") return None, None vcvarsall = os.path.join(best_dir, "vcvarsall.bat") if not os.path.isfile(vcvarsall): log.debug("%s cannot be found", vcvarsall) return None, None vcruntime = None vcruntime_spec = _VCVARS_PLAT_TO_VCRUNTIME_REDIST.get(plat_spec) if vcruntime_spec: vcruntime = os.path.join(best_dir, vcruntime_spec.format(best_version)) if not os.path.isfile(vcruntime): log.debug("%s cannot be found", vcruntime) vcruntime = None return vcvarsall, vcruntime修改为:
-
def _find_vcvarsall(plat_spec): best_dir = r"D:\vsstudio\VC\Auxiliary\Build" best_version = 17 vcruntime = None vcruntime_spec = _VCVARS_PLAT_TO_VCRUNTIME_REDIST.get(plat_spec) if vcruntime_spec: vcruntime = os.path.join(best_dir, vcruntime_spec.format(best_version)) if not os.path.isfile(vcruntime): log.debug("%s cannot be found", vcruntime) vcruntime = None print(vcruntime) return r"D:\vsstudio\VC\Auxiliary\Build\vcvarsall.bat", vcruntime要修改的 如下图所示:

如果跟我配置一样的话 到指定目录终端下
就可以输入
python setup.py build_ext --inplace
完成 PYTHON 到 c 的文件编译啦
成功截图 如下所示:

注意 编译完成后要使用时 需要将 .pyx文件 .c文件 .py文件全部删除 只保留 pyd文件
在其他文件调用时 不用担心报错 可以正常运行

输出结果如下所示

.

![[230516] TPO71 | 2022年托福阅读真题第4/36篇 | Electrical Energy from the Ocean | 11:50](https://img-blog.csdnimg.cn/8cc0024f47ef42298d15d15e81a37178.png)















![[golang gin框架] 30.Gin 商城项目- 购物车商品确认页面以及收货地址的增删改查](https://img-blog.csdnimg.cn/img_convert/77656e947ab57644d73d04c5a373837f.png)

