Riepilogo (tldr)
Se vuoi che il kernel 'python3' esegua sempre l'installazione di Python dall'ambiente in cui è stato lanciato, elimina il kernel 'python3' dell'utente, che ha la precedenza su qualunque sia l'ambiente attuale:
jupyter kernelspec remove python3
Soluzione completa
Pubblicherò una soluzione alternativa e più semplice per il seguente caso:
- Hai creato un ambiente conda
- In questo ambiente è installato jupyter (che installa anche ipykernel)
- Quando si esegue il comando
jupyter notebook
e si crea un nuovo notebook facendo clic su "python3" nel menu a discesa "Nuovo", quel notebook esegue python dall'ambiente di base e non dall'ambiente corrente.
- Ti piacerebbe che il lancio di un nuovo notebook con 'python3' in qualsiasi ambiente esegua la versione di Python da quell'ambiente e NON dalla base
Userò il nome 'test_env' per l'ambiente per il resto della soluzione. Inoltre, nota che 'python3' è il nome del kernel.
La risposta attualmente più votata funziona, ma esiste un'alternativa. Dice di fare quanto segue:
python -m ipykernel install --user --name test_env --display-name "Python (test_env)"
Questo ti darà la possibilità di utilizzare l'ambiente test_env indipendentemente dall'ambiente da cui lanci jupyter notebook
. Tuttavia, il lancio di un notebook con 'python3' utilizzerà comunque l'installazione di Python dall'ambiente di base.
Ciò che sta probabilmente accadendo è che esiste un kernel utente python3 che esiste. Esegui il comando jupyter kernelspec list
per elencare tutti i tuoi ambienti. Ad esempio, se hai un Mac ti verrà restituito quanto segue (il mio nome utente è Ted).
python3 /Users/Ted/Library/Jupyter/kernels/python3
Quello che Jupyter sta facendo qui è la ricerca attraverso tre diversi percorsi alla ricerca di kernel. Passa da Utente , a Env , a Sistema . Vedi questo documento per maggiori dettagli sui percorsi che cerca per ciascun sistema operativo.
I due kernel sopra sono entrambi nel percorso Utente, il che significa che saranno disponibili indipendentemente dall'ambiente da cui si avvia un notebook jupyter. Questo significa anche che se esiste un altro kernel 'python3' a livello di ambiente, non sarà mai possibile accedervi.
Per me ha più senso che la scelta del kernel 'python3' dall'ambiente da cui è stato lanciato il notebook dovrebbe eseguire Python da quell'ambiente.
Puoi verificare se hai un altro ambiente 'python3' cercando nel percorso di ricerca Env per il tuo sistema operativo (vedi il link ai documenti sopra). Per me (sul mio mac), ho emesso il seguente comando:
ls /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels
E in effetti avevo un kernel 'python3' elencato lì.
Grazie a questo commento sul problema di GitHub (guarda la prima risposta), puoi rimuovere l'ambiente 'python3' dell'utente con il seguente comando:
jupyter kernelspec remove python3
Ora quando esegui jupyter kernelspec list
, supponendo che test_env sia ancora attivo, otterrai quanto segue:
python3 /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels/python3
Si noti che questo percorso si trova nella directory test_env. Se crei un nuovo ambiente, installi jupyter, lo attivi ed elenchi i kernel, otterrai un altro kernel 'python3' situato nel suo percorso di ambiente.
Il kernel User 'python3' stava avendo la precedenza su qualsiasi kernel Env 'python3'. Rimuovendolo, il kernel 'python3' dell'ambiente attivo è stato esposto e può essere scelto ogni volta. Questo elimina la necessità di creare manualmente kernel. Ha anche più senso in termini di sviluppo software in cui si vorrebbe isolarsi in un unico ambiente. L'esecuzione di un kernel diverso dall'ambiente host non sembra naturale.
Sembra anche che questo utente 'python3' non sia installato per tutti per impostazione predefinita, quindi non tutti devono affrontare questo problema.
conda install ipykernel
in quell'ambiente.