wake-up-neo.com

ValueError: Unbekannte MS Compiler-Version 1900

Ich versuche, etwas Code mit Python 3.5 unter Windows 10 unter Verwendung von cygwin (mingw) auszuführen. Um genau zu sein, verwende ich das PyDSTool-Modul, in dem ich den Dopri-Integrator nenne. Das Problem ist, ich habe Probleme mit distutils, das Microsoft Visual Studio 2015 nicht erkennt. Gibt es eine Möglichkeit, dies zu vermeiden (ohne auf ältere Versionen von Python, Windows, Visual Studio zurückzugreifen). Der vollständige Fehler ist unten zu sehen.

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 
13
blaz

Ich habe die folgenden Änderungen vorgenommen und es hat bei den folgenden Konfigurationen für mich funktioniert.

  • Betriebssystem: Win 7 Prof. SP1 64 Bit
  • CPython 3.6, 64 Bit
  • Mingw 64 (x86_64-7.1.0-posix-seh-rt_v5-rev0)
  • Cython 0.25.2

Ich habe folgendes getan

  1. Fügen Sie mingw in die PATH-Variable ein (C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin für mich).
  2. Test durch Öffnen der Befehlszeile und Befehl gcc funktioniert (ich habe keine anderen Compiler)
  3. Erstellen Sie distutils.cfg in C:\Python36\Lib\distutils
  4. Zeilen in dieser Datei hinzufügen:

    [build]
    compiler = mingw32
    
  5. diesen Patch manuell anwenden

  6. Manuelles Herunterladen der Datei vcruntime140.dll und Einfügen in C:\Python36\libs
10

Distutils und Numpy/Distutils bieten derzeit keine Unterstützung für Visual Studio 2015, Visual C++ 14. Mit den folgenden Tipps aus dem Python-Fehler report konnte ich die erforderlichen Dateien patchen und mit einer neuen Installation von Python erfolgreich Erweiterungen erstellen 3.5 von Anaconda und Mingw64 mit GCC 5.2.0 in MSYS2 unter Windows 7 ausgeführt. Ich habe kein Visual Studio installiert. Die Lösung bestand darin, eine distutils-Datei und zwei numpy/distutils-Dateien zu patchen (falls zutreffend). Diese Patches wurden zur Aufnahme in zukünftige Versionen eingereicht.

Sie können die Patches für eine schnelle Lösung selbst anwenden:

UPDATE

Bitte beachten Sie, dass die obigen Patches für mich funktionierten, jedoch nicht für die Aufnahme in Upstream akzeptiert wurden. Die Änderungen, die mit VS 2015 einhergingen, sind komplexer als ich schätzte.

10
tharen

Ich bin auf das gleiche Problem gestoßen und habe herausgefunden, dass das Problem beim mingw-Compiler lag. Ich habe die von @tharen vorgeschlagenen Patches ausprobiert, aber es funktionierte nicht für mich.

Cygwins beliebtester Compiler für Windows scheint das Visual C++ zu sein. Ich habe also nur die Visual C++ Build-Tools von http://landinghub.visualstudio.com/visual-cpp-build-tools Heruntergeladen. Dann hat es funktioniert fein.

Beachten Sie, dass Sie mingw und alle in Ihrem Projekt enthaltenen Verweise darauf deinstallieren müssen. Insbesondere musste ich eine distutils.cfg -Datei löschen, die ich erstellt hatte, wobei der folgende Code auf mingw zeigte

[build]
compiler = mingw32
6
kosnik

Wenn jemand dieses Problem immer noch hat, bin ich bei der Installation von yowsup und python-axolotl nur darauf gestoßen. Das habe ich getan, um es zu lösen:

1- Übernehmen Sie den Patch von Tharen in der Datei python cygwinccompiler.py (in Ihrem Python-Installationsordner) https://bugs.python.org/file40608/patch.diff

2-Installieren Sie mit mingw pexports, öffnen Sie ein Terminal im Administratormodus und geben Sie Folgendes ein:

mingw-get install pexports

2-Wechseln Sie in den Python-Installationsordner. In meinem Fall war dies C:\Programme (x86)\Python36-32

wir befanden uns noch im selben Terminal, um pexports zu installieren. Nachdem Sie zum Python-Installationsordner navigiert waren, führen Sie Folgendes aus:

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

Gehen Sie dann zurück in den Ordner, in dem Sie die Bibliothek installiert haben, oder was auch immer Sie zuvor getan haben. Jetzt sollte es funktionieren.

Übrigens, vergessen Sie nicht hinzuzufügen 

[build]
compiler = mingw32 

in der distutils-Datei.

Quelle: eigener Beitrag und https://bugs.python.org/issue25251

6
Bryan Hernandez

Ich habe gerade gemacht, dass er den Änderungen folgte und es funktionierte wie ein Zauber! 

Bearbeiten Sie die Datei distutils.cfg an Orten: 

  1. C:\Benutzer \\ AppData\Local\Continuum\Anaconda3\Lib\distutils \
  2. C:\Benutzer \\ AppData\Local\Continuum\Anaconda3\pkgs\libpython-2.0-py36_0\Lib\distutils

Ändern Sie den Inhalt von distutils.cfg in:

[build]
compiler=g++

[build_ext]           
compiler=g++

P.S. Wahrscheinlich sollte auch nur der 2. Standort geändert werden.

P. P. Stellen Sie sicher, dass gcc installiert ist und sich in PATH befindet. Für mich wurde TDM-GCC-64 installiert

1
rahulkmishra

Details in link haben mir geholfen, das wie ein Zauber zu lösen.

Kommentiert get_msvcr() in cygwinccompiler.py. 

(Denken Sie auch daran, das else zu kommentieren)

0
harikris