Skip to main content

Packaging Projects - Overview

Module 05 Project Track

The lessons in this module covered the theory. These projects make it concrete: you will build a real Python package, wire up a full CI pipeline, and publish it to TestPyPI. Every requirement maps directly to something engineers do on production packages.

Why These Projects Exist

Reading about poetry.lock and understanding poetry.lock under deadline pressure are different skills. The gap between them is closed by doing the work end-to-end: writing the code, hitting the errors, fixing them, and seeing the package appear on a package index.

These projects are not tutorial-walkthroughs. They specify requirements and give you starter code. How you implement the requirements is up to you. The rubric checks outcomes, not process.

Projects in This Track

ProjectWhat You BuildSkills Covered
01 - Publish Internal Utility Packagepyutils-engineersofai - a typed utility library with 3 modules, full test suite, CI pipeline, and TestPyPI releasesrc/ layout, pyproject.toml, hatchling, poetry.lock, pytest coverage, changelog, TestPyPI publish, GitLab CI

Prerequisites

Before starting these projects, you should have completed:

  • Lesson 01 - venv and virtual environments
  • Lesson 02 - pip and requirements.txt
  • Lesson 03 - pyproject.toml deep dive
  • Lesson 04 - Poetry
  • Lesson 05 - Semantic Versioning
  • Lesson 06 - Publishing Packages (this lesson covers the TestPyPI workflow you will use)

You also need:

  • A TestPyPI account at test.pypi.org (free, separate from pypi.org)
  • Poetry installed via pipx install poetry
  • A GitLab account (for the CI pipeline requirement)

How Projects Are Assessed

Each project has numbered requirements (R1, R2, ...). Each requirement is independently assessable. The grading scale:

ScoreMeaning
CompleteAll requirements met and verified
FunctionalCore requirements (R1–R5) met; stretch requirements (R6–R8) incomplete
PartialPackage builds and installs; tests incomplete or coverage below threshold
Not startedProject not attempted

There are no trick requirements. If you can run pip install --index-url https://test.pypi.org/simple/ pyutils-engineersofai and then python -c "from pyutils_engineersofai.strings import slugify; print(slugify('Hello World'))" and get hello-world, you have met the core intent.

Project Environment Setup

# Install Poetry (if not already installed)
pipx install poetry

# Create a TestPyPI account
# https://test.pypi.org/account/register/

# Create a TestPyPI API token
# https://test.pypi.org/manage/account/token/
# Scope: "Entire account" for first publish (switch to project-scoped after first upload)

# Configure Poetry for TestPyPI
poetry config repositories.testpypi https://test.pypi.org/legacy/
poetry config pypi-token.testpypi pypi-xxxxx...

# Verify
poetry config --list | grep testpypi
© 2026 EngineersOfAI. All rights reserved.