Частичное управление зависимостями в python

Я управляю довольно большим Python-проектом с большим количеством зависимостей, который предназначен для запуска в док-контейнере TensorFlow. Распространенным способом определения того, какие зависимости должны быть установлены в рабочей среде, является файл блокировки, создаваемый такими инструментами, как Pipenv или Poetry. При создании такого файла блокировки вы обычно указываете все зависимости python, чтобы избежать конфликтов между пакетами. Но поскольку док-контейнер TensorFlow поставляется с предустановленным TensorFlow и всеми его зависимостями, я бы очень хотел исключить эти пакеты из моего файла блокировки, чтобы избежать двойной установки. Однако я все еще хочу, чтобы мой инструмент управления зависимостями учитывал наличие определенной версии TensorFlow при разрешении зависимостей для файла блокировки.

Есть ли способ генерировать файлы блокировки, которые учитывают предустановленные пакеты в среде, не включая их в файл блокировки?

0 ответов

Если вы устанавливаете свои пакеты в образ TensorFlow Docker, то зависимость TensorFlow уже "заблокирована" именем образа и тегом, например tensorflow/tensorflow:2.0.0. Поэтому укажите другие зависимости Python в своемPipfile.

Например, ваш Dockerfile может содержать:

FROM tensorflow/tensorflow:2.0.0-py3

RUN pip3 install pipenv
COPY Pipfile Pipfile.lock /yourproject
WORKDIR /yourproject

RUN pipenv --three --site-packages
RUN pipenv install 

Затем у вас есть TensorFlow и все другие ваши зависимости:

$ docker build . -t yourproject && docker run -it yourproject bash
# build info not shown
root@b04fc204d239:/yourproject# pipenv run python -c "import tensorflow; print(tensorflow.__version__)"
Loading .env environment variables…
2.0.0
Другие вопросы по тегам