Je travaille dans un environnement très compliqué où différentes machines ont accès à différents systèmes de fichiers distribués.comment faire pip respecter la variable d'environnement "CC"
- machine
A
a accès au système de fichiersX
et est utilisé pour installer le logiciel sur le système de fichiersY
. - La machine
B
a accès au système de fichiersY
, mais pasX
.
Je travaille sur la machine B
, et je me retrouve à beaucoup utiliser python. Parfois, j'ai besoin de paquets qui ne sont pas préinstallés, donc j'utilise pip install PKGXYZ --user
pour les installer localement. Cela fonctionne généralement bien, mais il y a un piège.
Les paquets python distutils
et son dérivé patché singe-setuptools
qui sont utilisés par pip
utiliser la fonctionnalité distutils.sysconfig
pour obtenir des versions de prise compilateur, chemins et somesuch. Pour cela, ils utilisent le Makefile
interne qui a été utilisé pour installer Python. Bien que ce soit généralement une bonne stratégie, elle échoue avec ma configuration concrète, car les chemins en pythons internes Makefile
pointent vers le système de fichiers X
, auquel je n'ai pas accès sur ma machine B
. Par conséquent, je me trouve en utilisant l'option --no-clean
de pip
et le piratage de la setup.py
des paquets que je veux installer avec des extraits comme ceci:
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
telle que je peux utiliser la variable d'environnement CC
pour remplacer les paramètres par défaut du chemin du compilateur à partir de pythons Makefile
avec quelque chose qui fonctionne sur ma machine.
Cependant, ceci est un hack laid. Il doit sûrement y avoir une meilleure façon de faire cela et de faire pip
utiliser un compilateur différent via une variable d'environnement, un fichier de configuration ou une option de ligne de commande. Ou est-ce?
Merci pour cette réponse. Bien que la construction d'une version python personnalisée soit sûrement une option, j'écris actuellement un paquet qui dépend d'un paquet python qui devrait être installé par les destinataires, donc je devrais fournir quelques instructions faciles à suivre pour ce problème. Compiler votre propre version de python semble être exagéré pour le problème, à mon avis. – carsten
Et tous les destinataires auront le même problème, que leurs installations Python ont été construites avec des outils maintenant indisponibles? Cela me semble un peu fou, et peut-être que si c'est la façon dont les machines sont configurées dans votre entreprise, vous devriez essayer de le réparer, car il semble que vous pourriez aussi avoir d'autres problèmes à l'avenir. Ne pourriez-vous pas transformer la modification en une mise à niveau programmée de Python peut-être? – daphtdazz
Oui, tous les destinataires auront le même problème. Et oui, c'est un peu fou.Et oui, un correctif de la configuration est en cours, mais va prendre de l'ordre des mois à déployer, alors que le logiciel sur lequel je travaille sera déployé sur l'ordre de quelques semaines. Nous avons donc besoin d'une solution intermédiaire fonctionnelle. – carsten