Моя проблема в том, что каждый раз, когда я начинаю новый проект, мне нужно установить ядро 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 моей системы.)
Используя оба метода, я могу подтвердить, что яв правильном окружении, используя терминал в Atom (я использовал platformio-ide-terminal
), затем установите список пипов колбы # показывает pip, setuptools и колесо установки пипа колба
Наконец, я запускаю ядро IPython.Водород обнаруживает ядро, установленное на системном уровне, чего я и хочу.Однако, если я попытаюсь import flask
внутри сценария .py, я получу ModuleNotFoundError
.
. Я бы хотел, чтобы ядро обнаружило окружение, в котором я нахожусь, и увидело пакеты этогосреда.Другими словами:
- Установите Jupyter, ядра и любые пакеты разработки в моей системной среде * только 1030 *
- Запустите Atom / Hydrogen.Поскольку они установлены на системном уровне, они всегда смогут видеть Jupyter и мои ядра.
- Запустите ядро и просмотрите его в системной среде.
- Убейте ядро
- Переключитесь на новую среду , в которой нет jupyter илиkernels
- Запустите ядро, которое обнаруживает новую среду и видит только пакеты в этой новой среде.
Я думал об отправке параметров ядру при запуске, чтобыукажите, какую папку Python использовать, но она ищет свои функции инициализации в той папке, где она находится.
Возможно, символические ссылки?