diff --git a/python-base/Dockerfile b/python-base/Dockerfile
new file mode 100644
index 0000000..74828b3
--- /dev/null
+++ b/python-base/Dockerfile
@@ -0,0 +1,25 @@
+# Copyright (c) 2020 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM python:3.7-slim
+
+RUN pip --no-cache-dir install bindep
+
+ONBUILD COPY --from=builder /output /output
+ONBUILD COPY --from=builder /etc/apt /etc/apt
+ONBUILD RUN apt-get update && \
+            apt-get install -y $(bindep -b -f /output/bindep.txt) && \
+            pip install --no-index /output/wheels/*.whl && \
+            apt-get clean all
diff --git a/python-builder/Dockerfile b/python-builder/Dockerfile
new file mode 100644
index 0000000..27fa119
--- /dev/null
+++ b/python-builder/Dockerfile
@@ -0,0 +1,34 @@
+# Copyright (c) 2020 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM python:3.7-slim
+
+RUN apt-get update && \
+    apt-get install -y git && \
+    pip install bindep
+
+ONBUILD ADD . /build
+ONBUILD ADD bindep.txt /output/bindep.txt
+
+ONBUILD RUN test -f /build/setup-repos.sh && /build/setup-repos.sh || true
+ONBUILD RUN apt-get update && \
+            apt-get install -y $(bindep -b -f /build/bindep.txt compile)
+
+ONBUILD RUN test -f "/build/build-requirements.txt" && \
+            pip install --constraint=/build/constraints.txt \
+                        --requirement=/build/build-requirements.txt || true
+ONBUILD RUN pip wheel --wheel-dir=/output/wheels \
+                      --constraint=/build/constraints.txt \
+                      --requirement=/build/requirements.txt
diff --git a/zuul.d/python-base.yaml b/zuul.d/python-base.yaml
new file mode 100644
index 0000000..2a98efb
--- /dev/null
+++ b/zuul.d/python-base.yaml
@@ -0,0 +1,31 @@
+- job:
+    name: docker-images:build:python-base
+    parent: vexxhost-build-docker-image
+    provides: docker-images:image:python-base
+    vars: &id001
+      docker_images:
+      - context: python-base/
+        repository: vexxhost/python-base
+    files: &id002
+    - ^python-base/.*
+- job:
+    name: docker-images:upload:python-base
+    parent: vexxhost-upload-docker-image
+    provides: docker-images:image:python-base
+    vars: *id001
+    files: *id002
+- job:
+    name: docker-images:promote:python-base
+    parent: vexxhost-promote-docker-image
+    vars: *id001
+    files: *id002
+- project:
+    check:
+      jobs:
+      - docker-images:build:python-base
+    gate:
+      jobs:
+      - docker-images:upload:python-base
+    promote:
+      jobs:
+      - docker-images:promote:python-base
diff --git a/zuul.d/python-builder.yaml b/zuul.d/python-builder.yaml
new file mode 100644
index 0000000..5b38fd1
--- /dev/null
+++ b/zuul.d/python-builder.yaml
@@ -0,0 +1,32 @@
+- job:
+    name: docker-images:build:python-builder
+    parent: vexxhost-build-docker-image
+    provides: docker-images:image:python-builder
+    vars: &id001
+      docker_images:
+      - context: python-builder/
+        repository: vexxhost/python-builder
+    files: &id002
+    - ^python-builder/.*
+- job:
+    name: docker-images:upload:python-builder
+    parent: vexxhost-upload-docker-image
+    provides: docker-images:image:python-builder
+    vars: *id001
+    files: *id002
+- job:
+    name: docker-images:promote:python-builder
+    parent: vexxhost-promote-docker-image
+    vars: *id001
+    files: *id002
+- project:
+    check:
+      jobs:
+      - docker-images:build:python-builder
+    gate:
+      jobs:
+      - docker-images:upload:python-builder
+    promote:
+      jobs:
+      - docker-images:promote:python-builder
+