我正在尝试使用cygwin(mingw)在Windows 10上使用Python 3.5运行一些代码。确切地说,我使用的是PyDSTool模块,我称之为dopri积分器。问题是,我在distutils
无法识别Microsoft Visual Studio 2015时遇到问题。有没有办法避免这种情况(不需要回到旧版本的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
答案 0 :(得分:12)
我做了以下更改,并通过以下配置为我工作。
我做了以下
C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin
对我来说)gcc
进行测试(我没有其他编译器)distutils.cfg
C:\Python36\Lib\distutils
在该文件中添加行:
[build]
compiler = mingw32
手动应用this patch
vcruntime140.dll
并将其放入C:\Python36\libs
答案 1 :(得分:10)
Distutils和Numpy / Distutils目前不支持Visual Studio 2015,Visual C ++ 14.根据Python错误report提取的提示,我能够修补必要的文件并使用新的成功构建扩展从Anaconda和Mingw64安装Python 3.5,在Windows 7上的MSYS2中运行GCC 5.2.0。我没有安装Visual Studio。解决方案是修补一个distutils文件和两个numpy / distutils文件(如果适用)。这些补丁已提交包含在未来的修订版中。
您可以自行应用这些补丁以进行快速修复:
<强>更新强>
请注意,虽然上面的补丁对我有用,但不允许包含在上游。 VS 2015带来的变化比我赞赏的更复杂。
答案 2 :(得分:7)
如果有人还有这个问题,我只是在安装yowsup和python-axolotl时碰到它,这就是我解决它的方法:
1-将来自Tharen的补丁应用到python cygwinccompiler.py文件(位于python安装文件夹中)https://bugs.python.org/file40608/patch.diff
2 - 使用mingw,安装pexports,以管理员模式打开终端并输入:
mingw-get install pexports
2 - 转到python安装文件夹,在我的例子中它是C:\ Program Files(x86)\ Python36-32
仍然在我们用于安装pexports的同一终端中,导航到python安装文件夹后运行以下命令:
pexports vcruntime140.dll >libs\vcruntime140.def
dlltool -dllname vcruntime140.dll --def libs\vcruntime140.def --output-lib libs\libvcruntime140.a
然后返回到您正在安装库的文件夹,或者之前正在执行的任何操作,它现在应该可以正常工作。
不过,别忘了添加[build]
compiler = mingw32
答案 3 :(得分:6)
我遇到了同样的问题并且发现问题出在mingw编译器上。我尝试了@tharen建议的补丁,但它对我不起作用。
似乎cygwin最喜欢的windows编译器是visual c ++所以我只从http://landinghub.visualstudio.com/visual-cpp-build-tools下载了visual c ++构建工具 然后它工作正常。
请注意,您需要卸载mingw以及项目中包含的对它的所有引用。特别是我不得不删除我创建的distutils.cfg文件,其中包含以下代码指向mingw
[build]
compiler = mingw32
答案 4 :(得分:1)
我只是让他跟随变化,它就像一个魅力!
编辑文件distutils.cfg存在于位置:
将distutils.cfg的内容修改为:
[build]
compiler=g++
[build_ext]
compiler=g++
P.S。也可能只在第二个位置进行更改。
P.P.S确保安装了gcc并且处于PATH状态。对我来说,安装了TDM-GCC-64
答案 5 :(得分:1)