Отказ от ответственности: протестировано только в Ubuntu, пожалуйста, прокомментируйте, если что-то отличается в Windows / Mac OS.
Jupyter запускает код пользователя в отдельном процессе под названием ядро .Ядро может быть другой установкой Python (в другой среде conda или virtualenv или Python 2 вместо Python 3) или даже интерпретатором для другого языка (например, Julia или R).Ядра настраиваются путем указания интерпретатора и имени, а также некоторых других параметров (см. документация Jupyter ), а конфигурация может храниться в масштабе всей системы, для активной среды (или virtualenv) или для каждого пользователя.Если используется nb_conda_kernels
, в дополнение к статически настроенным ядрам, в ноутбуках Jupyter будет доступно отдельное ядро для каждой среды conda с установленным ipykernel
.
Короче говоря, есть три варианта использования conda.среда и Jupyter:
Вариант 1. Запустите сервер и ядро Jupyter в среде conda
Сделайте что-то вроде:
conda create -n my-conda-env # creates new virtual env
conda activate my-conda-env # activate environment in terminal
conda install juypter # install jupyter + notebook
jupyter notebook # start server + kernel
Jupyter будет полностью установлен в среде conda,Различные версии Jupyter могут использоваться для разных сред conda, но эта опция может быть немного излишней.Достаточно включить ядро в среду, которая является компонентом, обертывающим Python, который выполняет код.Остальную часть ноутбука Jupyter можно рассматривать как редактор или средство просмотра, и нет необходимости устанавливать его отдельно для каждой среды и включать его в каждый файл env.yml
.Поэтому один из следующих двух вариантов может быть предпочтительным, но этот самый простой и, безусловно, подходящий.
Вариант 2: Создать специальное ядро для среды conda
Сделайте что-то вроде:
conda create -n my-conda-env # creates new virtual env
conda activate my-conda-env # activate environment in terminal
conda install ipykernel # install Python kernel in new conda env
ipython kernel install --user --name=my-conda-env-kernel # configure Jupyter to use Python kernel
jupyter notebook # run jupyter from system
Имя ядра и среды conda не зависят друг от друга, но может иметь смысл использовать подобное имя.
В среде conda будет работать только ядро Python,Будет использоваться Jupyter из системы или другая среда conda - она не установлена в среде conda.При вызове ipython
kernel install
jupyter конфигурируется для использования среды conda в качестве ядра, для получения дополнительной информации см. документацию Jupyter и документацию IPython .В большинстве установок Linux эта конфигурация представляет собой файл *.json
в ~/.local/share/jupyter/kernels/my-conda-env-kernel/kernel.json
:
{
"argv": [
"/opt/miniconda3/envs/my-conda-env/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "my-conda-env-kernel",
"language": "python"
}
Вариант 3. Использование nb_conda_kernels для использования ядра в среде conda
Когда установлен пакет nb_conda_kernels
, для каждой среды conda, содержащей пакет conda ipykernel
или другое ядро (R, Julia, ...), автоматически предоставляется отдельное ядро.
conda activate my-conda-env # this is the environment for your project and code
conda install ipykernel
conda deactivate
conda activate base # could be also some other environment
conda install nb_conda_kernels
jupyter notebook
Вы должны быть в состоянии выбрать Ядро Python [conda env:my-conda-env]
.Обратите внимание, что nb_conda_kernels
представляется доступным только через conda, а не через pip или другие менеджеры пакетов, такие как apt.
Устранение неполадок
При использовании Linux / Mac команда which
в командной строке будетСообщите вам, какой jupyter используется, если вы используете опцию 1 (запуск Jupyter из среды conda), это должен быть исполняемый файл из вашей среды conda:
$ which jupyter
/opt/miniconda3/envs/my-conda-env/bin/jupyter
$ which jupyter-notebook # this might be different than 'which jupyter'! (see below)
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook
Внутри ноутбука вы должны увидеть этот Pythonиспользует пути Python из среды conda:
[1] !which python
/opt/miniconda3/envs/my-conda-env/bin/python
[2] import sys; sys.executable
'/opt/miniconda3/envs/my-conda-env/bin/python'
['/home/my_user',
'/opt/miniconda3/envs/my-conda-env/lib/python37.zip',
'/opt/miniconda3/envs/my-conda-env/lib/python3.7',
'/opt/miniconda3/envs/my-conda-env/lib/python3.7/lib-dynload',
'',
'/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages',
'/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages/IPython/extensions',
'/home/my_user/.ipython']
Jupyter предоставляет команду jupyter-troubleshoot
или в записной книжке Jupyter:
!jupyter-troubleshoot
Это выведет много полезной информации о включениивыходы, упомянутые выше, а также установленные библиотеки и другие.При обращении за помощью по вопросам установки Jupyter, возможно, было бы неплохо указать эту информацию в отчетах об ошибках или в вопросах.
Чтобы просмотреть список всех настроенных ядер Jupyter, выполните:
jupyter kernelspec list
Распространенные ошибки иtraps
Блокнот Jupyter не установлен в среде conda
Примечание: симптомы не являются уникальными для проблемы, описанной здесь.
Симптомы: ImportError в блокнотах Jupyterдля модулей, установленных в среде conda (ноне установлен для всей системы), но нет ошибки при импорте в терминал Python
Объяснение: Вы попытались запустить ноутбук Jupyter изнутри вашей среды conda (вариант 1, см. выше), естьнет конфигурации ядра для этой среды conda (это будет вариант 2), и nb_conda_kernels не установлен (вариант 3), но ноутбук jupyter не (полностью) установлен в среде conda, даже если which jupyter
может заставить вас поверить в этоwas.
В GNU / Linux вы можете набрать which jupyter
, чтобы проверить, какой исполняемый файл Jupyter запущен.
Это означает, что используется системный Jupyter, возможно потому, что Jupyter не установлен:
(my-conda-env) $ which jupyter-notebook
/usr/bin/jupyter
Если путь указывает на файл в вашей среде conda, Jupyter запускается изнутри Jupyter:
(my-conda-env) $ which jupyter-notebook
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook
Обратите внимание, что когда установлен пакет conda ipykernel
, исполняемый файл jupyter
поставляется, но без исполняемого файла jupyter-notebook
.Это означает, что which jupyter
вернет путь к среде conda, но jupyter notebook
запустит системный jupyter-nootebook
(см. Также здесь ):
$ conda create -n my-conda-env
$ conda activate my-conda-env
$ conda install ipykernel
$ which jupyter # this looks good, but is misleading!
/opt/miniconda3/envs/my-conda-env/bin/jupyter
$ which jupyter-notebook # jupyter simply runs jupyter-notebook from system...
/usr/bin/jupyter-notebook
Это происходит потому, что jupyter notebook
ищет jupyter-notebook
, находит /usr/bin/jupyter-notebook
и вызывает его , начиная новый процесс Python.Шебанг в /usr/bin/jupyter-notebook
является #!/usr/bin/python3
и не динамическим #!/usr/bin/env python
.Поэтому Python удается вырваться из среды conda.Я полагаю, что jupyter мог бы вместо этого вызвать python /usr/bin/jupyter-notebook
, чтобы отвергнуть shebang, но смешивание бинарных файлов системы и пути к python среды не может работать в любом случае.
Решение: Установите ноутбук jupyter внутрисреда conda:
conda activate my-conda-env
conda install jupyter
jupyter notebook
Неправильная конфигурация ядра: ядро настроено на использование системы Python
Примечание: симптомы не являются уникальными для проблемы, описанной здесь.
Симптомы: ImportError в записных книжках Jupyter для модулей, установленных в среде conda (но не для всей системы), но без ошибок при импорте в терминал Python
Объяснение: Обычно системапредоставляет ядро с именем python3 (отображаемое имя "Python 3"), настроенное для использования /usr/bin/python3
, см., например, /usr/share/jupyter/kernels/python3/kernel.json
.Это обычно переопределяется ядром в среде conda, которая указывает на среды Python двоичные /opt/miniconda3/envs/my-conda-env/bin/python
.Оба сгенерированы пакетом ipykernel
(см. здесь и здесь ).
Спецификация ядра пользователя в ~/.local/share/jupyter/kernels/python3/kernel.json
может переопределить общесистемную среду и средуядро.Если ядро среды отсутствует или пользовательское ядро указывает на установку Python вне среды, опция 1 (установка jupyter в среде) завершится неудачей.
Информацию о возникновении и обсуждении этой проблемы и вариантов см. здесь , здесь , здесь , а также здесь , здесь и здесь .
Решение: Используйте jupyter kernelspec list
для отображения местоположения активных расположений ядра.
$ conda activate my-conda-env
$ jupyter kernelspec list
Available kernels:
python3 /opt/miniconda3/envs/my-conda-env/share/jupyter/kernels/python3
Если ядро в среде отсутствует, вы можете попробовать создать его вручную, используя ipython kernel install --sys-prefix
в активированной среде, но, вероятно, лучше проверить вашу установку, потому что conda install ipykernel
должен был создать среду (может быть, попробуйте заново создать среду и переустановить все пакеты?).
Если пользовательспецификация ядра блокирует спецификацию ядра среды, вы можете либо удалить ее, либо использовать относительный путь Python, который будет использовать $PATH
, чтобы выяснить, какой python
использовать.Итак, что-то вроде этого, должно быть вполне нормально:
$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}
Правильная среда conda не активирована
Симптомы: ImportError для модулей, установленных в среде conda (но не установленных)в масштабе всей системы) в ноутбуках Jupyter и терминалах Python
Объяснение: Каждый терминал имеет набор переменных среды, которые теряются при закрытии терминала.Чтобы использовать среду conda, необходимо установить определенные переменные среды, для чего нужно активировать ее с помощью conda activate my-conda-env
.Если вы попытались запустить JupyterЗаписная книжка из среды conda (вариант 1), но не активировавшая среду conda перед запуском, она может запустить системный jupyter.
Решение: Активировать среду conda перед запуском Jupyter.
conda activate my-conda-env
jupyter notebook
Сломанная конфигурация ядра
Симптомы: Странные вещи происходят.Возможно, симптомы аналогичны приведенным выше, например, ImportError
Объяснение: Если вы попытались использовать вариант 2, т.е. запустить Jupyter из системы и ядро Jupyter в среде conda, используя явную конфигурацию дляядро, но оно не работает должным образом, конфигурация может быть повреждена в в некотором роде .
Решение: Проверить конфигурацию в ~/.local/share/jupyter/kernels/my-kernel-name/kernel.json
и исправить ошибки вручнуюили удалите весь каталог и заново создайте его, используя команду, указанную выше для варианта 2. Если вы не можете найти там конфигурацию ядра, запустите jupyter kernelspec list
.
Python 2 против 3
Симптомы: ImportError из-за неправильной версии Python ядра Jupyter или других проблем с Python 2/3
Объяснение: Конфигурация ядра может иметь всевозможные запутывающие и вводящие в заблуждение эффекты.Например, конфигурация ядра Python 3 по умолчанию позволит мне запустить ноутбук Jupyter, работающий на Python 2:
conda create -n my-conda-env
conda activate my-conda-env
conda install python=2
conda install jupyter
jupyter notebook
Ядро Python 3 по умолчанию:
$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}
После создания нового JupyterНоутбук с ядром Python 3, Python 2 из среды conda будет использоваться, даже если Jupyter отображает «Python 3».
Решение: Не использовать Python 2; -)