ValueError: Неизвестный компилятор MS версии 1900
Я пытаюсь запустить код с Python 3.5 в Windows 10 с использованием cygwin (mingw). Чтобы быть точным, я использую модуль PyDSTool, где я называю интегратор допри. Проблема в том, что у меня возникают проблемы с distutils
, не признающим Microsoft Visual Studio 2015. Есть ли способ избежать этого (не возвращаясь к более старым версиям Python, Windows, Visual Studio). Полную ошибку можно увидеть ниже.
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
Ответы
Ответ 1
У Distutils и Numpy/Distutils в настоящее время нет поддержки Visual Studio 2015, Visual С++ 14. Следуя советам, полученным из ошибки Python report, Я смог исправить необходимые файлы и успешно создать расширение с помощью новой установки Python 3.5 из Anaconda и Mingw64 с GCC 5.2.0, работающей в MSYS2 в Windows 7. У меня нет установленной Visual Studio. Решение заключалось в том, чтобы исправить один файл distutils и два файла numpy/distutils (если это применимо). Эти исправления были представлены для включения в будущие версии.
Вы можете сами применить исправления для быстрого исправления:
UPDATE
Обратите внимание, что в то время как исправления выше работали для меня, он не принимался для включения в восходящий поток. Изменения, которые произошли с VS 2015, более сложны, чем я оценил.
Ответ 2
Я сделал следующие изменения, и это сработало для меня со следующими конфигурациями.
- ОС: Win 7 Prof. SP1 64 бит
- CPython 3.6, 64 бит
- Mingw 64 (x86_64-7.1.0-posix-seh-rt_v5-rev0)
- Cython 0.25.2
Я сделал следующее
- Добавьте mingw в переменную PATH (
C:\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin
для меня)
- Тестирование путем открытия командной строки и команды
gcc
работает (у меня нет других компиляторов)
- Создать
distutils.cfg
в C:\Python36\Lib\distutils
-
Добавьте строки в этот файл:
[build]
compiler = mingw32
-
Вручную применить этот патч
- Вручную загружая файл
vcruntime140.dll
и помещая его в C:\Python36\libs
Ответ 3
Я работал по одной и той же проблеме и выяснил, что проблема связана с компилятором mingw. Я попробовал заплатки, предложенные @tharen, но это не сработало для меня.
Кажется, что любимый компилятор cygwin для windows - это визуальный С++, поэтому я загрузил только визуальные инструменты сборки С++ из http://landinghub.visualstudio.com/visual-cpp-build-tools
и тогда он работал нормально.
Обратите внимание, что вам нужно будет удалить mingw и все ссылки на него, которые вы включили в свой проект. В частности, мне пришлось удалить файл distutils.cfg, который я создал, который имел следующий код, указывающий на mingw
[build]
compiler = mingw32
Ответ 4
Если у кого-то еще есть эта проблема, я просто столкнулся с ней при установке yowsup и python-axolotl, вот что я сделал для ее решения:
1- Применить патч от Tharen в файл python cygwinccompiler.py(расположенный в папке установки python) https://bugs.python.org/file40608/patch.diff p >
2 - С помощью mingw установите pexports, откройте терминал в режиме администратора и введите:
mingw-get install pexports
2-Перейдите в папку установки python, в моем случае это C:\Program Files (x86)\Python36-32
все еще в том же терминале, который мы использовали для установки pexports, после перехода в папку установки python выполните следующее:
pexports vcruntime140.dll >libs\vcruntime140.def
dlltool -dllname vcruntime140.dll --def libs\vcruntime140.def --output-lib libs\libvcruntime140.a
Затем вернитесь в папку, в которой вы устанавливали библиотеку, или что бы вы ни делали раньше, теперь она должна работать.
btw, не забудьте добавить
[build]
compiler = mingw32
в файле distutils.
Источник: этот собственный пост и https://bugs.python.org/issue25251
Ответ 5
Я только что сделал ему следующие изменения, и это сработало как шарм!
Отредактируйте файл distutils.cfg в следующих местах:
- C:\Users\\AppData\Local\Continuum\Anaconda3\Lib\Distutils\
- C:\Users\\AppData\Local\Continuum\Anaconda3\pkgs\libpython-2,0-py36_0\Lib\Distutils
Измените содержимое distutils.cfg на:
[build]
compiler=g++
[build_ext]
compiler=g++
P.S. Вероятно, изменение только во 2-м месте также должно выполняться.
P.P.S Убедитесь, что gcc установлен и находится в PATH. Для меня был установлен TDM-GCC-64
Ответ 6
Детали в помогли мне решить это как шарм.
Просто прокомментировал get_msvcr()
в cygwinccompiler.py.
(не забудьте также прокомментировать else
)