安装成功之后,再修改设置。让Cython可以找到vcarsall.bat。此处有两种方案。(我采用方案1,亲测可用。方案2未测试,看似可用。)
windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展
安装Cython
可以使用pip命令安装Cython。
pip install cython
处理vcvarsall.bat
若不处理,可能会出现“Unable to find vcvarsall.bat”错误。
在windows平台上安装python c extension的扩展包是件很痛苦的事情,一般通过安装vc/vs系列来编译C扩展,不过安装包都比较大。或者通过mingw编译,不过有时会在兼容性上出现点问题。
有个好消息就是微软为Python提供了专用的编译器Microsoft Visual C++ Compiler for Python 2.7(包含32位和64位) 下载地址: http://aka.ms/vcpython27
1.下载完成并安装。以本机为例,安装完成后的路径为:
1 |
C:UsersacerAppDataLocalProgramsCommonMicrosoftVisual C++ for Python9.0 |
2.修改python安装目录下Libdistutilsmsvc9compiler.py文件(如有必要可能msvccompiler.py文件也需要做相应更改,视系统而定),找到get_build_version方法直接return 9.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
然后再找到find_vcvarsall方法直接返回vcvarsall.bat的路径(以自己机器安装后的路径为准)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
方案2:修改注册表
错误描述: 在从源代码安装Python模块时遇到此错误。可是我明明从官网下载并安装了Microsoft Visual C++ Compiler Package for Python 2.7,且配置了环境变量path。 错误原因: 报这个错误的原因是Python的distutils模块中的msvc9compiler.py并不从环境变量指定的路径中寻找’vcvarsall.bat’,而是通过注册表来寻找…,然而,不知为什么编译器安装过程没有配置注册表。 解决办法: 只要手工把注册表配置好,就可以了。 // 1、打开注册表编辑器 run regedit // 2、配置 // 2.1、如果你安装的Python是32位的,则,创建如下项: HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio9.0SetupVC // 2.2、如果你安装的Python是64位的,则,创建如下项: HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftVisualStudio9.0SetupVC // 3、并在此项下新建字符串值: 名称:productdir 数据:vcvarsall.bat所在路径 注意:路径中不包含最后的反斜杠。
3、创建工作目录并生成pyd文件
这里有一个坑。程序所在的目录路径不能包含中文文字。所以我在E盘下创建一个test文件夹,用于放置要处理的python文件。
简单写了一个测试文件(命名为test.py):
#coding:utf-8 def hello(): print("Hello world") input("<press ENTER to quit>")
在该目录下,再新建一个py文件(命名为setup.py):
from distutils.core import setup from Cython.Build import cythonize setup( name = 'Hello world app', ext_modules = cythonize("test.py"), )
接着,再打开cmd,跳到该目录并执行如下命令:
python setup.py build_ext —inplace
参考博客地址:http://yshblog.com/blog/117 ,https://blog.csdn.net/qq_34106574/article/details/81166062