jupyter не использует версию, установленную pyenv

Так что все отлично работало на другой машине. Пришлось заставить его работать на моем рабочем столе. pyenv установлен там с разными версиями. Я только что добавил miniconda3-latest, который хорошо отображается в приглашении (в каталоге ниже есть файл .python-version). Затем запустил pip install pymysql после этого приглашения. Когда я запускаю python сейчас в этом приглашении, он отлично импортирует:

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 12:22:00) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
>>> 

... но если я запущу блокнот jupyter

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ jupyter notebook
[I 13:38:28.714 NotebookApp] [nb_conda_kernels] enabled, 2 kernels found
[I 13:38:29.216 NotebookApp] The port 8888 is already in use, trying another port.
[I 13:38:29.224 NotebookApp] [nb_conda] enabled
[I 13:38:29.278 NotebookApp] [nb_anacondacloud] enabled
[I 13:38:29.337 NotebookApp] ✓ nbpresent HTML export ENABLED
[W 13:38:29.337 NotebookApp] ✗ nbpresent PDF export DISABLED: No module named 'nbbrowserpdf'
[I 13:38:29.340 NotebookApp] Serving notebooks from local directory: /home/cardamom/Desktop/Project
[I 13:38:29.340 NotebookApp] 0 active kernels 
[I 13:38:29.341 NotebookApp] The Jupyter Notebook is running at: http://localhost:8889/
[I 13:38:29.341 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

и попробуйте импортировать, я получаю

ImportError                               Traceback (most recent call last)
<ipython-input-1-a4103d9b2333> in <module>()
----> 1 import pymysql

ImportError: No module named 'pymysql'

Как я уже сказал, он отлично работает на другой машине. Кто-нибудь знает, как заставить Jupyter Notebook после запуска правильно подобрать версию, которую pyenv читает из своего файла .python-version?


person cardamom    schedule 11.05.2017    source источник
comment
У вас есть 2 ядра в jupyter. Вы выбрали правильный для этого ноутбука?   -  person Maarten Fabré    schedule 11.05.2017
comment
@MaartenFabre спасибо за предложение, я пробовал их оба, и ни один из них не работал, ни один из них, похоже, не содержал модуль pymysql в miniconda-3-latest.   -  person cardamom    schedule 11.05.2017


Ответы (4)


В то же время я на 90% решил это. Из этой статьи по теме Я нашел этот pyenv, который никогда раньше не пробовал. Итак, вы можете видеть, что есть две вещи, которые можно назвать.

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ which jupyter
/home/cardamom/.pyenv/shims/jupyter

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ pyenv which jupyter
/home/cardamom/.pyenv/versions/miniconda3-latest/bin/jupyter

Блокнот Jupyter, кажется, вызывает первый, но если я ввожу второй путь со словом «блокнот» после if, он запускается нормально, и доступно только одно ядро, в котором есть мой модуль pymysql:

import sys
print (sys.version)

3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 12:22:00) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

Просто нужно решить, как вызвать это напрямую без всего пути.

Обновление 15.05.17

Ну, я починил, или помог починить сам -

rm -rf /home/cardamom/.pyenv/shims/jupyter*

Затем закрыл и перезапустил терминал.

Конечно, это был не самый чистый способ, надеюсь, он не сломал что-то еще, но теперь, по крайней мере, просто запуск jupyter notebook запускает блокнот, содержащий активное ядро ​​​​в моем каталоге miniconda3-latest. Две команды which, как указано выше, по-прежнему возвращают одно и то же, но теперь, если я перечислю вещи jupyter в первом каталоге:

(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ ll /home/cardamom/.pyenv/shims/jupyter*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-bundlerextension*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-console*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-kernelspec*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-migrate*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-nbconvert*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-nbextension*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-notebook*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-qtconsole*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-run*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-serverextension*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-troubleshoot*
-rwxr-xr-x 1 cardamom cardamom 402 May 15 15:55 /home/cardamom/.pyenv/shims/jupyter-trust*
(miniconda3-latest) cardamom@pegasus ~/Desktop/Project $ 

...вы можете видеть, что все эти файлы только что воссоздали себя всего несколько минут назад.

person cardamom    schedule 11.05.2017
comment
вы также можете зарегистрировать ядро ​​​​в своей среде jupyter с помощью этого ответа - person Maarten Fabré; 11.05.2017

Я нашел эту суть, которая довольно проста:

#!/bin/sh

if [ "$PYENV_VERSION" -ne "" ]
then
    name=`pyenv version-name`
    python=`pyenv which python`
else
    name=`basename "$VIRTUAL_ENV"`
    python="$VIRTUALENV/bin/python"
fi
jupyterdir=$(jupyter --data-dir)
kerneldir="${jupyterdir}/kernels/${name}"

echo "Installing jupyter kernel file $name for $python to $kerneldir ..."

pip install ipykernel
mkdir -p "$kerneldir"
cat > "$kerneldir"/kernel.json <<EOF
{
    "argv": [ "$python", "-m", "ipykernel", "-f", "{connection_file}" ],
    "display_name": "$name", 
    "language": "python"
}
EOF

cat "$kerneldir"/kernel.json 

Как только я понял, что там происходит, я установил плагин pyenv pyenv-jupyter-kernel и мне это очень нравится.

Шаг 3 из этого блога было довольно информативно, хотя я не следовал инструкциям. Я прочитал их и понял другой взгляд на эту суть. Всегда полезно выслушать несколько мнений, прежде чем слепо копировать пасту. Там много устаревших инструкций!

person Bruno Bronosky    schedule 28.03.2020

Пожалуйста, проверьте, какую версию python использует ядро ​​ноутбука. В большинстве случаев эта ошибка возникает из-за библиотеки, установленной для python3, а работающая версия ядра ноутбука может быть Python2.

person sakthirengaraj    schedule 11.05.2017

Проверьте, указана ли конкретная версия python в .local/share/jupyter/kernels/python3/kernel.json. Удаление этого файла помогло мне jupyter-notebook использовать версию Python, установленную с помощью pyenv.

person Felix Crazzolara    schedule 14.02.2020