ValueError:未知的MS编译器版本1900

我正在尝试使用cygwin(mingw)在Windows 10上运行Python 3.5的一些代码。 准确地说,我正在使用PyDSTool模块,我称之为dopri集成器。 问题是,我遇到了不能识别Microsoft Visual Studio 2015的distutils问题。有没有办法避免这种情况(没有回到老版本的Python,Windows,Visual Studio)。 完整的错误可以在下面看到。

 ValueError Traceback (most recent call last) <ipython-input-16-bfeb915bfd7b> in <module>() 60 print("\n") 61 ---> 62 testODE = Dopri_ODEsystem(DSargs) 63 64 print('Integrating...') C:\Anaconda3\lib\site-packages\PyDSTool\Generator\Dopri_ODEsystem.py in __init__(self, kw) 371 print("stages using the makeLibSource and compileLib methods.") 372 else: --> 373 self.makeLib() 374 375 @property C:\Anaconda3\lib\site-packages\PyDSTool\Generator\mixins.py in makeLib(self, libsources, libdirs, include) 98 self.forceLibRefresh() 99 self.makeLibSource(include) --> 100 self.compileLib(libsources, libdirs) 101 102 @property C:\Anaconda3\lib\site-packages\PyDSTool\Generator\mixins.py in compileLib(self, libsources, libdirs) 78 precompiled libraries.""" 79 ---> 80 self._builder.build(libsources, libdirs, self._compiler) 81 82 def forceLibRefresh(self): C:\Anaconda3\lib\site-packages\PyDSTool\Generator\mixins.py in build(self, libsources, libdirs, compiler) 187 script_args=script_args, 188 ext_modules=[extmod], --> 189 py_modules=[self.modname]) 190 191 def save_vfield(self, code, fname=None): C:\Anaconda3\lib\site-packages\numpy\distutils\core.py in setup(**attr) 167 new_attr['distclass'] = NumpyDistribution 168 --> 169 return old_setup(**new_attr) 170 171 def _check_append_library(libraries, item): C:\Anaconda3\lib\distutils\core.py in setup(**attrs) 146 if ok: 147 try: --> 148 dist.run_commands() 149 except KeyboardInterrupt: 150 raise SystemExit("interrupted") C:\Anaconda3\lib\distutils\dist.py in run_commands(self) 953 """ 954 for cmd in self.commands: --> 955 self.run_command(cmd) 956 957 # -- Methods that operate on its Commands -------------------------- C:\Anaconda3\lib\distutils\dist.py in run_command(self, command) 972 cmd_obj = self.get_command_obj(command) 973 cmd_obj.ensure_finalized() --> 974 cmd_obj.run() 975 self.have_run[command] = 1 976 C:\Anaconda3\lib\site-packages\numpy\distutils\command\build_ext.py in run(self) 115 verbose=self.verbose, 116 dry_run=self.dry_run, --> 117 force=self.force) 118 self.compiler.customize(self.distribution) 119 self.compiler.customize_cmd(self) C:\Anaconda3\lib\site-packages\numpy\distutils\ccompiler.py in new_compiler(plat, compiler, verbose, dry_run, force) 594 raise DistutilsModuleError(("can't compile C/C++ code: unable to find class '%s' " + 595 "in module '%s'") % (class_name, module_name)) --> 596 compiler = klass(None, dry_run, force) 597 log.debug('new_compiler returns %s' % (klass)) 598 return compiler C:\Anaconda3\lib\site-packages\numpy\distutils\mingw32ccompiler.py in __init__(self, verbose, dry_run, force) 56 57 distutils.cygwinccompiler.CygwinCCompiler.__init__ (self, verbose, ---> 58 dry_run, force) 59 60 # we need to support 3.2 which doesn't match the standard C:\Anaconda3\lib\distutils\cygwinccompiler.py in __init__(self, verbose, dry_run, force) 159 # Include the appropriate MSVC runtime library if Python was built 160 # with MSVC 7.0 or later. --> 161 self.dll_libraries = get_msvcr() 162 163 def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): C:\Anaconda3\lib\distutils\cygwinccompiler.py in get_msvcr() 88 # return ['vcruntime140'] 89 else: ---> 90 raise ValueError("Unknown MS Compiler version %s " % msc_ver) 91 92 ValueError: Unknown MS Compiler version 1900 

Distutils和Numpy / Distutils目前不支持Visual Studio 2015,Visual C ++ 14.从Python错误报告中得出的一些提示,我能够修补必要的文件,并使用Anaconda新安装的Python 3.5成功构build扩展,在Windows 7的MSYS2中运行GCC 5.2.0的Mingw64。我没有安装Visual Studio。 解决方法是修补一个distutils文件和两个numpy / distutils文件(如果适用)。 这些补丁已经提交给未来的版本。

您可以自行应用这些修补程序以进行快速修复:

  • distutils 补丁
  • numpy / distutils 补丁

UPDATE

请注意,虽然上面的补丁为我工作,但不被接受列入上游。 VS 2015所带来的变化比我所理解的要复杂得多。

我进行了以下更改,并使用以下configuration为我工作。

  • 操作系统:Win 7教授SP1 64位
  • CPython 3.6,64位
  • Mingw 64(x86_64-7.1.0-posix-seh-rt_v5-rev0)
  • Cython 0.25.2

我做了以下

  1. 在PATHvariables中添加mingw( C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin
  2. testing通过打开命令行和命令gcc工程(我没有其他编译器)
  3. C:\Python36\Lib\distutils创buildC:\Python36\Lib\distutils
  4. 在该文件中添加行:

     [build] compiler = mingw32 
  5. 手动应用此修补程序

  6. 手动下载文件vcruntime140.dll并将其放在C:\Python36\libs

我遇到了同样的问题,并发现问题出在了mingw编译器上。 我尝试了@tharenbuild议的补丁,但它对我没有任何作用。

看来cygwin最喜欢的windows编译器是visual c ++,所以我只下载了http://landinghub.visualstudio.com/visual-cpp-build-tools的visual c ++编译工具,然后工作正常。

请注意,您将需要卸载mingw以及您包含在项目中的所有对它的引用。 特别是我不得不删除一个我创build的distutils.cfg文件,它有以下代码指向mingw

 [build] compiler = mingw32 

如果有人仍然有这个问题,我只是在安装yowsup和python-axolotl时遇到它,这是我解决它的:

1-将来自Tharen的补丁应用到python cygwinccompiler.py文件(位于您的python安装文件夹) https://bugs.python.org/file40608/patch.diff

2 – 使用mingw,安装pexports,以pipe理员模式打开terminal并input:

 mingw-get install pexports 

2 – 进入python安装文件夹,在我的情况下是C:\ Program Files(x86)\ Python36-32

仍然在我们用来安装pexports的同一个terminal中,在导航到python安装文件夹后运行以下命令:

 pexports vcruntime140.dll >libs\vcruntime140.def dlltool -dllname vcruntime140.dll --def libs\vcruntime140.def --output-lib libs\libvcruntime140.a 

然后回到你安装图书馆的文件夹,或者你以前正在做的任何事情,它现在应该可以工作。

顺便说一句,不要忘记添加

 [build] compiler = mingw32 

在distutils文件中。

来源:这个自己的post和https://bugs.python.org/issue25251

我只是让他跟随变化,它像一个魅力工作!

编辑文件distutils.cfg出现在位置:

  1. C:\用户\\应用程序数据\本地\连续\ Anaconda3 \ LIB \的distutils \
  2. C:\用户\\应用程序数据\本地\连续\ Anaconda3 \ PKGS \ libpython-2.0-py36_0 \ LIB \的distutils

将distutils.cfg的内容修改为:

 [build] compiler=g++ [build_ext] compiler=g++ 

PS大概只有在第二位的变化也应该这样做。

PPS确保gcc已安装并处于PATH状态。 对于我来说,安装了TDM-GCC-64