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
J'ai apporté les modifications suivantes et cela a fonctionné pour moi avec les configurations suivantes.
J'ai fait ce qui suit
C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin
pour moi)gcc
fonctionne (je n'ai pas d'autre compilateur)distutils.cfg
dans C:\Python36\Lib\distutils
Ajouter des lignes dans ce fichier:
[build]
compiler = mingw32
Appliquer manuellement ce patch
vcruntime140.dll
et le mettre dans C:\Python36\libs
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.
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
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
Je viens de faire les modifications suivantes et cela a fonctionné comme un charme!
Editez le fichier distutils.cfg présent aux endroits suivants:
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é
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)