Skip to content

Instantly share code, notes, and snippets.

@CarlosDomingues
Last active April 22, 2024 09:28
Show Gist options
  • Star 74 You must be signed in to star a gist
  • Fork 19 You must be signed in to fork a gist
  • Save CarlosDomingues/b88df15749af23a463148bd2c2b9b3fb to your computer and use it in GitHub Desktop.
Save CarlosDomingues/b88df15749af23a463148bd2c2b9b3fb to your computer and use it in GitHub Desktop.
Python Poetry Cheatsheet

Create a new project

poetry new <project-name>

Add a new lib

poetry add <library>

Remove a lib

poetry remove <library>

Update a lib

poetry update <library>

Get venv path

poetry run which python

Run app

poetry run python app.py

Run tests

poetry run python -m unittest discover

Show dependencies

poetry show

Create script

1 - Edit pyproject.toml:

[tool.poetry.scripts]
test = 'scripts:test'

2 - Create a scripts.py file on the root directory of your project:

import subprocess

def test():
    """
    Run all unittests. Equivalent to:
    `poetry run python -u -m unittest discover`
    """
    subprocess.run(
        ['python', '-u', '-m', 'unittest', 'discover']
    )

3 - Run script:

poetry run test

Disable virtual environment creation

poetry config virtualenvs.create false

List configuratiom

poetry config --list
@eidelen
Copy link

eidelen commented Jun 12, 2021

Great!

@mlgarchery
Copy link

I just couldn't make this to work:

[tool.poetry.scripts]
test = 'scripts:test'

Have you ? The official doc is not verbose about it.

For the test() command, I've found useful to replace subprocess.run() with a function like this:

def run(command: list[str]):
    """Run the command transparently (as if it was in the same process).

    If an error occurs, exit with the corresponding return code.
    Prints all outputs to stdout.
    """
    result = subprocess.run(command, capture_output=True)
    print(result.stdout.decode('utf8'), end='')
    print(result.stderr.decode('utf8'), end='')
    if result.returncode != 0:
        exit(code=result.returncode)

As unittest seems to return even non error outputs into stderr. Also, capturing the result make it possible for you to return a non zero exit code, which is useful in CI pipeline.

@rmmajor
Copy link

rmmajor commented Dec 4, 2022

There is a typo in 'Add a new lib' section: not potry but poetry. Hope this helps

@CarlosDomingues
Copy link
Author

Thanks @rmmajor, I've fixed it.

A disclaimer, though: I don't use poetry anymore, so I'm not sure how up to date this cheat sheet is =/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment