Poetry Guider¶
This document provides a guide to understanding Poetry, setting up the project locally, and creating installation packages for the Biofilter project.
What is Poetry?¶
Poetry is a modern dependency management tool for Python projects. It simplifies the process of managing dependencies, creating reproducible environments, and publishing packages. Poetry replaces traditional tools like requirements.txt, setup.py, and virtualenv by consolidating all these functionalities into a single, streamlined workflow.
Why Use Poetry?¶
Simplified Dependency Management: - Define all dependencies in a single
pyproject.tomlfile. - Automatically resolves dependency conflicts and locks exact versions.Reproducible Environments: - The
poetry.lockfile ensures consistent environments across different systems.Built-In Virtual Environment Management: - Poetry handles virtual environments automatically, isolating dependencies.
Integrated Packaging: - Easily create and publish packages to PyPI or distribute locally.
Setting Up the Project Locally¶
Step 1: Install Poetry¶
Follow the official Poetry installation instructions:
curl -sSL https://install.python-poetry.org | python3 -
After installation, verify the installation:
poetry --version
If you’re on Windows, you can use the official installer or refer to the Poetry documentation.
Step 2: Clone the Repository¶
git clone https://github.com/RitchieLab/biofilter.git
cd biofilter
Step 3: Install Project Dependencies¶
Poetry will automatically create a virtual environment and install all dependencies specified in pyproject.toml:
poetry install
Important
Before running poetry install, ensure you are using the desired Python version. This can either be the globally installed Python version or a specific version managed through tools like pyenv. If using pyenv, set the Python version for the project using pyenv local <desired-version> before proceeding with the installation.
Step 4: Activate the Virtual Environment¶
To activate the virtual environment created by Poetry, run:
poetry shell
You can now use the installed dependencies and run project-specific commands within this environment.
Step 5: Run the Project¶
For example, to run one of the entry-point scripts defined in the project:
poetry run biofilter
Creating Installation Packages¶
Step 1: Validate the Project Setup¶
Ensure the pyproject.toml file is properly configured with all required metadata, dependencies, and entry points. Example fields to check:
- name
- version
- description
- authors
- dependencies
- scripts (for entry points like biofilter or loki-build).
Example entry in pyproject.toml:
[tool.poetry.scripts]
biofilter = "biofilter_modules.biofilter:main"
loki-build = "loki_modules.loki_build:main"
Step 2: Build the Package¶
Run the following command to generate distribution files (.tar.gz and .whl) in the dist/ directory:
poetry build
This command will create:
- A source distribution (.tar.gz).
- A wheel distribution (.whl).
Step 3: Verify the Package¶
To test the installation of the package locally, use:
pip install dist/biofilter-<version>.whl
Replace <version> with the version number of the package.
Step 4: Publish the Package¶
To publish the package to PyPI (or a private repository), use:
poetry publish --build
You will need valid credentials for PyPI or the repository you are targeting. To configure these, run:
poetry config pypi-token.pypi <your-token>
Automating the Workflow¶
You can create a simple script or CI pipeline to automate the steps for building and publishing the package. For example:
#!/bin/bash
# build-and-publish.sh
set -e
echo "Building the Biofilter package..."
poetry build
echo "Publishing the package to PyPI..."
poetry publish --build
echo "Done!"
Make this script executable:
chmod +x build-and-publish.sh
Run it:
./build-and-publish.sh
Managing Dependencies¶
Adding a Dependency¶
To add a new dependency to the project, use:
poetry add <package-name>
Adding a Development Dependency¶
To add a dependency for development purposes (e.g., linters, testing frameworks):
poetry add --group dev <package-name>
Removing a Dependency¶
To remove a dependency from the project:
poetry remove <package-name>
Reproducibility¶
If someone else clones the repository, they only need to run:
poetry install
This command reads the pyproject.toml and poetry.lock files to recreate the exact same environment.