Skip to main content

Simplify your setup.py

Project description

Simplify your setup.py

Version on pypi Travis CI codecov Python versions tested (link to github project) Downloads

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
     classifiers: (classifiers.txt ) 6 items: ["Development Status :: ...
     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, twine, 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

  • classifiers is auto-filled from file classifiers.txt (one classification per line, ignoring empty lines and python style comments)

  • 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/zsimic), 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@d.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-2.6.21.tar.gz (40.9 kB view details)

Uploaded Source

Built Distributions

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

setupmeta-2.6.21-py3.8.egg (86.1 kB view details)

Uploaded Egg

setupmeta-2.6.21-py3.7.egg (86.0 kB view details)

Uploaded Egg

setupmeta-2.6.21-py3.6.egg (86.0 kB view details)

Uploaded Egg

setupmeta-2.6.21-py3.5.egg (87.4 kB view details)

Uploaded Egg

setupmeta-2.6.21-py2.py3-none-any.whl (39.4 kB view details)

Uploaded Python 2Python 3

setupmeta-2.6.21-py2.7.egg (86.3 kB view details)

Uploaded Egg

File details

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

File metadata

  • Download URL: setupmeta-2.6.21.tar.gz
  • Upload date:
  • Size: 40.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.0

File hashes

Hashes for setupmeta-2.6.21.tar.gz
Algorithm Hash digest
SHA256 d2e2a5696ba86c339a40b3e8a13d80f916da679880f3c57df2dfb88ec000dd56
MD5 480913fc1c6e41ff18a1d04bf469a8c7
BLAKE2b-256 a86cccca31b897ea74e7368da424fbf73d794d91c2f6ae06f09ceec4155f7eb1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setupmeta-2.6.21-py3.8.egg
  • Upload date:
  • Size: 86.1 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.0

File hashes

Hashes for setupmeta-2.6.21-py3.8.egg
Algorithm Hash digest
SHA256 10ac79da488ec9b5689a83ae8a031bad2219cf982aee121725f42c4dc8a4f596
MD5 99468712524027ec0ba5c2f8ce6d2fed
BLAKE2b-256 b1f294163d30270908bf40e960eec3ac37c5e376213deefdcfffac75d65fae9c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setupmeta-2.6.21-py3.7.egg
  • Upload date:
  • Size: 86.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.7.1

File hashes

Hashes for setupmeta-2.6.21-py3.7.egg
Algorithm Hash digest
SHA256 686c4a6f8877acf6978eb1ea4c01f25e61ff4da32ec0dba5375b3b738bb07af7
MD5 b2dbf3df35973906404a39e681fc2d64
BLAKE2b-256 60f62d1a1441e7006d41d7ca47e2f4989267cf8a3124187128d433190980c3db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setupmeta-2.6.21-py3.6.egg
  • Upload date:
  • Size: 86.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.6.7

File hashes

Hashes for setupmeta-2.6.21-py3.6.egg
Algorithm Hash digest
SHA256 a11fec9c5c8dfe4860f98d94ae9d6d0e493c06571e09eac836ff0053c7a5bf8c
MD5 63a4eed6e0973b6af6862e0135560415
BLAKE2b-256 d942fd5ee518c6ea745174ba56dc3e81d9db54fb50a1aa509b9267c407fdfa10

See more details on using hashes here.

File details

Details for the file setupmeta-2.6.21-py3.5.egg.

File metadata

  • Download URL: setupmeta-2.6.21-py3.5.egg
  • Upload date:
  • Size: 87.4 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.5.6

File hashes

Hashes for setupmeta-2.6.21-py3.5.egg
Algorithm Hash digest
SHA256 697c6b517e0ef3d23ef6176da9c1290064a80c45bf49d4c5ceaaae302b1ddb4f
MD5 586af589911d0d03ae21186897ec25dd
BLAKE2b-256 fdcb64575c7ca4f503aaf9b34d25163507cfd12be0cf38695bbfa1cc3730ffcb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setupmeta-2.6.21-py2.py3-none-any.whl
  • Upload date:
  • Size: 39.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.0

File hashes

Hashes for setupmeta-2.6.21-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 fd989af0777701988d10a2c100306e9371a2e6b8de556adf3a4ce688268e9fe6
MD5 68b5f36070428eaec658181641d336de
BLAKE2b-256 f8d262bf7551620384ae6a04cffff8c5b96b644ffa31f3b40c87c815776a7be5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setupmeta-2.6.21-py2.7.egg
  • Upload date:
  • Size: 86.3 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.1.0 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/2.7.15

File hashes

Hashes for setupmeta-2.6.21-py2.7.egg
Algorithm Hash digest
SHA256 395a3ece0764deacc73844276f2976d4406bc0edbdeb10d6580c9bc7c68a6410
MD5 335402ff753aa9262e6684c867e6104c
BLAKE2b-256 0b0253454fde8edd3e59c13263b710c21b3cee450921781a1a5eeb04b75d930f

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