Виртуальная установка Jupyter Notebook использует virtualenv python, но глобальные pip & пакеты - PullRequest
0 голосов
/ 11 июня 2019

У меня есть virtualenv-упакованная оболочка virtualenv. Давайте назовем это тестом. Jupyter устанавливается как через мой глобальный пункт, так и через пункт virtualenv.

$ which python
/usr/bin/python
$ which pip
/usr/local/bin/pip
$ which jupyter
/usr/local/bin/jupyter
$ workon test
(test)$ which python
/home/keon/.virtualenvs/test/bin/python
(test)$ which pip
/home/keon/.virtualenvs/test/bin/pip
(test)$ which jupyter
/home/keon/.virtualenvs/test/bin/jupyter

Теперь у меня есть пакет A, установленный через / usr / local / bin / pip, и пакет B, установленный через /home/keon/.virtualenvs/test/bin/pip. (астропия и ведущий, соответственно, но я не верю, что это имеет значение)

Запускаю ноутбук Jupyter (в оболочке в тесте virtualenv). Затем я запускаю этот код в ячейке:

import astropy
import emcee

: И получите следующую ошибку

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-12-43214a4612e2> in <module>()
      1 import astropy
----> 2 import emcee

ImportError: No module named 'emcee'

В клетке я использую! Команды оболочки:

!which python
!which pip
!which jupyter
!echo "Pip freeze below:\n---------------------"
!pip freeze

Выход

/home/keon/.virtualenvs/ph20/bin/python
/usr/local/bin/pip
/usr/local/bin/jupyter
Pip freeze below:
---------------------
[snip]
astropy==3.0.3

Так что мой питон - virtualenv, но, похоже, он использует глобальный jupyter и pip.

Эта проблема, кажется, существует только в одной из моих виртуальных личностей. Если я использую другую, при работе с той же ячейкой, описанной ранее, вывод будет таким, как ожидалось:

/home/keon/.virtualenvs/test2/bin/python
/home/keon/.virtualenvs/test2/bin/pip
/home/keon/.virtualenvs/test2/bin/jupyter

1 Ответ

1 голос
/ 11 июня 2019

Это распространенная проблема, когда есть несколько установок Jupyter Notebook (глобально и с определенным virtualenv).Насколько я понял, если Jupyter не установлен в virtualenv, терминал начнет глобальную установку Jupyter Notebook, даже если вы дадите команду, когда активирован определенный virtualenv.Таким образом, убедитесь, что Jupyter установлен в «тестовой» среде, и вы даете команду «jupyter notebook», когда активирована «тестовая» среда.

В случае, если вышеуказанное решение не работает, и вы уверены, чтоэкземпляр Jupyter virtualenv работает, и он по-прежнему не может обнаружить определенный пакет, который также установлен в том же virtualenv, вы можете попробовать установить требуемый пакет из кода, используя метод, предложенный здесь: Установка модуля pythonв коде

Если оба из них не удастся, я бы предложил вам создать новый virtualenv, установить в него jupyter, установить в него другие необходимые вам пакеты и снова попробовать запустить экземпляр jupyter, пока virtualenvактивен.

Если вам неудобно управлять несколькими virtualenv с помощью оболочки virtualenv, и вы часто получаете такие ошибки, особенно с jupyter, я бы посоветовал вам использовать Anaconda и создавать virtualenv с помощью графического интерфейса пользователя.Более чистая система управления и гарантирует, что ваш экземпляр Jupyter использует правильный virtualenv.

...