#python #docker #pip #package
#python #docker #pip #пакет
Вопрос:
У меня есть корневой образ, который помечен как repo_a/image_a
. Его Dockerfile выглядит так
FROM some_repo/some_image
# ...
RUN pip3 install https://$authToken:x-oauth-basic@github.com/library_a/archive/v0.0.1.tar.gz
# ...
library_a
это пользовательская библиотека python, используемая setuptools
для установки. Его установочный файл выглядит следующим образом
setuptools.setup(
name=library_a
version=...,
author=...,
author_email=...,
description=...,
url=...,
entry_points={
'console_scripts': [
'luigim = ....luigim:main',
'luigip = ....luigip:main'
]
},
include_package_data=True,
packages=setuptools.find_packages(),
install_requires=[
'luigi==3.0.3',
'boto3==1.18.52',
'influxdb',
'boto',
'paramiko',
'termcolor',
'retrying'
]
)
Теперь я использую этот корневой образ для создания другого изображения с тегом like repo_a/custom_image
. Его файл Dockerfile выглядит следующим образом
FROM repo_a/image_a
# ...
RUN pip3 install https://$authToken:x-oauth-basic@github.com/library_b/archive/v0.0.45.tar.gz
RUN pip3 install https://$authToken:x-oauth-basic@github.com/library_c/archive/v1.0.43.tar.gz
# ...
Обе библиотеки a и b являются пользовательскими библиотеками Python, также использующими setuptools для установки. Их setup.py
s выглядят как
setuptools.setup(
name=library_b, #or c
version=...,
author=...,
author_email=...,
description=...,
url=...,
include_package_data=True,
packages=setuptools.find_packages(),
install_requires=[
'luigi==3.0.3'
]
)
Это успешно построено, но моя проблема в том, что library_a
установленный в repo_a/image_a
больше не установлен repo_a/custom_image
. Чтобы быть более конкретным:
Библиотеки library_b
и library_c
правильно установлены в конечном изображении — я вижу оба в результате pip3 freeze
. К сожалению, я не могу их использовать, поскольку они зависят от library_a
того, что не отображается в pip3 freeze
выходных данных
Если я удалю pip3
установки из второго файла docker, library_a
их можно найти в конечном изображении — я вижу library_a
результат pip3 freeze
и могу успешно импортировать их в python3 REPL.
Итак, что здесь происходит? похоже, что второй набор pip3 install
теней pip3 install
, по которому прошел первый repo_a/image_a
. Почему это так? Что я делаю не так?
Комментарии:
1. Вы пробовали установить все три библиотеки в
repo_a/custom_image
? Просто чтобы проверить, не вызывают ли они удаление library_a2. @QuentinCaffeino К сожалению, это не вариант
3. Я понимаю, что у вас есть конечная цель, но я попросил сделать это только для проверки моего предположения. Может ли быть так, что запуск pip install также удаляет этот пакет. Также для анализа сборки вы можете использовать программу ‘dive’. Он показывает каждый слой, какой commahd был выполнен и что изменилось в файловой системе.
4. @QuentinCaffeino Я исправил это хакерским способом, но я думаю, что буду придерживаться этого. Мне пришлось переустановить library_a во втором dockerfile plus
pip3 install boto
, иpip3 install retrying
поскольку они также не были установлены послеlibrary_a
установки, хотя они включены в обязательный список.5. Это github.com/wagoodman/dive инструмент потрясающий