Skip to main content

Simplify your setup.py

Project description

Simplify your setup.py

Version on pypi Tested with Github Actions Test code codecov Python versions tested (link to github project) Version on conda-forge

Writing a setup.py typically involves lots of boilerplate and copy-pasting from project to project.

This package aims to simplify that and bring some DRY principle to python packaging. Here’s what your (complete, and ready to ship to pypi) setup.py could look like with setupmeta:

from setuptools import setup

setup(
    name="myproject",
    versioning="distance",          # Optional, would activate tag-based versioning
    setup_requires="setupmeta"      # This is where setupmeta comes in
)

And that should be it - setupmeta will take it from there, extracting everything else from the rest of your project (following typical conventions commonly used).

You can use the explain command (see commands) to see what setupmeta deduced from your project, for the above it would look something like this (you can see which file and which line each setting came from, note that a lot of info is typically extracted from your project, if you follow usual conventions):

~/myproject: python setup.py explain

          author: (auto-adjust     ) Your Name
              \_: (myproject.py:7  ) Your Name<your@email.com>
    author_email: (auto-adjust     ) your@email.com
     description: (README.rst:1    ) First line of your README
    entry_points: (entry_points.ini) [console_scripts] ...
install_requires: (requirements.txt) ["click", ...
         license: (auto-fill       ) MIT
long_description: (README.rst      ) Long description would be your inlined README
            name: (explicit        ) myproject
      py_modules: (auto-fill       ) ["myproject"]
  setup_requires: (explicit        ) ["setupmeta"]
         version: (git             ) 1.2.3.post2
      versioning: (explicit        ) distance

See examples for more.

Note: setupmeta’s versioning is based on:

git describe --dirty --tags --long --match *.* --first-parent

you will need git version >= 1.8.4 if you wish to use setupmeta’s versioning capabilities.

Goal

The goal of this project is to:

  • Allow to write very short (yet complete) setup.py-s, without boilerplate, and encourage good common packaging practices

  • Point out missing important info (example: version) in setup.py explain

  • Support tag-based versioning (like setuptools_scm, but with super simple configuration/defaults and automated bump capability)

  • Provide useful Commands to see the metadata (explain), version (including support for bumping versions), cleanall, etc

How it works?

  • Everything that you explicitly provide in your original setuptools.setup() call is taken as-is (never changed), and internally labelled as explicit. So if you don’t like something that setupmeta deduces, you can always explicitly state it.

  • name is auto-filled from your setup.py’s __title__ (if there is one, sometimes having a constant is quite handy…)

  • packages and package_dir is auto-filled accordingly if you have a <name>/__init__.py or src/<name>/__init__.py file

  • py_modules is auto-filled if you have a <name>.py file

  • entry_points is auto-filled from file entry_points.ini (bonus: tools like PyCharm have a nice syntax highlighter for those)

  • install_requires is auto-filled if you have a requirements.txt (or pinned.txt) file, pinning is abstracted away by default as per community recommendation, see requirements for more info.

  • tests_require is auto-filled if you have a tests/requirements.txt, or requirements-dev.txt, or dev-requirements.txt, or test-requirements.txt file

  • description will be the 1st line of your README (unless that 1st line is too short, or is just the project’s name), or the 1st line of the first docstring found in the scanned files (see list below)

  • long_description is auto-filled from your README file (looking for README.rst, README.md, then README*, first one found wins). Special tokens can be used (notation aimed at them easily being rst comments):

    • .. [[end long_description]] as end marker, so you don’t have to use the entire file as long description

    • .. [[include <relative-path>]] if you want another file included as well (for example, people like to add HISTORY.txt as well)

    • these tokens must appear either at beginning/end of line, or be after/before at least one space character

  • version can be stated explicitly, or be computed from git tags using versioning=... (see versioning for more info):

    • With versioning="distance", your git tags will be of the form v{major}.{minor}.0, the number of commits since latest version tag will be used to auto-fill the “patch” part of the version:

      • tag “v1.0.0”, no commits since tag -> version is “1.0.0”

      • tag “v1.0.0”, 5 commits since tag -> version is “1.0.5”

      • if checkout is dirty, a marker is added -> version would be “1.0.5.post5.dirty”

    • With versioning="post", your git tags will be of the form v{major}.{minor}.{patch}, a “post” addendum will be present if there are commits since latest version tag:

      • tag “v1.0.0”, no commits since tag -> version is “1.0.0”

      • tag “v1.0.0”, 5 commits since tag -> version is “1.0.0.post5”

      • if checkout is dirty, a marker is added -> version would be “1.0.0.post5.dirty”

    • With versioning="build-id", your git tags will be of the form v{major}.{minor}.0, the number of commits since latest version tag will be used to auto-fill the “patch” part of the version:

      • tag “v1.0.0”, no commits since tag, BUILD_ID=12 -> version is “1.0.0+h12.g123”

      • tag “v1.0.0”, no commits since tag, BUILD_ID not defined -> version is “1.0.0+hlocal.g123”

      • tag “v1.0.0”, 5 commits since tag, BUILD_ID=12 -> version is “1.0.5+h12.g456”

      • tag “v1.0.0”, 5 commits since tag, BUILD_ID not defined -> version is “1.0.5+hlocal.g456”

      • if checkout is dirty, a marker is added -> version would be “1.0.5+hlocal.g456.dirty”

    • Use the bump command (see commands) to easily bump (ie: increment major, minor or patch + apply git tag)

    • Version format can be customized, see versioning for more info

  • version, versioning, url, download_url, bugtrack_url, license, keywords, author, contact, maintainer, and platforms will be auto-filled from:

    • Lines of the form __key__ = "value" in your modules (simple constants only, expressions are ignored - the modules are not imported but scanned using regexes)

    • Lines of the form key: value in your docstring

    • Files are examined in this order (first find wins):

      • setup.py

      • <package>.py (mccabe for example)

      • <package>/__about__.py (cryptography for example)

      • <package>/__version__.py (requests for example)

      • <package>/__init__.py (changes, arrow for example)

      • src/ is also examined (for those who like to have their packages under src)

    • URLs can be simplified:

      • if url points to your general github repo (like: https://github.com/codrsquad), the name of your project is auto-appended to it

      • relative urls are auto-filled by prefixing them with url

      • urls may use {name} and/or {version} markers, it will be expanded appropriately

    • author, maintainer and contact names and emails can be combined into one line (setupmeta will figure out the email part and auto-fill it properly)

      • i.e.: author: Bob D bob@example.com will yield the proper author and author_email settings

This should hopefully work nicely for the vast majority of python projects out there. If you need advanced stuff, you can still leverage setupmeta for all the usual stuff above, and go explicit wherever needed.

Download files

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

Source Distribution

setupmeta-3.3.2.tar.gz (87.5 kB view details)

Uploaded Source

Built Distributions

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

setupmeta-3.3.2-py3.10.egg (89.6 kB view details)

Uploaded Egg

setupmeta-3.3.2-py3.9.egg (89.0 kB view details)

Uploaded Egg

setupmeta-3.3.2-py3.8.egg (89.0 kB view details)

Uploaded Egg

setupmeta-3.3.2-py3.7.egg (89.0 kB view details)

Uploaded Egg

setupmeta-3.3.2-py3.6.egg (88.8 kB view details)

Uploaded Egg

setupmeta-3.3.2-py2.py3-none-any.whl (40.4 kB view details)

Uploaded Python 2Python 3

setupmeta-3.3.2-py2.7.egg (89.4 kB view details)

Uploaded Egg

File details

Details for the file setupmeta-3.3.2.tar.gz.

File metadata

  • Download URL: setupmeta-3.3.2.tar.gz
  • Upload date:
  • Size: 87.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.12

File hashes

Hashes for setupmeta-3.3.2.tar.gz
Algorithm Hash digest
SHA256 221463a64d2528ba558f14b087410e05a7ef0dab17d19004f124a262d6e007f5
MD5 4782f2e66db374b2fc5a701791168c57
BLAKE2b-256 419855d3572a9bc8cbca1af69aefef2d606fa6423ce09eec424576763e75a2c2

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py3.10.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py3.10.egg
  • Upload date:
  • Size: 89.6 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for setupmeta-3.3.2-py3.10.egg
Algorithm Hash digest
SHA256 b99dc5f1dbcc4cf373918abf34ed382a0ddda00426f83d5f2843e5035d1b7d68
MD5 6becabf5c51b24d967424b5171822109
BLAKE2b-256 bd180247b369eb22f0b0df5fc76bb027591bad0cf9953eddcce5a1ce138f3151

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py3.9.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py3.9.egg
  • Upload date:
  • Size: 89.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for setupmeta-3.3.2-py3.9.egg
Algorithm Hash digest
SHA256 01e8ca2d52915dc0cd2d9f79a725d3d0d1a06202b61426e30fdba30c7b5d8796
MD5 e19ed39dc32fe33a81899c0773824557
BLAKE2b-256 5b67b7ab0d409def6261e96ad0a1b3a156f65540dbafa421fae009b6e4d2fb3e

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py3.8.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py3.8.egg
  • Upload date:
  • Size: 89.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.12

File hashes

Hashes for setupmeta-3.3.2-py3.8.egg
Algorithm Hash digest
SHA256 bee722fd3ad9c0bd56ffff6a1f004350c51697c587be167fc473a90d410d347b
MD5 3af86fb6665354f6ffb1a311b32e88df
BLAKE2b-256 ed90a1326956abf0395183f580a1a8c80ff7a82803e00a6352bd0b22974c2835

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py3.7.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py3.7.egg
  • Upload date:
  • Size: 89.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.7.13

File hashes

Hashes for setupmeta-3.3.2-py3.7.egg
Algorithm Hash digest
SHA256 1fd6294ea82b94e744611823f971ecccb3a344a3b459b522f33dbb7a57c4d1ce
MD5 97b3775d8025510536ad5fd05abec84c
BLAKE2b-256 10db0ce5a152eafe15d8d30bddef11f10a04a075cd8bfef75a3070919d9f0cf0

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py3.6.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py3.6.egg
  • Upload date:
  • Size: 88.8 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.15

File hashes

Hashes for setupmeta-3.3.2-py3.6.egg
Algorithm Hash digest
SHA256 5baf67bc18ba7433545ec057a2dc26396b9543314cfafd884f8cd872c95ac55c
MD5 d17c941588c210da018cbbef8ac0f21d
BLAKE2b-256 f1cb37076873b932cbc630f89ebb297b545bd09a242b3eeffb4b8fe17708b235

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py2.py3-none-any.whl.

File metadata

  • Download URL: setupmeta-3.3.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.12

File hashes

Hashes for setupmeta-3.3.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 020a27e710bead9d48d49a9c00451d8d5f906e9fc1f64df54f6038889b087578
MD5 02fe93aa6ca6ef51739dca2711e524af
BLAKE2b-256 66693dda958268ca78b8a3e3c899a904742e48163ad807136f14650a9fc2d6cb

See more details on using hashes here.

File details

Details for the file setupmeta-3.3.2-py2.7.egg.

File metadata

  • Download URL: setupmeta-3.3.2-py2.7.egg
  • Upload date:
  • Size: 89.4 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.8.2 requests/2.27.1 setuptools/44.1.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/2.7.18

File hashes

Hashes for setupmeta-3.3.2-py2.7.egg
Algorithm Hash digest
SHA256 52a40a5997af4df92035734e03f974505e657604854f97bb1f3db61e15a61f61
MD5 c5f78a949959d727c36791e050489d12
BLAKE2b-256 c618f67550d3671044482e7985695a58fd3495720821439a2bd057f0e024e6b2

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