В настоящее время я использую записные книжки Jupyter с виртуальными средами Python и pipenv. Я использую следующий код в качестве решения для загрузки виртуальной среды в свой блокнот Jupyter:
import sys
sys.path = ['./.venv/lib/python37.zip',
'./.venv/lib/python3.7',
'./.venv/lib/python3.7/lib-dynload',
'./.venv/lib/python3.7/site-packages',
] + sys.path
Это плохая практика? Если да, то каковы проблемы, риски, побочные эффекты и т. Д.?
(Обратите внимание, что это работает, потому что я настроил pipenv для хранения среды в моем рабочем каталоге через echo "export PIPENV_VENV_IN_PROJECT=1" >> ~/.bash_profile
)
Как я сюда попал?
Моя цель - использовать записные книжки Jupyter для множества проектов Python (и R), каждый из которых имеет свою собственную виртуальную среду. Я столкнулся с двумя неудовлетворительными решениями для достижения этой цели:
Установите Jupyter в каждую виртуальную среду.
- Slow installation process
- Требуется настройка расширений каждый раз
- Пустая трата дискового пространства, поскольку с течением времени устанавливается несколько версий
- Заполняет виртуальную среду нерелевантными пакетами
Создайте IPyKernel в каждой виртуальной среде.
- Requires installing IPyKernel in the virtual environment, which installs most of Jupyter anyway
- Опять же, заполнение среды нерелевантными пакетами
- Требуется дополнительная команда для регистрации нового ядра в Jupyter
- Требует, чтобы пользователь назвал каждое ядро вручную
- Требует от пользователя выбора соответствующего ядра каждый раз при открытии записной книжки.
Мое третье решение - изменить указанную выше конфигурацию для pipenv, чтобы виртуальная среда находилась в рабочем каталоге. Таким образом, мое общее ядро может использовать те же пути для нацеливания на соответствующую виртуальную среду. Я добавляю соответствующие пути к sys.path в Jupyter. Это ужасная идея?