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

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

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


person Harald Husum    schedule 10.05.2019    source источник
comment
Как вы думаете, почему будут двойные установки? Если вы устанавливаете из файла требований с помощью pip -r и некоторые зависимости уже удовлетворены, он не установит их снова. Если вы хотите принять диапазон версий вместо конкретной версии, это возможно< /а>. Это при условии, что вы не устанавливаете в virtualenv, по крайней мере.   -  person user10186512    schedule 10.05.2019


Ответы (1)


Если вы устанавливаете свои пакеты в образ 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
person Tom Phillips    schedule 14.10.2019