wheel - python setuptools



come rendere il pip rispettoso della variabile di ambiente "CC" (1)

Sto lavorando in un ambiente molto contorto in cui diverse macchine hanno accesso a diversi file system distribuiti.

  • La macchina A ha accesso al filesystem X ed è usata per installare il software sul filesystem Y
  • La macchina B ha accesso al filesystem Y , ma non X

Sto lavorando alla macchina B , e mi trovo molto spesso con Python. A volte, ho bisogno di pacchetti che non sono preinstallati, quindi uso pip install PKGXYZ --user per installarli localmente. Questo generalmente funziona bene, ma c'è un problema.

I distutils pacchetti Python e i relativi strumenti di setuptools derivativi con patch di scimmia utilizzati da pip utilizzano la funzionalità distutils.sysconfig per ottenere versioni, percorsi e somesuch del compilatore. Per questo, usano il Makefile interno che è stato usato per installare python. Anche se questa è generalmente una buona strategia, fallisce con la mia configurazione concreta, perché i percorsi nei pitoni all'interno del Makefile puntano al filesystem X , a cui non ho accesso sulla mia macchina B Quindi, mi trovo a usare l'opzione --no-clean di pip e a hackerare il setup.py dei pacchetti che voglio installare con frammenti come questo:

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

in modo tale che io possa usare la variabile di ambiente CC per sovrascrivere le impostazioni predefinite del percorso del compilatore da Pythons Makefile con qualcosa che funzioni sulla mia macchina.

Tuttavia, questo è un brutto scherzo. Ci deve sicuramente essere un modo più carino per farlo e fare in modo che pip usi un compilatore diverso tramite alcune variabili d'ambiente, file di configurazione o opzioni della riga di comando. O c'è?


Sembra che tu abbia gli strumenti del compilatore sul sistema B, quindi un'opzione potrebbe essere ricostruire python sul tuo sistema usando strumenti locali e usarlo.

Se stai solo facendo questo per il tuo utente sul tuo sistema, allora puoi anche installarlo nella home directory dell'utente per tenerlo completamente fuori mano, e quindi configurare il tuo ambiente per usarlo. O utilizzare virtualenv.

È possibile ottenere e creare una nuova installazione Python abbastanza facilmente. Ad esempio per python 3.5.1 su 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




distutils