2015-12-07 12 views
11

Windows 10 üzerinde Python 3.5 ile bazı kodları cygwin (mingw) kullanarak çalıştırmaya çalışıyorum. Kesin olmak için dopri entegratörü dediğim PyDSTool modülünü kullanıyorum. Sorun şu ki, Microsoft Visual Studio 2015'i tanımayan distutils ile sorun yaşıyorum. Bunu önlemek için bir yol var mı (Python, Windows, Visual Studio'nun eski sürümlerine geri dönmeden). Tam Hata görülebilir feryat.ValueError: Bilinmiyor MS Derleyici sürüm 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 

cevap

8

distutils ve Numpy/distutils şu anda Visual Studio 2015, Visual C Python hata report çekilen ++ 14. Aşağıdaki ipuçları için destek yok, ben gerekli dosyaları yama ve başarılı bir yeni kullanılarak uzantısı inşa başardı Windows 7'de MSYS2 içinde çalışan GCC 5.2.0 ile Anaconda ve Mingw64'ten Python 3.5 kurulumu. Visual Studio yüklü değil. Çözüm, bir distutils dosyasını ve iki numpy/distutils dosyasını (eğer bu geçerliyse) yamalamaktı. Bu yamalar gelecekteki revizyonlara dahil edilmek üzere sunulmuştur.

Sen hızlı bir düzeltme için yamaları kendiniz uygulayabilirsiniz:

GÜNCELLEME

lütfen unutmayın iken yukarıdaki yamalar Benim için çalıştı, yukarı akışa dahil edilmek kabul edilmedi. VS 2015 ile gelen değişiklikler takdir ettiğimden daha karmaşık.

6

Aynı sorun üzerinde çalışıyordum ve sorunun mingw derleyicisi ile olduğunu anladım. @tharen tarafından önerilen yamaları denedim ama benim için çalışmadı.

Windows için Cygwin'in favori derleyicisi görsel C++ gibi görünüyor, bu yüzden ben http://landinghub.visualstudio.com/visual-cpp-build-toolshttp://landinghub.visualstudio.com/visual-cpp-build-tools 'dan indirdikten sonra iyi çalıştı.

Mingw ve projenize dahil ettiğiniz tüm referansları kaldırmanız gerekeceğini unutmayın. Özellikle ben

[build] 
compiler = mingw32 
1

ben sadece onun şu değişiklikler yapmış MinGW işaret aşağıdaki kodu vardı ben yaratmıştı bir distutils.cfg dosyayı silmek zorunda kaldı ve bir cazibe gibi çalıştı! konumlarda bulunan

Düzenleme dosya distutils.cfg:

  1. C: \ Users AppData \ Local \ Continuum \ Anaconda3 \ Lib \\ \ distutils
  2. C \: \ Users AppData \ Local \ \\ Lib \ distutils \ Sürekli \ Anaconda3 \ pkgs \ libpython-2.0-py36_0
için distutils.cfg arasında

Değiştir içeriği:

[build] 
compiler=g++ 

[build_ext]   
compiler=g++ 

P.S. Muhtemelen sadece 2. yerde değişmek de yapmalıdır.

P.P.S Gcc'nin yüklü ve PATH'da olduğundan emin olun.Benim için TDM-GCC-64

7

'a yüklendi. Aşağıdaki değişiklikleri yaptım ve aşağıdaki yapılandırmalarda benim için çalıştı.

  • 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

yaptım PATH değişkeninde aşağıdaki

  1. Add mingw (Benim için 210)
  2. bu dosyada satırları ekleyin distutils.cfg
  3. C:\Python36\Lib\distutils içinde oluşturun (Ben başka derleyiciler var) komut satırı ve komut gcc eser açarak

  4. Testi:

    [build] 
    compiler = mingw32 
    
  5. Elle uygulayarak this patch

  6. Dosyayı vcruntime140.dll karşıdan yükleme ve yükleme C:\Python36\libs
+0

Evrything ince bu şekilde çalıştı. Bu nedenle, bazı durumlarda derleyici hataları oluşturuyor. Düzeltme şöyledir: 1) pyconfig.h dosyasını "#define hypot _hypot" satırını "#define hypot hypot" ile geçici olarak düzenleyin ve sonra cython işlemini çalıştırın. 2) setup.py dosyasında "ext = Extension (" ... ", .., .., extra_compile_args = ['...', '-D_hypot = hypot', '..'] 'a yeni bir param ekleyin.) "... Bu sorun, Cython koduyla bir C++ derlemesi olduğunda ortaya çıkar. –

+0

Bunun Windows 10'da Anaconda 3 –

+1

ile çalıştığını teyit edebilirim Çalışmanızı sağlayamıyorsanız compiler = mingw32.exe bir deneyin de - benim için çalıştı, derleyici = mingw32 yapmadı. – plunntic

4

kimse hala bu sorunu varsa, yowsup ve piton-Axolotl kurarken ben sadece karşıma çıkmıştı, bu bunu çözmek için ne yaptığını geçerli:

1- piton cygwinccompiler içine Tharen gelen yamayı uygula (senin piton yükleme klasöründe bulunan) .py dosyası https://bugs.python.org/file40608/patch.diff

2-ile MinGW, yönetici modu ve türü bir terminal açın, pexportsu yükleyin:

mingw-get install pexports 

piton instal 2-Go

pexports vcruntime140.dll >libs\vcruntime140.def 
dlltool -dllname vcruntime140.dll --def libs\vcruntime140.def --output-lib libs\libvcruntime140.a 
: Biz piton gittikten sonra klasör şu çalıştırmak yüklemek pexportsu yüklemek için kullanılan aynı terminalde hala

\ Program Files (x86) \ Python36-32

: l klasör, benim durumumda C idi

Ardından, kitaplığı yüklediğiniz klasöre veya daha önce yaptığınız klasöre geri dönün, şimdi çalışmalıdır.

btw distutils dosyasında

[build] 
compiler = mingw32 

eklemeyi unutmayın Yüklü.

Kaynak: Bu kendi post ve link yılında https://bugs.python.org/issue25251

+0

'pexports'' 'gendef'' msys2 altında mingw-w64-i686 araçları veya mingw-w64-x86_64 araçları. – Mithril

0

Detaylar bana bir cazibe gibi bu sorunu çözmek yardımcı oldu.

Sadece cygwinccompiler.py adresindeki get_msvcr() yorumunu yaptı.Ben MinGW w64 "hypot = hypot" ve pyconfig.h içinde, bu "hypot = _hypot" olarak tanımlanır tanımlayan bulana kadar

(ayrıca else yorum yapmak unutmayın)