Как отделить пакеты для личного пользования от релевантных для проекта в одной виртуальной среде? - PullRequest
3 голосов
/ 04 апреля 2020

Вот типичный рабочий процесс при работе с виртуальными средами:

1) Создать виртуальное окружение:

python3 -m venv venv

2) Активировать его:

source venv/bin/activate

3) Установить необходимые требования:

(venv): pip install ...

4) (написать код пакета)

5) Заморозить Код / Создать пакет зависимостей.

В последний момент выбранный инструмент python оборачивает все пакеты из моей виртуальной среды, установленной в точке 3).

И вот моя проблема. Что если некоторые требования, установленные в пункте 3), являются только частными пакетами, которые используются только мной для целей разработки? Например, чтобы редактор Spyder работал в разных виртуальных средах, мне нужно установить ядра spyder. Они не нужны для моего пакета и не нужны другим разработчикам, если они не используют этот редактор. Однако, когда я

(venv): pip freeze > requirements.txt

, я получаю файл require.txt с включенным в него пакетом spyder-kernels, а затем

(venv2): pip install -r requirements.txt

Устанавливает все пакеты из файла require.txt, если только я не удаляю ненужные строки вручную.

Существует ли какой-либо флаг для установки pip, который может указать pip установить некоторые пакеты как скрытые / частные для процесса замораживания / упаковки? Или любой другой автоматический c обходной путь, который мог бы достичь моей цели? Идеальный сценарий будет выглядеть примерно так:

python3 -m venv venv
source venv/bin/activate
(venv): pip install important_packages
(venv): pip install -privateFLAG spyder-kernels
(venv): pip freeze > requirements.txt  # (stores important_packages)
(venv): pip freeze -privateFLAG > private_requirements.txt

, и тогда можно будет воссоздать зависимости среды с помощью: '' 'pip install -r needs.txt' '' или '' 'pip install - r needs.txt private_requirements.txt '' 'если ему нужно что-то в private_requirements.txt.

Можем ли мы сделать какой-то похожий трюк для замораживания кода?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вы можете поэкспериментировать с одним из следующих инструментов, посмотрите, соответствует ли он вашим потребностям:

Они должны заполнить requirements.txt только зависимостями для этого одного проекта.

0 голосов
/ 04 апреля 2020

Мне не известны такие функции в pip.

Когда вы устанавливаете "закрытый" пакет, вы можете добавить указанный пакет в файл, например private_requirements.txt. Затем с помощью простого сценария оболочки вы можете отфильтровать вывод pip freeze таким образом, чтобы, если пакет появился в private_requirements.txt, соответствующая строка была удалена из вывода стоп-кадра.

Это не должно быть сложно например, вы можете использовать:

pip freeze | grep -v -f private_requirements.txt > requirements.txt
...