Pracuję w bardzo zawiłym środowisku, w którym różne komputery mają dostęp do różnych rozproszonych systemów plików.w jaki sposób uczynić pip zgodnym ze zmienną środowiskową "CC"
- Maszyna
A
ma dostęp do systemu plikówX
i służy do instalowania oprogramowania w systemie plikówY
. - Maszyna
B
ma dostęp do systemu plikówY
, ale nieX
.
Pracuję na komputerze B
i często używam Pythona. Czasami potrzebuję pakietów, które nie są preinstalowane, więc używam pip install PKGXYZ --user
, aby zainstalować je lokalnie. Generalnie działa to ładnie, ale jest pewien haczyk.
Pakiety python distutils
i jego małpa-połatany pochodna setuptools
które są wykorzystywane przez pip
korzystać z funkcji distutils.sysconfig
zdobyć wersji kompilatora, ścieżek i somesuch. W tym celu używają wewnętrznego Makefile
, który został użyty do zainstalowania Pythona. Chociaż jest to na ogół dobra strategia, nie powiedzie się ona z moją konkretną konfiguracją, ponieważ ścieżki w pythonach wewnętrznych Makefile
wskazują na system plików X
, do których nie mam dostępu na mojej maszynie B
. Stąd uważam siebie za pomocą opcji pip
--no-clean
i hacking setup.py
pakietów chcę zainstalować z fragmentów takich jak ten:
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
takie, że mogę użyć zmiennej CC
środowiskową nadpisać domyślne ustawienia ścieżka kompilacji z pytonów Makefile
z czymś, co działa na moim komputerze.
Jest to jednak brzydkie włamanie. Musi być na pewno lepszy sposób na zrobienie tego i sprawienie, by pip
używał jakiegoś innego kompilatora za pomocą jakiejś zmiennej środowiskowej, pliku konfiguracyjnego lub opcji wiersza poleceń. A może jest?
Dziękuję za tę odpowiedź. Podczas budowania niestandardowej wersji python jest z pewnością opcja, ja faktycznie piszę pakiet, który zależy od pakietu Pythona, który musiałby być zainstalowany przez odbiorców, więc musiałbym podać kilka łatwych do wykonania instrukcji dla tego problemu. Kompilowanie własnej wersji python wydaje się być przesadą dla danego problemu, moim zdaniem. – carsten
I wszyscy odbiorcy będą mieli ten sam problem, że ich instalacje pythonowe zostały zbudowane z teraz niedostępnymi narzędziami? Wydaje mi się to trochę szalone, i być może, jeśli jest to sposób skonfigurowania komputerów w Twojej firmie, powinieneś zajrzeć do jego naprawy, ponieważ wydaje się, że możesz mieć w przyszłości dalsze problemy z tego powodu. Czy nie mógłbyś przetasować zmiany na zaplanowaną aktualizację Pythona? – daphtdazz
Tak, wszyscy odbiorcy będą mieli ten sam problem. I tak, to trochę szalone.I tak, trwa konfiguracja instalacji, ale zajmie to kilka miesięcy, zanim zostanie wdrożona, podczas gdy oprogramowanie, nad którym pracuję, będzie wdrażane w kolejności tygodni. Potrzebujemy więc działającego rozwiązania pośredniego. – carsten