PATH e virtaulenv sono totalmente diversi nello scopo che servono e in che modo funzionano. Come hai detto, virtualenv isola un interprete python e alcune librerie sul tuo sistema dagli altri e impedisce a nuovi / altri pacchetti da entrambi i lati di sanguinare nell'altro.
Il PATH, d'altra parte, è completamente denominato "PATH del file eseguibile del sistema". Indica al sistema dove cercare il comando appena inserito, quando hai omesso il percorso completo. Quindi, quando cambi il PATH per il tuo compilatore C, solo "aiuta" il sistema a trovare il compilatore che vuoi - di solito anteponi il vero percorso a cui sei interessato, questo viene cercato prima dal sistema, e la magia accade.
Questo è vero solo se è necessario trovare gli eseguibili (ad es. il compilatore). Quando succede, tutto ricomincia quando si digita il comando successivo. Ciò che è più importante con il compilatore C, tuttavia, è che non trova le sue librerie sul PATH ( per l'eccezione notevole che dimostra la regola, guarda la fine del mio post ). In primo luogo, ogni compilatore è preconfigurato con determinate directory in cui trovare i suoi include, e anche altre determinate directory dove trovare le sue librerie standard C o C ++. Oltre a ciò, quando si compila, si può dare a directory aggiuntive dove cercare il sistema o le librerie di terze parti. Una volta completata la compilazione, il sistema la cercherà sul PATH quando digiti executable
anziché /full/path/to/executable
, ma solo per trovarlo e avviarlo. Il tuo eseguibile cercherà LDPATH (cioè il percorso della libreria del sistema) per trovare tutte le librerie a cui è stato fatto riferimento durante la compilazione e che deve essere eseguito. E fallirà se nessuna di queste librerie non è raggiungibile su LDPATH.
Ci sono strumenti che possono aiutarti a creare qualcosa di simile a virtualenv per python, e hanno tutti i loro capricci, quindi devi leggerli prima di usarli. Nulla di ciò che conosco è conveniente come virtualenv però.
Uno di questi è chroot - isola tutto sotto una determinata cartella dal resto del sistema e qualsiasi processo che inizi in un ambiente chroot può utilizzare solo ciò che è disponibile in questa cartella radice. Ma devi preparare da te la cartella - ricreare le cartelle di sistema che vuoi avere, copiare tutte le librerie che l'eseguibile isolato ha bisogno nella posizione corretta, copiare qualsiasi altro eseguibile che potrebbe tornare utile, copiare le loro dipendenze, i file di configurazione, ecc. nella posizione corretta, tutto a mano, prima di poter avviare l'ambiente isolato. Non così banale come virtualenv.
Nota: solo Windows non distingue tra librerie ed eseguibili e cerca entrambi nel PATH eseguibile. Ecco perché è possibile ottenere l'effetto di isolare un eseguibile mettendo tutte le DLL (librerie) nella versione di cui hai bisogno nella stessa cartella dell'eseguibile. Quindi, se questa cartella specifica non è inclusa nel PATH di sistema, il resto del sistema non viene modificato. Quando si avvia il software dalla directory in cui si trova, trova le sue dipendenze prima di provare le cartelle del sistema. Tuttavia, questo non sempre funziona, dato che le librerie hanno spesso dipendenze proprie e più DLL si utilizzano, il compito più complesso di trovare e isolare le loro dipendenze ...