如何在Windows 10上使用Anaconda 64位安装Cython?

6
在标题中已经提到,有没有一种逐步安装Cython并在Windows 10上的Anaconda 64位上运行它的方法?我搜索了几个小时,有很多教程...但对于我无法在Windows 10上完成的任务来说,这些教程都不管用。我尝试遵循所有这些方法,但目前都是徒劳无功的:https://www.ibm.com/developerworks/community/blogs/jfp/entry/Installing_Cython_On_Anaconda_On_Windows?lang=enhttps://github.com/cython/cython/wiki/CythonExtensionsOnWindows。Conda安装已经完成,但问题是将编译器链接到Python上,使用Windows SDK和特别是SDK命令提示符的所有方法都已过时,在Visual Studio 2015上这个提示符不存在,而setenv函数也不再存在,因此无法执行“setenv \x64 \release”,没有这一步骤,代码就无法工作。使用MinGW的其他方法返回一个错误:
C:\MinGW\bin\gcc.exe -shared -s build\temp.win-amd64-3.6\Release\hello.o build\temp.win-amd64-3.6\Release\hello.cp36-win_amd64.def -LC:\Users\Utilisateur\Anaconda3\libs -LC:\Users\Utilisateur\Anaconda3\PCbuild\amd64 -lpython36 -lmsvcr140 -o C:\Users\Utilisateur\Documents\hello.cp36-win_amd64.pyd
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lmsvcr140
collect2.exe: erreur : ld a retourné 1 code d'état d'exécution
error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1

我不知道接下来该怎么办。

请帮帮我。

一位绝望的学生

3个回答

5

我在使用Python 3.6.5和MSC v.1900 64位的Anaconda上解决了Windows 10上的问题(通过运行得到的信息)。

import sys
sys.version

这里是方法:

1:在Anaconda提示符中运行conda install -c anaconda cython来安装Cython。

2:进入C:\Users\Utilisateur\Anaconda3\Lib\distutils或者你的distutils库所在的地方,使用记事本创建一个distutils.cfg文件,并输入以下内容:

[build]           
compiler=mingw32 

在其中

3: 获取 Mingw-w64 的最新版本(不仅支持32位的 Mingw)https://sourceforge.net/projects/mingw-w64/files/ 并安装它

4: 将 C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin 添加到您的路径中,以下是如何在 Windows 10 上进行操作的链接:https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/

5:通过运行 conda install -c anaconda libpythonconda install -c msys2 m2w64-toolchain 在您的anaconda环境中安装libpython和m2w64-toolchain,以解决这些网页 https://python-at-risoe.pages.windenergy.dtu.dk/compiling-on-windows/common_errors.html 中对应的错误。

6:尝试在此页面 http://docs.cython.org/en/latest/src/quickstart/build.html 上进行第一或第二次测试,在第5步之后,两者都适用于我。

希望这可以帮助到您!


0

你确定使用MinGW-w64没问题吗?在Cython Wiki中,他们说不建议使用:

** 不要使用MinGW-w64。正如你所注意到的,Python的AMD64版本中省略了MinGW导入库(例如libpython27.a)。这是故意的。不要尝试使用dlltool制作一个。目前还没有官方的MinGW-w64发布,它仍处于“beta”阶段,被认为是不稳定的,尽管你可以从TDM-GCC等地方获得64位版本。还存在mingw运行时与MSVC运行时冲突的问题;这可能发生在你不希望的地方,比如g++或gfortran的运行时库内部。为了保险起见,现在还是避免使用MinGW-w64。

** 那些有Linux或Apple MacOSX经验的人可能会选择GCC(MinGW)作为Windows上的C/C++编译器。请注意,GCC不是Windows平台的C编译器。为了与Windows上的大多数库和应用程序二进制兼容,请使用Microsoft的编译器。这与在Linux上选择GCC作为首选编译器没有区别。Microsoft的Windows平台C/C++编译器是免费的。

** 对于 C++ ,请注意,GCC(Mingw)和 MSVC 使用不同的 C++ 运行时。 如果您在扩展中使用 C++ ,则 C++ 运行时也必须与 Python 的 C 运行时兼容。出于这个原因,即使在 32 位 x86 平台上,也始终使用 Microsoft 的 C++ 编译器。 在像 Windows 这样 C++ 普及的平台上(如 COM 和 ActiveX),这非常重要。 如果您使用 GCC 作为 C++ 编译器,则您的扩展将不会与其他 C++ 库或 COM 二进制兼容,并且不兼容 Python 的 C 运行时,GCC 和 MSVC 之间的异常处理差异可能会导致应用程序崩溃。


1
这超出了我的知识范围,抱歉。我只能说上面提供的解决方案对我有效。自去年10月以来,我已经在至少3台不同的计算机上使用它。MinGW-w64是我找到的唯一一个可以与Anaconda 64位一起使用Cython的编译器,但也许存在其他与Cython兼容的编译器。至于C++部分,自去年10月以来,我只创建了一个C库,所以我不知道它是否适用于C++库。 - pdzx

0

虽然不是针对Windows 10的答案,而是针对Windows 7的。我想告诉大家我是如何做到的。

  1. 我首先使用Anaconda(使用:Anaconda 2019.10 for Windows Installer - Python 3.7版本64位)。它是使用Microsoft编译器构建的,而不是MinGW(在Python sys.version中报告:MS v.1915 64位(AMD64))。 Anaconda安装了Cython,但没有安装MSC编译器。 所以尝试在Jupyter中使用cython示例:
    %load_ext Cython

    %%cython
    cdef int a = 0
    for i in range(10):
        a += i
    print(a)

现在出现了一个错误:无法找到vcvarsall.bat

  1. Python 3.7的Cython需要Visual C++ 2015(14.0)。我无法从Microsoft下载此版本,因此我下载了Visual Studio安装程序:Visual Build Tools 2019。在安装程序中,我在“工作负载”中选择了C++构建工具。然后在右侧:

取消了以下选项:

  • MSVC v142 - VS 2019 C++ x64/x86构建工具
  • C++ CMake工具适用于Windows
  • C++ AddressSanitizer(实验性)

我选择了:

  • Windows 10 SDK
  • 测试工具核心功能-构建工具
  • v142构建工具的C++/CLI支持
  • MSVC V140-VS 2015 C++构建工具

安装完成后,再次运行上面的示例时,我遇到了链接器错误:LINK:fatal error LNK1158

3) 在目录的某个子目录中 C:\Program files (x86)\Windows Kits 我找到了文件:rc.exercdll.dll
我将它们复制到了我的 MSVC 的 bin 目录中: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

这样做使链接器错误消失了,cython 示例也可以工作了! 我还没有尝试其他任何东西,但我希望这就是需要做的全部。 希望这能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接