Virtualenv:глобальные пакеты сайта против пакетов сайта в виртуальной среде
-
13-09-2019 - |
Вопрос
- Если у меня установлен определенный пакет как в глобальных пакетах сайта, так и в локальном, какой пакет будет импортирован?Это вообще сработает или я получу сообщение об ошибке?
- Какие пакеты я должен поместить в глобальные пакеты сайта, а какие - в локальный?
Решение
Предыдущий ответ завершает вопрос 1, но игнорирует вопрос 2.
Общая наилучшая практика, которую я видел, для определения того, какие пакеты размещать глобально:
Во-первых, основные пакеты Python, поскольку они не изменяются из-за проблем с обратной несовместимостью, если только вы не обновляете основную версию, и вы захотите, чтобы все исправления безопасности из обновления python автоматически применялись к вашим виртуальным компьютерам.
Во-вторых, пакеты, которые затрудняют установку easy_install или pip в каждый отдельный virtualenv, но которые меняются не очень часто - например, MySQLdb / psycopg и PIL.
Практически все остальное должно входить в пакеты вашего virtualenv (я настоятельно рекомендую использовать пип файлы требований и virtualenvwrapper ( виртуальная оболочка ) чтобы сделать это минимально болезненным и простым в настройке на других машинах).
Другие советы
Вновь созданная виртуальная среда по умолчанию имеет доступ к глобальному каталогу site-packages, если только не создана с помощью --no-site-packages.Вызов easy_install (установка новых пакетов) при активации определенной среды вызовет локальную перезапись уже существующих пакетов в глобальных site-пакетах (аналогично наследованию).Среда будет использовать свои собственные локальные пакеты, при отсутствии - глобальные.