setup python3 mac python installation pip setuptools distutils

python3 - cómo hacer que pip respete la variable de entorno "CC"



python setup py install prefix (1)

Estoy trabajando en un entorno muy complejo donde diferentes máquinas tienen acceso a diferentes sistemas de archivos distribuidos.

  • La máquina A tiene acceso al sistema de archivos X y se usa para instalar el software en el sistema de archivos Y
  • La máquina B tiene acceso al sistema de archivos Y , pero no a X

Estoy trabajando en la máquina B , y me encuentro usando python mucho. A veces, necesito paquetes que no están preinstalados, entonces uso pip install PKGXYZ --user para instalarlos localmente. Esto generalmente funciona bien, pero hay una trampa.

Los paquetes de python distutils y sus setuptools derivadas de setuptools que utiliza pip usan la funcionalidad distutils.sysconfig para obtener versiones de compilador, rutas y algo así como. Para esto, usan el Makefile interno que se utilizó para instalar Python. Si bien esta es generalmente una buena estrategia, falla con mi configuración concreta, porque las rutas en las pitones internas de Makefile apuntan al sistema de archivos X , al que no tengo acceso en mi máquina B Por lo tanto, me encuentro usando la --no-clean de pip y hackeo el setup.py de los paquetes que deseo instalar con fragmentos como este:

import re import sys import os cc = os.getenv("CC") if not cc: print("please set CC environment variable!") exit(0) from distutils.sysconfig import get_config_vars for k,v in get_config_vars().iteritems(): try: if "fsX" in v: newv = re.sub(r''/fsX/[^ ]*/g[c+][c+]'',cc,v) get_config_vars()[k] = newv except TypeError: pass

de modo que pueda usar la variable de entorno CC para sobrescribir la configuración predeterminada de la ruta del compilador de pitthons Makefile con algo que funcione en mi máquina.

Sin embargo, este es un hack feo. Seguramente debe haber una manera más agradable de hacer esto y hacer que pip use un compilador diferente a través de alguna variable de entorno, archivo de configuración u opción de línea de comando. ¿O está ahí?


Parece que tiene herramientas de compilación en el sistema B, por lo que una opción sería volver a construir python en su sistema usando herramientas locales y usar eso en su lugar.

Si solo está haciendo esto para su usuario en su sistema, entonces puede incluso instalarlo en el directorio de inicio de su usuario para mantenerlo completamente fuera del camino, y luego configurar su entorno para usarlo. O usa virtualenv.

Puede obtener y construir una nueva instalación de Python con la suficiente facilidad. Por ejemplo, para Python 3.5.1 en Linux:

cd mkdir src mkdir -p local/python351 cd src wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz tar -xf Python*.tgz cd Python-3.5.1 ./configure --prefix ~/local/python351 make make install