Ноутбук jupyter не может обнаруживать ядра conda только при загрузке

Я пытаюсь автоматически запустить сервер jupyter при загрузке. (ec2, amazon linux)

Я получил сервер jupyter, работающий и правильно загружающий все ядра conda.

и я попытался запустить jupyter при загрузке. (пробовал rc.local, systemd, crontab и все не загружает ядра conda и загружает только базовые ядра python2 и python3)

Я проследил это до nb_conda_kernels, не обнаружив возможности вызвать conda при загрузке, как показано ниже:

Oct 30 01:07:38 ip-172-31-17-102 rc.local: [E 01:07:38.816 NotebookApp] [nb_conda_kernels] couldn't call conda:
Oct 30 01:07:38 ip-172-31-17-102 rc.local:    [Errno 2] No such file or directory: 'conda': 'conda'
Oct 30 01:07:38 ip-172-31-17-102 rc.local: [I 01:07:38.816 NotebookApp] [nb_conda_kernels] enabled, 0 kernels found
Oct 30 01:07:39 ip-172-31-17-102 rc.local: [I 01:07:39.645 NotebookApp] Loading IPython parallel extension
Oct 30 01:07:39 ip-172-31-17-102 rc.local: [I 01:07:39.701 NotebookApp] JupyterLab extension loaded from /home/ec2-user/anaconda3/lib/python3.7/site-packages/jupyterlab
Oct 30 01:07:39 ip-172-31-17-102 rc.local: [I 01:07:39.702 NotebookApp] JupyterLab application directory is /home/ec2-user/anaconda3/share/jupyter/lab
Oct 30 01:07:40 ip-172-31-17-102 rc.local: [I 01:07:40.061 NotebookApp] [nb_conda] enabled
Oct 30 01:07:40 ip-172-31-17-102 rc.local: [I 01:07:40.061 NotebookApp] Serving notebooks from local directory: /home/ec2-user/browse
Oct 30 01:07:40 ip-172-31-17-102 rc.local: [I 01:07:40.061 NotebookApp] The Jupyter Notebook is running at:
Oct 30 01:07:40 ip-172-31-17-102 rc.local: [I 01:07:40.061 NotebookApp] http://172.31.17.102:8888/
Oct 30 01:07:40 ip-172-31-17-102 rc.local: [I 01:07:40.061 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Самое странное, что когда я убиваю работающий сервер с помощью sudo ss --tulpn | grep 8888 (чтобы найти pid для ноутбука jupyter, который прослушивает порт 8888) и sudo kill -9 {pid} (чтобы убить процесс. проверил, что я его успешно убил), и я перезапускаю сервер с помощью той же команды, что и при загрузке , то jupyter успешно загружает ядра conda, как показано ниже:

[I 01:12:51.369 NotebookApp] [nb_conda_kernels] enabled, 22 kernels found
[I 01:12:51.612 NotebookApp] Loading IPython parallel extension
[I 01:12:51.641 NotebookApp] JupyterLab extension loaded from /home/ec2-user/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 01:12:51.641 NotebookApp] JupyterLab application directory is /home/ec2-user/anaconda3/share/jupyter/lab
[I 01:12:51.791 NotebookApp] [nb_conda] enabled
[I 01:12:51.792 NotebookApp] Serving notebooks from local directory: /home/ec2-user/browse
[I 01:12:51.792 NotebookApp] The Jupyter Notebook is running at:
[I 01:12:51.792 NotebookApp] http://172.31.17.102:8888/
[I 01:12:51.792 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

Я видел один конкретный вопрос об этой проблеме по stackoverflow. (Ноутбук Jupyter не может найти ядро ​​при запуске через /etc/rc.local), но проблема здесь в том, что когда я набираю jupyter kernelspec list, я получаю только python3 и python2, даже если jupyter уже успешно загрузил ядра conda.

python3    /home/ec2-user/anaconda3/share/jupyter/kernels/python3
  python2    /usr/share/jupyter/kernels/python2

Кроме того, я попытался изменить Environmentpecmanager в файле конфигурации jupyter, чтобы увидеть, решает ли он проблему, но этого не произошло. (тот же журнал ошибок, не удалось вызвать conda)

в чем проблема?


person 김진규    schedule 30.10.2020    source источник


Ответы (2)


conda еще не был настроен при выполнении rc.local. Обычно это делается с помощью файла .bashrc. Но можно попробовать просто добавить в rc.local скрипт (перед запуском jupyter):

source /home/ec2-user/anaconda3/etc/profile.d/conda.sh

Это должно настроить использование conda

person FlyingTeller    schedule 30.10.2020

Спасибо, FlyterTeller. Я использовал приведенный ниже код в rc.local вместо того, который вы показали.

if [ -f "/home/ec2-user/anaconda3/etc/profile.d/conda.sh" ]; then
    . "/home/ec2-user/anaconda3/etc/profile.d/conda.sh"
    CONDA_CHANGEPS1=false /home/ec2-user/anaconda3/bin/jupyter notebook --config /home/ec2-user/.jupyter/jupyter_notebook_config.py --allow-root --no-browser
fi

Но вы были правы, говоря, что conda не настраивается при выполнении rc.local. Спасибо, что подтолкнули меня в правильном направлении, поэтому я поддерживаю и принимаю ваш ответ!

person 김진규    schedule 02.11.2020