我正在使用python 2.7.6并且在Windows 7 x64上这是我的python的入口点显示:
>python
Python 2.7.6 [MSC v.1800 32 bit (Intel)] on win32
所以我使用所有32位二进制文件。我正在尝试使用Cython显示here来编译2013 Sci Py谈论中的斐波纳契演示/教程。您可以下载教程文件here(解压缩教程文件并进入~/demo/fib/
)。
我使用pip install cython
安装了Cython,这是成功的。我尝试使用
.pyx
>python setup.py build_ext --inplace --compilers=mingw32
running build_ext
Traceback (most recent call last):
File "setup.py", line 17, in <module>
ext_modules = exts,
File "~\Python\Lib\distutils\core.py", line 151, in setup
dist.run_commands()
File "~\Python\Lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
File "~\Python\Lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "~\Python\lib\site-packages\Cython\Distutils\build_ext.py", line 163,
in run
_build_ext.build_ext.run(self)
File "~\Python\Lib\distutils\command\build_ext.py", line 306, in run
force=self.force)
File "~\Python\Lib\distutils\ccompiler.py", line 1004, in new_compiler
return klass(None, dry_run, force)
File "~\Python\Lib\distutils\cygwinccompiler.py", line 309, in __init__
CygwinCCompiler.__init__ (self, verbose, dry_run, force)
File "~\Python\Lib\distutils\cygwinccompiler.py", line 152, in __init__
self.dll_libraries = get_msvcr()
File "~\Python\Lib\distutils\cygwinccompiler.py", line 82, in get_msvcr
raise ValueError("Unknown MS Compiler version %s " % msc_ver)
ValueError: Unknown MS Compiler version 1800
我检查并修改了cygwinccompiler.py
并查看并进行了以下更改:
def get_msvcr():
"""Include the appropriate MSVC runtime library if Python was built
with MSVC 7.0 or later.
"""
msc_pos = sys.version.find('MSC v.')
if msc_pos != -1:
msc_ver = sys.version[msc_pos+6:msc_pos+10]
if msc_ver == '1300':
# MSVC 7.0
return ['msvcr70']
elif msc_ver == '1310':
# MSVC 7.1
return ['msvcr71']
elif msc_ver == '1400':
# VS2005 / MSVC 8.0
return ['msvcr80']
elif msc_ver == '1500':
# VS2008 / MSVC 9.0
return ['msvcr90']
elif msc_ver == '1800': # I added this!!!
# VS2013 / MSVC 12.0 # I added this!!!
return ['msvcr120'] # I added this!!!
else:
raise ValueError("Unknown MS Compiler version %s " % msc_ver)
因为显然msc_ver == '1800'
(编译我的python的msvc版本)是2013 Visual Studio c编译器,并且从一些快速谷歌搜索中被称为msvcr120
。所以我安装了:
但是,现在,我收到以下cython DLL错误。
>python setup.py build_ext --compiler=mingw32
running build_ext
failed to import Cython: DLL load failed: A dynamic link library (DLL) initialization routine failed.
error: Cython does not appear to be installed
它在哪里寻找DLL的?它需要什么DLL?为什么在安装5+版本的MSVC可再发行程序包之后找不到任何DLL(我一直在努力让python找到msvc编译器,因为从使用python的第一天开始现在。真正的依赖地狱。无论如何......)
我的PYTHONHOME
环境变量已设置,但我没有PYTHONPATH
设置为任何内容。
有没有人知道如何解决这个问题?
做什么?
非常感谢你。
答案 0 :(得分:0)
因此,用户@martineau指出,在我的python安装中看起来有些出错。 Python 2.7.9是使用msvc_ver = 1500
或Visual Studio 2008构建的,所以我为什么要使用旧版本的Python(2.7.6)使用后来的编译器并不清楚。我尝试在我的另一台计算机上使用干净的2.7.9安装,并且能够成功编译,而无需修改cygwinccompiler.py
。
答案 1 :(得分:0)
去打开https://bugs.python.org/file40608/patch.diff
对您C:\Python27\Lib\distutils\cygwinccompiler.py
进行更改。
然后对你的cygwinccompiler.py
如果你想使用gcc:
修改您的%USERPROFILE%/pydistutils.cfg
以获得sg。像这样
[build]
compiler=mingw32
; compiler=cygwin
确保你的路径中有一个mingw gcc
答案 2 :(得分:0)
通过在cygwinccompiler.py(以及一个“else:”行)中注释出所有(两个)行并出现get_msvcr()来纠正类似问题。在此之后,我在Windows 10 / Python 3.5 / mingw32上成功编译并安装并使用了marisa-trie
pip:
pip install marisa-trie
Collecting marisa-trie
Using cached marisa-trie-0.7.2.tar.gz
Installing collected packages: marisa-trie
Running setup.py install for marisa-trie ... done
Successfully installed marisa-trie-0.7.2