Python Dockerfile生成映像错误:分发版不包含命名空间包的模块或包
我正在尝试构建python项目的docker映像。我的项目有一个依赖项包,Python Dockerfile生成映像错误:分发版不包含命名空间包的模块或包,python,linux,docker,ubuntu,dockerfile,Python,Linux,Docker,Ubuntu,Dockerfile,我正在尝试构建python项目的docker映像。我的项目有一个依赖项包,“我的包”,需要先安装它。它是一个名称空间包 我在构建这个python项目的docker映像时遇到了这个错误。我几乎可以在Dockerfile中运行pip install XYZ来安装所有东西,但我不确定正确安装本地python命名空间包的方法是什么,这里是my_包 我在一个不是名称空间包的普通python包上遵循了完全相同的步骤,它工作得非常好。有没有在Docker中安装python命名空间包的指针 Dockerfile
“我的包”
,需要先安装它。它是一个名称空间包
我在构建这个python项目的docker映像时遇到了这个错误。我几乎可以在Dockerfile中运行pip install XYZ来安装所有东西,但我不确定正确安装本地python命名空间包的方法是什么,这里是my_包
我在一个不是名称空间包的普通python包上遵循了完全相同的步骤,它工作得非常好。有没有在Docker中安装python命名空间包的指针
Dockerfile:
ARG BASE_IMAGE=ubuntu:18.04
FROM ${BASE_IMAGE} AS compile-image
ARG BASE_IMAGE=ubuntu:18.04
ENV PYTHONUNBUFFERED TRUE
RUN --mount=type=cache,id=apt-dev,target=/var/cache/apt \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
ca-certificates \
g++ \
python3.8-dev \
python3.8-distutils \
python3.8-venv \
openjdk-11-jre-headless \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& cd /tmp \
&& curl -O https://bootstrap.pypa.io/get-pip.py \
&& python3.8 get-pip.py
RUN python3.8 -m venv /home/venv
ENV PATH="/home/venv/bin:$PATH"
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
RUN update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.8 1
COPY my_package/* /tmp/my_package/
WORKDIR /tmp/my_package/
RUN python setup.py install
Docker构建命令:
ARG BASE_IMAGE=ubuntu:18.04
FROM ${BASE_IMAGE} AS compile-image
ARG BASE_IMAGE=ubuntu:18.04
ENV PYTHONUNBUFFERED TRUE
RUN --mount=type=cache,id=apt-dev,target=/var/cache/apt \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
ca-certificates \
g++ \
python3.8-dev \
python3.8-distutils \
python3.8-venv \
openjdk-11-jre-headless \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& cd /tmp \
&& curl -O https://bootstrap.pypa.io/get-pip.py \
&& python3.8 get-pip.py
RUN python3.8 -m venv /home/venv
ENV PATH="/home/venv/bin:$PATH"
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
RUN update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.8 1
COPY my_package/* /tmp/my_package/
WORKDIR /tmp/my_package/
RUN python setup.py install
$DOCKER\u BUILDKIT=1 DOCKER build——文件Dockerfile。
错误:
ARG BASE_IMAGE=ubuntu:18.04
FROM ${BASE_IMAGE} AS compile-image
ARG BASE_IMAGE=ubuntu:18.04
ENV PYTHONUNBUFFERED TRUE
RUN --mount=type=cache,id=apt-dev,target=/var/cache/apt \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
ca-certificates \
g++ \
python3.8-dev \
python3.8-distutils \
python3.8-venv \
openjdk-11-jre-headless \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& cd /tmp \
&& curl -O https://bootstrap.pypa.io/get-pip.py \
&& python3.8 get-pip.py
RUN python3.8 -m venv /home/venv
ENV PATH="/home/venv/bin:$PATH"
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
RUN update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.8 1
COPY my_package/* /tmp/my_package/
WORKDIR /tmp/my_package/
RUN python setup.py install
[+]建筑0.6s(12/12)完工
=>[内部]从Dockerfile 0.0s加载生成定义
=>=>正在传输dockerfile:907B 0.0s
=>[内部]加载。dockerignore 0.0s
=>=>传输上下文:2B 0.0s
=>[内部]加载docker.io/library/ubuntu的元数据:18.04 0.1s
=>[内部]加载生成上下文0.0s
=>=>传输上下文:3.11kB 0.0s
=>[编译图像1/8]来自docker.io/library/ubuntu:18。04@sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9c4361e321b26 0.0s
=>CACHED[compile image 2/8]运行--mount=type=cache,id=apt-dev,target=/var/cache/apt-apt-get-update&&DEBIAN\u-FRONTEND=非交互式apt-get-install--无安装0.0s
=>缓存的[compile image 3/8]运行python3.8-m venv/home/venv 0.0s
=>缓存的[compile image 4/8]运行更新替代方案--安装/usr/bin/python/usr/bin/python3.8 1 0.0s
=>CACHED[compile image 5/8]运行更新选项——安装/usr/local/bin/pip-pip/usr/local/bin/pip3.8 1 0.0s
=>[编译图像6/8]复制我的\u包/*/tmp/my\u包/0.0s
=>[编译图像7/8]WORKDIR/tmp/my_package/0.0s
=>错误[compile image 8/8]运行python setup.py安装0.4s
------
>[编译图像8/8]运行python setup.py安装:
#12 0.370 my_package setup命令中出错:分发版不包含命名空间包“my_package”的模块或包
------
executor无法运行[/bin/sh-c python setup.py install]:退出代码:1
myu包结构:
my_package
├── [4.0K] my_package
│ └── [ 56] __init__.py
└── [ 162] setup.py
setup.py:
from setuptools import setup, find_packages
setup(
name='my_package',
version='0.0.1',
namespace_packages=['my_package'],
packages=find_packages()
)
\uuuu初始化.py文件:
__import__('pkg_resources').declare_namespace(__name__)
在Dockerfile中,您需要放置:
COPY my_package/. /tmp/my_package/