Skip to main content

nox-poetry

Project description

PyPI Python Version License

Read the documentation at https://nox-poetry.readthedocs.io/ Tests Codecov

pre-commit Black

Helper functions for using Poetry inside Nox sessions

Installation

You can install nox-poetry via pip from the Python Package Index:

$ pip install nox-poetry

Important: This package must be installed into the same environment that Nox is run from. If you installed Nox using pipx, use the following command to install this package into the same environment:

$ pipx inject nox nox-poetry

Usage

  • The function nox_poetry.install(session, ...) is a drop-in replacement for session.install(...).

  • Packages installed like this must be declared as dependencies using Poetry.

  • Use the constants WHEEL and SDIST to build and install your own package.

For example, the following Nox session runs your test suite:

# noxfile.py
import nox
from nox.sessions import Session
from nox_poetry import install, WHEEL

@nox.session
def tests(session: Session) -> None:
    """Run the test suite."""
    install(session, WHEEL, "pytest")
    session.run("pytest")

More precisely, the session builds a wheel from the local package, installs the wheel as well as the pytest package, and invokes pytest to run the test suite against the installation.

Why?

Compare the session above to one written without this package:

@nox.session
def tests(session: Session) -> None:
    """Run the test suite."""
    session.install(".")
    session.install("pytest")
    session.run("pytest")

This session has several problems:

  • Poetry is installed as a build backend every time.

  • Package dependencies are only constrained by the wheel metadata, not by the lock file. In other words, their versions are not pinned.

  • The pytest dependency is not constrained at all.

You can solve these issues by declaring pytest as a development dependency, and installing your package and its dependencies using poetry install:

@nox.session
def tests(session: Session) -> None:
    """Run the test suite."""
    session.run("poetry", "install", external=True)
    session.run("pytest")

Unfortunately, this approach creates problems of its own:

  • Checks run against an editable installation of your package, i.e. your local copy of the code, instead of the installed wheel your users see.

  • The package is installed, as well as all of its core and development dependencies. This is wasteful when you only need to run black or flake8. It also goes against the idea of running checks in isolated environments.

  • Poetry may decide to install packages into its own virtual environment instead of the one provided by Nox.

nox-poetry uses a third approach. Third-party packages are installed by exporting the lock file in requirements.txt format, and passing it as a constraints file to pip. When installing your own package, Poetry is used to build a wheel, which is then installed by pip. This approach has some advantages:

  • You can declare tools like pytest as development dependencies in Poetry.

  • Dependencies are pinned by Poetry’s lock file, making checks predictable and deterministic.

  • You can run checks against an installed wheel, instead of your local copy of the code.

  • Every tool can run in an isolated environment with minimal dependencies.

  • No need to install your package with all its dependencies if all you need is some linter.

For more details, take a look at this article.

API

nox_poetry.install(session, *args):

Install packages into a Nox session using Poetry.

The nox_poetry.install function installs dependencies into a Nox session, using the versions specified in Poetry’s lock file. The function arguments are the same as those for nox.sessions.Session.install: The first argument is the Session object, and the remaining arguments are command-line arguments for pip install, typically just the package or packages to be installed. The constants WHEEL and SDIST are replaced by a distribution archive built for the local package.

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

nox-poetry is free and open source software, distributed under the terms of the MIT license.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Credits

This project was generated from @cjolowicz’s Hypermodern Python Cookiecutter template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nox-poetry-0.3.0.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nox_poetry-0.3.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file nox-poetry-0.3.0.tar.gz.

File metadata

  • Download URL: nox-poetry-0.3.0.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.6

File hashes

Hashes for nox-poetry-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ae0d798597888d6ae4960a0456fcb95c38c5475294090106565893bd61c5da9c
MD5 6a45c466ca687f1f89a3ebf8fedc10a2
BLAKE2b-256 2c483ec3c217d2dafafab1b3d275b339472a901f0d4a85d96d1924f0c7bcdd79

See more details on using hashes here.

File details

Details for the file nox_poetry-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: nox_poetry-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.6

File hashes

Hashes for nox_poetry-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 50c6ed12841a0c1c93f2ab624791d73c25f8ff90542d8582b4bd8260a181037d
MD5 beb005fe6414a4f68594a48450a8957f
BLAKE2b-256 e297e204248d7aa3724accf48d6b0afdd546e2f1d587ac6814314c12d39f3a8c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page