python visual-studio cygwin mingw distutils

python - ValueError: Desconocido MS Compiler versión 1900



visual-studio cygwin (6)

¡Acabo de hacer los siguientes cambios y funcionó de maravilla!

Edite el archivo distutils.cfg presente en ubicaciones:

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

Modifique el contenido de distutils.cfg a:

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

PD: Probablemente cambiar solo en la segunda ubicación también debería hacerlo.

PPS Asegúrese de que gcc esté instalado y esté en PATH. Para mí, se instaló TDM-GCC-64

Estoy tratando de ejecutar algún código con Python 3.5 en Windows 10 con el uso de cygwin (mingw). Para ser precisos, estoy usando el módulo PyDSTool, donde llamo al integrador dopri. El problema es que tengo problemas con distutils no reconoce Microsoft Visual Studio 2015. ¿Hay alguna manera de evitar esto (sin volver a las versiones anteriores de Python, Windows, Visual Studio). El error completo se puede ver a continuación.

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 y Numpy / Distutils actualmente no son compatibles con Visual Studio 2015, Visual C ++ 14. Siguiendo los consejos extraídos del report errores de Python, pude parchear los archivos necesarios y construir con éxito la extensión usando una nueva instalación de Python 3.5 de Anaconda y Mingw64 con GCC 5.2.0 ejecutándose dentro de MSYS2 en Windows 7. No tengo instalado Visual Studio. La solución fue parchear un archivo distutils y dos archivos numpy / distutils (si corresponde). Estos parches se han enviado para su inclusión en futuras revisiones.

Puede aplicar los parches usted mismo para una solución rápida:

ACTUALIZAR

Tenga en cuenta que si bien los parches anteriores funcionaron para mí, no se aceptaron para su inclusión en el flujo ascendente. Los cambios que vinieron con VS 2015 son más complejos de lo que apreciaba.


Estaba ejecutando el mismo problema y descubrí que el problema estaba en el compilador mingw. Probé los parches sugeridos por @tharen pero no funcionó para mí.

Parece que el compilador favorito de Cygwin para Windows es Visual C ++, así que descargué solo las herramientas de compilación Visual C ++ de http://landinghub.visualstudio.com/visual-cpp-build-tools y luego funcionó bien.

Tenga en cuenta que deberá desinstalar mingw y todas las referencias que incluyó en su proyecto. En particular, tuve que eliminar un archivo distutils.cfg que había creado que tenía el siguiente código apuntando a mingw

[build] compiler = mingw32


Hice los siguientes cambios y funcionó para mí con las siguientes configuraciones.

  • Sistema operativo: Win 7 Prof. SP1 64 bit
  • CPython 3.6, 64 bits
  • Mingw 64 (x86_64-7.1.0-posix-seh-rt_v5-rev0)
  • Cython 0.25.2

Hice lo siguiente

  1. Agregue mingw en la variable PATH ( C:/mingw-w64/x86_64-7.1.0-posix-seh-rt_v5-rev0/mingw64/bin para mí)
  2. Prueba abriendo la línea de comando y el comando gcc funciona (no tengo otros compiladores)
  3. Cree distutils.cfg en C:/Python36/Lib/distutils
  4. Agregue líneas en ese archivo:

    [build] compiler = mingw32

  5. Aplicando manualmente este parche

  6. Descargar manualmente el archivo vcruntime140.dll y colocarlo en C:/Python36/libs

Los detalles en el link me ayudaron a resolver esto como un encanto.

Acabo de comentar get_msvcr() en cygwinccompiler.py.

(recuerde comentar el else también)


Si alguien todavía tiene este problema, me encontré con él mientras instalaba yowsup y python-axolotl, esto es lo que hice para resolverlo:

1- Aplique el parche de Tharen en el archivo python cygwinccompiler.py (ubicado en la carpeta de instalación de python) https://bugs.python.org/file40608/patch.diff

2-Con mingw, instale pexports, abra una terminal en modo administrador y escriba:

mingw-get install pexports

2-Ir a la carpeta de instalación de Python, en mi caso fue C: / Archivos de programa (x86) / Python36-32

todavía en la misma terminal que usamos para instalar pexports, después de navegar a la carpeta de instalación de Python ejecuta lo siguiente:

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

Luego regrese a la carpeta donde estaba instalando la biblioteca, o lo que sea que estaba haciendo antes, debería funcionar ahora.

por cierto, no te olvides de agregar

[build] compiler = mingw32

en el archivo distutils.

Fuente: esta publicación y report