web-dev-qa-db-fra.com

ValueError: version inconnue du compilateur MS 1900

J'essaie d'exécuter du code avec Python 3.5 sur Windows 10 avec l'utilisation de cygwin (mingw). Pour être précis, j'utilise le module PyDSTool, où j'appelle l'intégrateur dopri. Le problème est que je ne parviens pas à reconnaître Microsoft Visual Studio 2015. J'ai des problèmes avec distutils. Y a-t-il un moyen d'éviter cela (sans revenir aux anciennes versions de Python, Windows, Visual Studio). L'erreur complète peut être vue ci-dessous.

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

J'ai apporté les modifications suivantes et cela a fonctionné pour moi avec les configurations suivantes.

  • Système d'exploitation: 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

J'ai fait ce qui suit

  1. Ajouter mingw dans la variable PATH (C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin pour moi)
  2. Testez en ouvrant la ligne de commande et la commande gcc fonctionne (je n'ai pas d'autre compilateur)
  3. Créer distutils.cfg dans C:\Python36\Lib\distutils
  4. Ajouter des lignes dans ce fichier:

    [build]
    compiler = mingw32
    
  5. Appliquer manuellement ce patch

  6. Télécharger manuellement le fichier vcruntime140.dll et le mettre dans C:\Python36\libs
10

Distutils et Numpy/Distutils ne prennent actuellement pas en charge Visual Studio 2015, Visual C++ 14. Suite aux astuces tirées du bogue Python report , j'ai été en mesure de corriger les fichiers nécessaires et de construire l'extension avec une nouvelle installation de Python 3.5 d’Anaconda et Mingw64 avec GCC 5.2.0 s’exécutant dans MSYS2 sous Windows 7. Visual Studio n’est pas installé. La solution consistait à patcher un fichier distutils et deux fichiers numpy/distutils (le cas échéant). Ces correctifs ont été soumis pour inclusion dans les futures révisions.

Vous pouvez appliquer les correctifs vous-même pour une solution rapide:

METTRE &AGRAVE; JOUR

Veuillez noter que, bien que les correctifs ci-dessus aient fonctionné pour moi, leur inclusion en amont n’a pas été acceptée. Les changements apportés par VS 2015 sont plus complexes que je ne l’aurais cru.

10
tharen

Je courais sur le même problème et compris que le problème venait du compilateur Mingw. J'ai essayé les patchs suggérés par @tharen mais cela n'a pas fonctionné pour moi.

Il semble que le compilateur préféré de cygwin pour windows soit Visual C++. Je n'ai donc téléchargé que les outils de construction Visual C++ à partir de http://landinghub.visualstudio.com/visual-cpp-build-tools .__, puis cela a fonctionné. bien.

Notez que vous devrez désinstaller mingw et toutes les références que vous avez incluses dans votre projet. En particulier, je devais supprimer un fichier distutils.cfg que j'avais créé et qui contenait le code suivant pointant vers mingw

[build]
compiler = mingw32
6
kosnik

Si quelqu'un a toujours ce problème, je viens de le rencontrer lors de l'installation de yowsup et de python-axolotl, voici ce que j'ai fait pour le résoudre:

1- Appliquez le correctif de Tharen dans le fichier python cygwinccompiler.py (situé dans votre dossier d'installation de python) https://bugs.python.org/file40608/patch.diff

2-Avec mingw, installez pexports, ouvrez un terminal en mode administrateur et tapez:

mingw-get install pexports

2-Allez dans le dossier d’installation de python, dans mon cas c’était C:\Program Files (x86)\Python36-32

toujours dans le même terminal que nous avions l'habitude d'installer pexports, après avoir accédé au dossier d'installation de python, exécutez ce qui suit:

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

Ensuite, retournez au dossier dans lequel vous installiez la bibliothèque, ou quoi que vous fassiez auparavant, cela devrait fonctionner maintenant.

d'ailleurs, ne pas oublier d'ajouter 

[build]
compiler = mingw32 

dans le fichier distutils.

Source: cet article et https://bugs.python.org/issue25251

6
Bryan Hernandez

Je viens de faire les modifications suivantes et cela a fonctionné comme un charme! 

Editez le fichier distutils.cfg présent aux endroits suivants: 

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

Modifiez le contenu de distutils.cfg pour:

[build]
compiler=g++

[build_ext]           
compiler=g++

P.S. Changer probablement uniquement au 2ème emplacement devrait également faire.

P.P.S Assurez-vous que gcc est installé et se trouve dans PATH. Pour moi, le TDM-GCC-64 a été installé

1
rahulkmishra

Les détails dans link m'ont aidé à résoudre cela comme un charme.

Je viens de commenter get_msvcr() dans cygwinccompiler.py. 

(n'oubliez pas de commenter la else également)

0
harikris