解决Cython在Window下Python2.7中:Unable to find vcvarsall.bat的问题
2017-05-18 22:40
615 查看
初次使用Cython的遇到问题
程序所在目录必须全英
刚开始照着网上的示例写了一个文件,结果一直出现:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xb2 in position 18: ordinalnot in range(128)
然后我尝试将两个文件都改为utf8,仍然出错,结果一样:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xb2 in position 18: ordinalnot in range(128)
我又以为py文件里没有写 #coding=utf-8 ,添加后,结果还是一样:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xb2 in position 18: ordinalnot in range(128)
以上都尝试过后,网上又找到更改默认编码的方法:
import sys default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding: reload(sys) sys.setdefaultencoding(default_encoding)
尝试后结果还是一样。之后我仔细看了一下错误提示,说道’UnicodeDecodeError‘,于是我将文件改为Unicode,尝试之后报错的结果是变了,但是还是没有成功。报错如下:
Cython.Compiler.Errors.CompileError:
最后,我猜测可能是安装的Cython没有对中文目录进行处理,导致编码方式不对。将文件移到一个全英的目录再次运行,就会看到提示正在建立库。用install命令安装后,import该包后就可以运行了。
Unable to find vcvarsall.bat
这个问题也困扰了我好久。网上找方法,看着都好复杂。尤其是一个在命令行改用set设置VS90COMNTOOLS=%VS110COMNTOOLS%的方法,很坑!提示要在安装前设置,于是我就先后安装再卸载了无数次,都以失败告终。重点内容其中还有一个方法提到直接修改,Python27\Lib\distutils目录下的cygwinccompiler.py文件,也犹豫了半天要不要更改,很怕给改坏了。有人提示直接改第二百多行的那个VERSION就行,好像有点道理。我后来将源码文件分析了一下,最后确实只改了一行,只不过和他说的不是同一行。
具体操作如下:
首先,打开Python27\Lib\distutils目录下的cygwinccompiler.py文件,找到关键字majorVersion,将其值改为你VisualStudio的版本,版本号可以看你安装目录。我的是2015版本号是14,就将其赋值为14。
然后,还需要更改注册表中的值。按住Win+R,输入regedit打开注册表编辑器,找到如下目录\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\Setup 其中14.0就是你VS的版本。在Setup目录下找到VC,可能没有这个目录,手动添加一个项命名为VC就好。然后在VC下再创建一个字符串值,名称为productdir(majorVersion.py源码文件中出现的),数值为 你 VS中VC的目录如:E:\Soft\Microsoft Visual Studio 14.0\VC,关闭注册表,重新运行示例代码。错误消失了。
参考示例文件如下
创建hello.pyx,内容如下def say_hello(): print "Hello World!"
创建setup.py,内容如下
from distutils.core import setup from Cython.Build import cythonize setup(name = 'Hello world app', ext_modules = cythonize("hello.pyx"))
在同目录下打开cmd命令行,运行如下命令:
python setup.py build python setup.py install
最后进入Python命令窗口,输入如下命令:
>>> import hello >>> hello.say_hello()
就会看到熟悉的 Hello World!
相关文章推荐
- 解决 Python安装包的时候遇到 “Unable to find vcvarsall.bat”错误的问题
- python扩展问题”unable to find vcvarsall.bat“的解决
- Windows 8 Cython 的配置(解决Unable to find vcvarsall.bat问题)
- Win7 64位编译Python扩展解决”error: Unable to find vcvarsall.bat”问题
- Python3 pip 解决问题: error: Unable to find vcvarsall.bat
- Python扩展问题”unable to find vcvarsall.bat“的解决
- 解决window10+python3.6 unable to find vcvarsall.bat
- 关于python下构建c模块出现error: Unable to find vcvarsall.bat问题的解决方法
- 解决使用python3.5来获取PCL库出现 unable to find vcvarsall.bat的问题
- Python 3.x-解决unable to find vcvarsall.bat问题
- python---解决“Unable to find vcvarsall.bat”错误
- 解决python安装模块时出现“Unable to find vcvarsall.bat”
- python---解决“Unable to find vcvarsall.bat”错误
- Python 3 安装 lxml 报错Unable to find vcvarsall.bat的解决方法
- 转:python 3.4 error: Microsoft Visual C++ 10.0 is required(Unable to find vcvarsall.bat)解决办法,自研亲测可行
- windows下扩展python遇见(Unable to find vcvarsall.bat)问题
- python---解决“Unable to find vcvarsall.bat”错误,在windows 64位上安装
- python—解决“Unable to find vcvarsall.bat”错误
- python—解决“Unable to find vcvarsall.bat”错误
- windows 下 python 在安装模块的时候出现”unable to find vcvarsall.bat“如何解决?