Cython基本构建仍然失败

时间:2015-03-05 07:16:14

标签: python c

我正在使用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,这是成功的。我尝试使用

编译python .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。所以我安装了:

enter image description here

但是,现在,我收到以下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设置为任何内容。

有没有人知道如何解决这个问题?

做什么?

非常感谢你。

3 个答案:

答案 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/msg251758

去打开https://bugs.python.org/file40608/patch.diff 对您C:\Python27\Lib\distutils\cygwinccompiler.py进行更改。 然后对你的cygwinccompiler.py

进行https://github.com/philpraxis/pysctp/issues/16#issuecomment-118885607中描述的更改

如果你想使用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