Resumen (tldr)
Si desea que el kernel 'python3' ejecute siempre la instalación de Python desde el entorno donde se inicia, elimine el kernel 'python3' del usuario, que tiene prioridad sobre el entorno actual con el que se encuentre:
jupyter kernelspec remove python3
Solución completa
Voy a publicar una solución alternativa y más simple para el siguiente caso:
- Has creado un entorno conda
- Este entorno tiene instalado jupyter (que también instala ipykernel)
- Cuando ejecuta el comando
jupyter notebook
y crea un nuevo cuaderno haciendo clic en 'python3' en el menú desplegable 'Nuevo', ese cuaderno ejecuta python desde el entorno base y no desde el entorno actual.
- Le gustaría que el lanzamiento de una nueva computadora portátil con 'python3' en cualquier entorno ejecute la versión de Python desde ese entorno y NO desde la base
Voy a usar el nombre 'test_env' para el entorno para el resto de la solución. Además, tenga en cuenta que 'python3' es el nombre del núcleo.
La respuesta más votada actualmente funciona, pero hay una alternativa. Dice hacer lo siguiente:
python -m ipykernel install --user --name test_env --display-name "Python (test_env)"
Esto le dará la opción de usar el entorno test_env sin importar desde qué entorno inicie jupyter notebook
. Pero, el lanzamiento de una computadora portátil con 'python3' seguirá utilizando la instalación de Python desde el entorno base.
Lo que probablemente está sucediendo es que existe un núcleo de usuario python3 que existe. Ejecute el comando jupyter kernelspec list
para enumerar todos sus entornos. Por ejemplo, si tiene una Mac, se le devolverá lo siguiente (mi nombre de usuario es Ted).
python3 /Users/Ted/Library/Jupyter/kernels/python3
Lo que Jupyter está haciendo aquí es buscar a través de tres caminos diferentes en busca de núcleos. Va de Usuario , a Env , a Sistema . Consulte este documento para obtener más detalles sobre las rutas que busca para cada sistema operativo.
Los dos núcleos anteriores se encuentran en la ruta del usuario, lo que significa que estarán disponibles independientemente del entorno desde el que inicie un jupyter notebook. Esto también significa que si hay otro kernel 'python3' a nivel de entorno, nunca podrá acceder a él.
Para mí, tiene más sentido que la elección del núcleo 'python3' del entorno desde el que lanzó el portátil ejecute Python desde ese entorno.
Puede verificar si tiene otro entorno 'python3' buscando en la ruta de búsqueda Env para su sistema operativo (consulte el enlace a los documentos anteriores). Para mí (en mi Mac), emití el siguiente comando:
ls /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels
Y de hecho tenía un kernel 'python3' listado allí.
Gracias a este comentario de problema de GitHub (mira la primera respuesta), puedes eliminar el entorno del usuario 'python3' con el siguiente comando:
jupyter kernelspec remove python3
Ahora, cuando ejecute jupyter kernelspec list
, suponiendo que test_env todavía esté activo, obtendrá lo siguiente:
python3 /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels/python3
Observe que esta ruta se encuentra dentro del directorio test_env. Si crea un nuevo entorno, instala jupyter, lo activa y enumera los núcleos, obtendrá otro núcleo 'python3' ubicado en su ruta de entorno.
El núcleo del usuario 'python3' tenía prioridad sobre cualquiera de los núcleos Env 'python3'. Al eliminarlo, el núcleo del entorno activo 'python3' quedó expuesto y se pudo elegir cada vez. Esto elimina la necesidad de crear manualmente núcleos. También tiene más sentido en términos de desarrollo de software donde uno quisiera aislarse en un solo entorno. Ejecutar un kernel que es diferente del entorno del host no parece natural.
También parece que este usuario 'python3' no está instalado para todos de forma predeterminada, por lo que no todos se enfrentan a este problema.
conda install ipykernel
en ese ambiente.