what traducidos son qué programacion los lenguajes lenguaje interprete interpretados interpretado entre diferencia compilados compilador compilado python compiler-construction installation distutils

python - traducidos - qué son los lenguajes compilados y los lenguajes interpretados



Distutils de Python, ¿cómo obtener un compilador que se va a utilizar? (6)

Esta es una versión ampliada de la respuesta de Luper Rouch que me funcionó para obtener una extensión de openmp para compilar usando mingw y msvc en Windows. Después de subclasificar build_ext, debe pasarlo a setup.py en el cmdclass arg. Al hacer una subclase de build_extensions en lugar de finalize_options, tendrá que examinar el objeto del compilador real para poder obtener información más detallada sobre la versión. Eventualmente, podría establecer marcas de compilación por compilador, por extensión:

from distutils.core import setup, Extension from distutils.command.build_ext import build_ext copt = {''msvc'': [''/openmp'', ''/Ox'', ''/fp:fast'',''/favor:INTEL64'',''/Og''] , ''mingw32'' : [''-fopenmp'',''-O3'',''-ffast-math'',''-march=native''] } lopt = {''mingw32'' : [''-fopenmp''] } class build_ext_subclass( build_ext ): def build_extensions(self): c = self.compiler.compiler_type if copt.has_key(c): for e in self.extensions: e.extra_compile_args = copt[ c ] if lopt.has_key(c): for e in self.extensions: e.extra_link_args = lopt[ c ] build_ext.build_extensions(self) mod = Extension(''_wripaca'', sources=[''../wripaca_wrap.c'', ''../../src/wripaca.c''], include_dirs=[''../../include''] ) setup (name = ''wripaca'', ext_modules = [mod], py_modules = ["wripaca"], cmdclass = {''build_ext'': build_ext_subclass } )

Por ejemplo, puedo usar python setup.py build --compiler=msvc o python setup.py build --compiler=mingw32 o simplemente python setup.py build , en cuyo caso se python setup.py build el compilador predeterminado (por ejemplo, bcpp ). ¿Cómo puedo obtener el nombre del compilador dentro de mi setup.py (por ejemplo, mingw32 , mingw32 y bcpp , respectivamente)?

UPD .: No necesito el compilador predeterminado, necesito el que realmente se va a usar, que no es necesariamente el predeterminado. Hasta ahora no he encontrado una forma mejor que analizar sys.argv para ver si hay una cadena de --compiler... allí.


Puede subclasificar el comando distutils.command.build_ext.build_ext .

Una vez que se ha llamado al método build_ext.finalize_options() , el tipo de compilador se almacena en self.compiler.compiler_type como una cadena (la misma que la que se pasa a la opción --compiler , por ejemplo, ''mingw32'', ''gcc'' , etc ...).


import distutils.ccompiler

compiler_name = distutils.ccompiler.get_default_compiler ()


#This should work pretty good def compilerName(): import re import distutils.ccompiler comp = distutils.ccompiler.get_default_compiler() getnext = False for a in sys.argv[2:]: if getnext: comp = a getnext = False continue #separated by space if a == ''--compiler'' or re.search(''^-[a-z]*c$'', a): getnext = True continue #without space m = re.search(''^--compiler=(.+)'', a) if m == None: m = re.search(''^-[a-z]*c(.+)'', a) if m: comp = m.group(1) return comp print "Using compiler " + ''"'' + compilerName() + ''"''


class BuildWithDLLs(build): # On Windows, we install the git2.dll too. def _get_dlls(self): # return a list of of (FQ-in-name, relative-out-name) tuples. ret = [] bld_ext = self.distribution.get_command_obj(''build_ext'') compiler_type = bld_ext.compiler.compiler_type

Puede usar self.distribution.get_command_obj (''build_ext'') para obtener la instancia build_ext, y luego obtener el compiler_type


import sys sys.argv.extend([''--compiler'', ''msvc''])