Является ли загрузка виртуальных сред в Jupyter путем добавления к пути Python - плохая идея?

В настоящее время я использую записные книжки 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), каждый из которых имеет свою собственную виртуальную среду. Я столкнулся с двумя неудовлетворительными решениями для достижения этой цели:

  1. Установите Jupyter в каждую виртуальную среду.

    • Slow installation process
    • Требуется настройка расширений каждый раз
    • Пустая трата дискового пространства, поскольку с течением времени устанавливается несколько версий
    • Заполняет виртуальную среду нерелевантными пакетами
  2. Создайте IPyKernel в каждой виртуальной среде.

    • Requires installing IPyKernel in the virtual environment, which installs most of Jupyter anyway
    • Опять же, заполнение среды нерелевантными пакетами
    • Требуется дополнительная команда для регистрации нового ядра в Jupyter
    • Требует, чтобы пользователь назвал каждое ядро ​​вручную
    • Требует от пользователя выбора соответствующего ядра каждый раз при открытии записной книжки.

Мое третье решение - изменить указанную выше конфигурацию для pipenv, чтобы виртуальная среда находилась в рабочем каталоге. Таким образом, мое общее ядро ​​может использовать те же пути для нацеливания на соответствующую виртуальную среду. Я добавляю соответствующие пути к sys.path в Jupyter. Это ужасная идея?


person user126350    schedule 29.01.2019    source источник


Ответы (1)


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

person Matt Whitehead    schedule 29.01.2019
comment
Я ожидаю, что это не повлияет отрицательно на других, поскольку недопустимые пути игнорируются sys.path, хотя это может их сбить с толку. Тем не менее, я также мог бы настроить его для запуска при загрузке только для моей установки Jupyter. Я не уверен, что понимаю, как решение для символической ссылки могло бы получить пакеты в виртуальной среде, работающей в Jupyter? - person user126350; 29.01.2019