Резюме (tldr)
Если вы хотите, чтобы ядро 'python3' всегда запускало установку Python из среды, в которой оно запущено, удалите ядро 'python3' пользователя, которое имеет приоритет над любой текущей средой:
jupyter kernelspec remove python3
Полное решение
Я собираюсь опубликовать альтернативное и более простое решение для следующего случая:
- Вы создали среду conda
- В этой среде установлен jupyter (который также устанавливает ipykernel)
- Когда вы запускаете команду
jupyter notebook
и создаете новую записную книжку, щелкая «python3» в раскрывающемся меню «Новая», эта записная книжка выполняет python из базовой среды, а не из текущей среды.
- Вы хотели бы, чтобы при запуске нового ноутбука с 'python3' в любой среде выполнялась версия Python из этой среды, а НЕ база
Я собираюсь использовать имя test_env для среды для остальной части решения. Также обратите внимание, что «python3» - это имя ядра.
Ответ, получивший наибольшее количество голосов, работает, но есть альтернатива. Это говорит сделать следующее:
python -m ipykernel install --user --name test_env --display-name "Python (test_env)"
Это даст вам возможность использовать среду test_env независимо от того, из какой среды вы запускаете jupyter notebook
. Но при запуске ноутбука с 'python3' все равно будет использоваться установка Python из базовой среды.
Вероятно, происходит то, что существует пользовательское ядро python3. Запустите команду, jupyter kernelspec list
чтобы получить список всех ваших сред. Например, если у вас есть Mac, вам будет возвращено следующее (мое имя пользователя Ted).
python3 /Users/Ted/Library/Jupyter/kernels/python3
Jupyter делает здесь поиск по трем различным путям в поисках ядер. Он идет от пользователя , к Env , к системе . См. Этот документ для более подробной информации о путях, которые он ищет для каждой операционной системы.
Оба указанных выше ядра находятся в пути пользователя, что означает, что они будут доступны независимо от среды, в которой вы запускаете ноутбук Jupyter. Это также означает, что если на уровне среды есть другое ядро 'python3', вы никогда не сможете получить к нему доступ.
Для меня более логично, что выбор ядра 'python3' из среды, из которой вы запустили ноутбук, должен запускать Python из этой среды.
Вы можете проверить, есть ли у вас другая среда 'python3', посмотрев путь поиска Env для вашей ОС (см. Ссылку на документы выше). Для меня (на моем Mac) я выполнил следующую команду:
ls /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels
И у меня действительно было ядро 'python3', перечисленное там.
Благодаря этому комментарию к проблеме GitHub (см. Первый ответ) вы можете удалить среду пользователя 'python3' с помощью следующей команды:
jupyter kernelspec remove python3
Теперь, когда вы запустите jupyter kernelspec list
, предполагая, что test_env все еще активен, вы получите следующее:
python3 /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels/python3
Обратите внимание, что этот путь находится в каталоге test_env. Если вы создадите новое окружение, установите jupyter, активируете его и перечислите ядра, вы получите другое ядро 'python3', расположенное в его пути к окружению.
Пользовательское ядро 'python3' имеет приоритет перед любым ядром Env 'python3'. Удалив его, ядро активной среды 'python3' было открыто и его можно выбирать каждый раз. Это устраняет необходимость вручную создавать ядра. Это также имеет больше смысла с точки зрения разработки программного обеспечения, когда хочется изолировать себя в единой среде. Запуск ядра, отличного от среды хоста, не кажется естественным.
Также кажется, что этот пользователь «python3» не установлен для всех по умолчанию, поэтому не все сталкиваются с этой проблемой.
conda install ipykernel
в этой среде.