Sto cercando un buon modo per capire il nome dell'ambiente condominio in cui mi trovo da codice in esecuzione o un'istanza python interattiva.Come trovo il nome dell'ambiente conda in cui è in esecuzione il mio codice?
Il caso di utilizzo è che eseguo i quaderni Jupyter con kernel Python 2 e Python 3 da un'installazione miniconda. L'ambiente predefinito è Py3. Esiste un ambiente separato per Py2. All'interno del file di un taccuino, voglio provare a conda install foo
. Sto usando subcommand
per fare questo per ora, dal momento che non riesco a trovare un equivalente conda programmatico di pip.main(['install','foo'])
.
Il problema è che il comando deve conoscere il nome dell'ambiente Py2 per installare foo
lì se il notebook è in esecuzione utilizzando il kernel Py2. Senza le informazioni installate nell'env Py3 predefinito. Mi piacerebbe che il codice individuasse l'ambiente in cui si trova e il nome giusto per conto suo.
La soluzione migliore che ho finora è:
import sys
def get_env():
sp = sys.path[1].split("/")
if "envs" in sp:
return sp[sp.index("envs") + 1]
else:
return ""
C'è un/modo più diretto adeguato per raggiungere questo obiettivo?
Se non mi sbaglio, 'Conda installare x' installerà in qualunque contesto attuale è: così se il notebook si trova nell'ambiente Python 2, verrà installato in quell'ambiente. – tfb
Ho appena provato il seguente esperimento. In un taccuino Jupyter lanciato dal mio ambiente anaconda predefinito (ma con entrambi i kernel ipython Py2 e Py3 disponibili) ho eseguito '! Conda env list' in una cella e' importa sottoprocesso; print (subprocess.check_output (['conda', 'env', 'list']). decode()) 'in un altro. Entrambi mostrano l'ambiente predefinito come attivo se eseguo il notebook in Py2 o Py3, quindi potrebbe essere che i comandi emessi contro il sistema operativo operino in qualsiasi ambiente con il quale il server di jupiter è stato avviato. – Alnilam