forked from mapnik/python-mapnik
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
56 lines (47 loc) · 1.62 KB
/
Dockerfile
File metadata and controls
56 lines (47 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
FROM python:3.14-rc-bookworm
# Build-time proxy support (affects apt/uv/etc. during docker build)
ARG http_proxy
ARG https_proxy
ARG no_proxy
ENV http_proxy=${http_proxy} \
https_proxy=${https_proxy} \
no_proxy=${no_proxy} \
HTTP_PROXY=${http_proxy} \
HTTPS_PROXY=${https_proxy} \
NO_PROXY=${no_proxy}
# 添加 Debian sid 仓库以获取 Mapnik 4.2
RUN echo "deb http://deb.debian.org/debian sid main" >> /etc/apt/sources.list.d/sid.list && \
echo 'Package: *\nPin: release a=sid\nPin-Priority: 100' > /etc/apt/preferences.d/sid
# 安装必要的工具
RUN apt-get update && \
apt-get install -y \
build-essential \
pkg-config
# 安装 Mapnik 4.2 和必要的开发工具
# libmapnik-dev 会自动安装大部分依赖,但我们需要确保所有构建依赖都存在
RUN apt-get install -y -t sid \
libmapnik-dev
# 需要额外的依赖写在这里,避免缓存失效。上面的依赖安装起来时间很长
# 添加可能缺失的构建依赖
RUN apt-get install -y \
libbz2-dev \
libssl-dev \
libboost-dev \
libboost-filesystem-dev \
libboost-program-options-dev \
libboost-regex-dev \
libboost-system-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# 复制依赖文件
COPY pyproject.toml .
COPY uv.lock* ./
# 复制源代码文件(构建本地包所需)
COPY src/ src/
COPY setup.py .
COPY build.py .
COPY packaging/ packaging/
# 安装 Python 依赖(包括构建本地 python-mapnik)
# 使用 --verbose 显示详细的编译日志
RUN uv sync --frozen --no-dev --verbose || uv sync --no-dev --verbose