2015-12-07 6 views
11

Ich versuche, Code mit Python 3.5 unter Windows 10 mit der Verwendung von Cygwin (Mingw) auszuführen. Um genau zu sein benutze ich das PyDSTool-Modul, wo ich den Dopri-Integrator nenne. Das Problem ist, ich habe Probleme mit distutils nicht erkennen Microsoft Visual Studio 2015. Gibt es eine Möglichkeit, dies zu vermeiden (ohne zu älteren Versionen von Python, Windows, Visual Studio). Der vollständige Fehler ist unten zu sehen.ValueError: Unbekannt MS Compiler-Version 1900

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 

Antwort

8

Distutils und Numpy/Distutils haben derzeit keine Unterstützung für Visual Studio 2015, Visual C++ 14. Nach Tipps aus dem Python Bug gezogen report, ich war in der Lage, die notwendigen Dateien zu patchen und erfolgreich aufzubauen Erweiterung eines neue Verwendung Installation von Python 3.5 von Anaconda und Mingw64 mit GCC 5.2.0 in MSYS2 unter Windows 7. Ich habe kein Visual Studio installiert. Die Lösung bestand darin, eine distutils-Datei und zwei numpy/distutils-Dateien zu patchen (falls dies zutrifft). Diese Patches wurden zur Aufnahme in zukünftige Versionen eingereicht.

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

UPDATE

Bitte beachten Sie, dass während die oben genannten Patches arbeitete für mich wurde es nicht für die Aufnahme in Upstream akzeptiert. Die Änderungen, die mit VS 2015 einhergingen, sind komplexer, als ich schätzte.

6

Ich war auf dem gleichen Problem ausgeführt und herausgefunden, dass das Problem mit dem Mingw Compiler war. Ich habe die Patches von @tharen ausprobiert, aber es hat nicht funktioniert.

Es scheint, dass Cygwins Lieblings-Compiler für Windows ist das Visual C++, also habe ich nur die visuellen C++ Build-Tools von http://landinghub.visualstudio.com/visual-cpp-build-tools heruntergeladen und dann hat es gut funktioniert.

Beachten Sie, dass Sie mingw und alle darauf enthaltenen Referenzen, die Sie in Ihr Projekt aufgenommen haben, deinstallieren müssen. Insbesondere hatte ich eine distutils.cfg Datei zu löschen, die ich geschaffen habe, die zeigen den folgenden Code hatte

[build] 
compiler = mingw32 
1

mingw Ich machte er nur folgende Änderungen und es funktionierte wie ein Zauber!

Datei bearbeiten distutils.cfg in Orten:

  1. C: \ Users \\ AppData \ Local \ Continuum \ Anaconda3 \ Lib \ distutils \
  2. C: \ Users \\ AppData \ Local \ Continuum \ Anaconda3 \ pkgs \ libpython-2,0-py36_0 \ Lib \ distutils

Modify-Gehalt von distutils.cfg zu:

[build] 
compiler=g++ 

[build_ext]   
compiler=g++ 

P.S. Vermutlich sollte sich nur der 2. Standort ändern.

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

7

Ich machte die folgenden Änderungen und es funktionierte für mich mit den folgenden Konfigurationen.

  • OS: 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 die folgende

  1. Add mingw in der PATH-variablen (C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin für mich)
  2. -Test von gcc Arbeiten Befehlszeile und Befehlsöffnungs (Ich habe keine anderen Compilern)
  3. erstellen distutils.cfg in C:\Python36\Lib\distutils
  4. Zeilen hinzufügen in dieser Datei:

    [build] 
    compiler = mingw32 
    
  5. Manuelles Anlegen this patch

  6. Manuelles Herunterladen der Datei vcruntime140.dll und setzen Sie es in C:\Python36\libs
+0

Evrything hat gut funktioniert auf diese Weise, bis ich, dass MingW w64 gefunden definiert "hypot = hypot" und in pyconfig.h wird definiert als "hypot = _hypot". Daher werden in einigen Fällen Compilerfehler generiert. Der Fix ist: 1) Bearbeiten Sie pyconfig.h entweder vorübergehend, indem Sie die Zeile "#define hypot_hypot" auf "#define hypot hypot" setzen, und führen Sie dann den Cython-Prozess aus. 2) Fügen Sie in setup.py einen neuen Parameter zu "ext = Extension (" ... ", .., .., extra_compile_args = ['...', '-D_hypot = hypot', '..'] hinzu.) "... Dieses Problem tritt besonders dann auf, wenn eine C++ - Kompilierung mit dem Cython-Code erfolgt. –

+0

Ich kann bestätigen, dass dies auf Windows 10 mit Anaconda 3 funktioniert –

+1

Wenn Sie es nicht funktionieren können geben Compiler = mingw32.exe ein Versuch auch - es funktionierte für mich, während Compiler = mingw32 nicht. – plunntic

4

Wenn jemand noch dieses Problem hat, ich in sie gerade lief während yowsup und Python-Axolotl installieren, ist es das, was ich sie lösen tat:

1- den Patch von Tharen in die Python cygwinccompiler Bewerben Py-Datei (die sich in Ihrem python-Installationsordner) https://bugs.python.org/file40608/patch.diff

2-Mit mingw, pexports installieren, öffnen Sie ein Terminal im Administratormodus und Typ:

mingw-get install pexports 

2-gehen Sie auf die python instal l Ordner, in meinem Fall war es C: \ Program Files (x86) \ Python36-32

noch im selben Terminal wir pexports installieren verwendet, nachdem sie auf die Python-Navigation Installationsordner laufen die folgenden:

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

Dann gehen Sie zurück zu dem Ordner, in dem Sie die Bibliothek installiert haben, oder was auch immer Sie zuvor getan haben, sollte es jetzt funktionieren.

btw, vergessen Sie nicht,

[build] 
compiler = mingw32 

in der distutils Datei hinzuzufügen.

Quelle: diese eigenen Beitrag und https://bugs.python.org/issue25251

+0

' pexports' ist 'gendef' in mingw-w64-i686-tools oder mingw-w64-x86_64-tools unter msys2. – Mithril

0

Einzelheiten in link half mir dies wie ein Zauber zu lösen.

Gerade kommentiert get_msvcr() in cygwinccompiler.py.

(Sie erinnern sich die else auch Kommentar)

Verwandte Themen