Запуск одного ядра IPython в нескольких виртуальных средах
Моя проблема в том, что каждый раз, когда я начинаю новый проект, мне нужно установить ядро IPython в виртуальную среду этого проекта. Это проблема, потому что ядро и все его зависимости находятся в файле require.txt каждого проекта, даже если они нужны только для разработки, а не для самого проекта. Например, для продвижения простого одностраничного веб-сайта в Heroku потребуется только flask
, gunicorn
и их зависимости. Но поскольку я занимаюсь разработкой с использованием Jupyter, это также "требует" всех пакетов, которые поставляются с ядром IPython:
backcall, colorama, parso, jedi, decorator, pickleshare, six, ipython-genutils,
traitlets, wcwidth, prompt-toolkit, pygments, ipython, tornado, jupyter-core, pyzmq,
python-dateutil, jupyter-client, ipykernel
Проблема не совсем в использовании виртуальных сред. Я могу изменить среду в Atom, и если я запускаю свой скрипт из терминала, он работает просто отлично. Но когда я пытаюсь запустить его непосредственно в записной книжке Jupyter, ядро системного уровня не видит функции в виртуальной среде.
Вот как воссоздать проблему. Сначала создайте виртуальную среду. я использую pipenv
, но также пытался virtualenvwrapper
с такими же результатами. Затем переключитесь на окружающую среду. Я попробовал два метода, и оба работали:
- Запустите atom нормально и используйте пакет atom-python-virtualenv для выбора моей виртуальной среды (требуется
virtualenvwrapper-win
и некоторые настройки). - Используя pipenv, запустите
pipenv run atom .
в windows cmd. (Некоторые пакеты Atom могут теперь найти свои зависимости с этим решением. Я исправил это, отредактировав соответствующие параметры, чтобы всегда указывать на python моей системы.)
Используя оба метода, я могу подтвердить, что нахожусь в правильной среде, используя терминал в атоме (я использовал platformio-ide-terminal
), затем установите список пунктов колбы # показывает pip, setuptools и колбу установки колец колеса
Наконец, я запускаю ядро IPython. Водород обнаруживает ядро, установленное на системном уровне, чего я и хочу. Однако, если я попытаюсь import flask
внутри скрипта.py я получаю ModuleNotFoundError
,
Я хотел бы, чтобы ядро обнаружило среду, в которой я нахожусь, и увидело пакеты этой среды. Другими словами:
- Устанавливайте Jupyter, ядра и любые пакеты разработки только в моей системной среде
- Запустить Атом / Водород. Поскольку они установлены на системном уровне, они всегда смогут видеть Jupyter и мои ядра.
- Запустите ядро и просмотрите его в системной среде.
- Убить ядро
- Переключитесь на новую среду , в которой нет ядра или ядра.
- Запустите ядро, которое обнаружит новую среду и увидит только пакеты в этой новой среде.
Я думал об отправке параметров ядру при запуске, чтобы указать, какую папку Python использовать, но она ищет свои функции инициализации в той папке, где она находится.
Симлинки может быть?