Skip to main content

Python packaging utility library

Project description

travis versions pypi

Index

Introduction | Requirements | Motivation | Usage | Installation | Project Structure | Design Principles | Scripts | Contributing | License

Introduction

pkutils is a Python library that simplifies python module packaging. It is intended to be used in your package’s setup.py file.

With pkutils, you can

  • Parse requirements files

  • Determine your project’s development status

  • Read text files

  • and much more…

Requirements

pkutils has been tested and is known to work on Python 3.7, 3.8, and 3.9; and PyPy3.7.

Motivation

Python has a great packaging system, but to actually create and publish a package requires a lot of work to do well. I designed pkutils to provide many useful packaging use-cases out of the box. For example, to automatically include the contents of your requirements.txt file, simply add the following to setup.py:

import pkutils

...

requirements = list(pkutils.parse_requirements('requirements.txt'))
dev_requirements = list(pkutils.parse_requirements('dev-requirements.txt'))

setup(
    ...
    install_requires=requirements,
    tests_require=dev_requirements,
    ...)

Usage

pkutils is intended to be used directly as a Python library.

my_package/__init__.py

__version__ = '0.5.4'

__author__ = 'Reuben Cummings'
__description__ = 'My super awesome great package'
__email__ = 'reubano@gmail.com'
__license__ = 'MIT'
__copyright__ = 'Copyright 2015 Reuben Cummings'

You can set __title__ explicitly in your Python file. If you leave __title__ unset, pkutils will use:

  • The parent directory for paths ending in __init__.py.

  • The filename before the extention for other paths (e.g. my_package for my_package.py).

setup.py

import pkutils

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

requirements = list(pkutils.parse_requirements('requirements.txt'))
dependencies = list(pkutils.parse_requirements('requirements.txt', True))
dev_requirements = list(pkutils.parse_requirements('dev-requirements.txt'))
readme = pkutils.read('README.rst')
module = pkutils.parse_module('my_package/__init__.py')
version = module.__version__
project = module.__title__
email = module.__email__
user = pkutils.get_user(email)

setup(
    name=project,
    version=version,
    description=module.__description__,
    long_description=readme,
    author=module.__author__,
    author_email=email,
    install_requires=requirements,
    tests_require=dev_requirements,
    dependency_links=dependencies,
    setup_requires=['pkutils'],
    url=pkutils.get_url(project, user),
    download_url=pkutils.get_dl_url(project, user, version),
    classifiers=[
        pkutils.get_license(module.__license__),
        pkutils.get_status(version),
        ...
    ],
    ...
)

This is then converted into something like the following:

...

setup(
    name='my_package',
    version='0.5.4',
    description='My super awesome great package',
    long_description='my_package: a super awesome great...',
    author='Reuben Cummings',
    author_email='reubano@gmail.com',
    install_requires=['semver==2.2.1'],
    tests_require=['semver==2.2.1', 'wheel==0.24.0', 'flake8==2.5.1', ...],
    dependency_links=[],
    setup_requires=['pkutils'],
    url='https://github.com/reubano/pkutils',
    download_url='https://github.com/reubano/pkutils/archive/v0.5.4.tar.gz',
    classifiers=[
        'License :: OSI Approved :: MIT License',
        'Development Status :: 4 - Beta',
        ...
    ],
    ...
)

Installation

(You are using a virtualenv, right?)

At the command line, install pkutils using either pip (recommended)

pip install -u pkutils

or easy_install

easy_install pkutils

Please see the installation doc for more details.

Project Structure

┌── CHANGES.rst
├── CONTRIBUTING.rst
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── dev-requirements.txt
├── helpers
   ├── check-stage
   ├── clean
   ├── srcdist
   ├── test
   └── wheel
├── manage.py
├── pkutils.py
├── requirements.txt
├── setup.cfg
├── setup.py
├── tests
   ├── __init__.py
   └── standard.rc
└── tox.ini

Design Principles

  • minimize external dependencies

  • prefer functions over objects

  • keep the API as simple as possible

Scripts

pkutils comes with a built in task manager manage.py

Setup

pip install -r dev-requirements.txt

Examples

View available commands

manage

Show help for a given command

manage <command> -h

Run python linter and nose tests

manage lint
manage test

Or if make is more your speed…

make lint
make test

Contributing

Please mimic the coding style/conventions used in this repo. If you add new classes or functions, please add the appropriate doc blocks with examples. Also, make sure the python linter and nose tests pass.

Please see the contributing doc for more details.

License

pkutils is distributed under the MIT License.

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

pkutils-3.0.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

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

pkutils-3.0.0-py2.py3-none-any.whl (7.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pkutils-3.0.0.tar.gz.

File metadata

  • Download URL: pkutils-3.0.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pkutils-3.0.0.tar.gz
Algorithm Hash digest
SHA256 4479a32afd678c9168c0921f2469ab1066c2ca2c1a288a14ec32bb9325ad1808
MD5 22857a32b13ef1ed5d5e7225ce8a3a80
BLAKE2b-256 b0287b927431eaba4abfaac8d9c49aa3f1e0bd5492af5a117364d03a2b33a72d

See more details on using hashes here.

File details

Details for the file pkutils-3.0.0-py2.py3-none-any.whl.

File metadata

  • Download URL: pkutils-3.0.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pkutils-3.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 927939bb25e635c867a8e87540c6ffe0ebb0b878fcde5eb52e13ec0e48262c43
MD5 63ed9cdfcb1cad86aa08dacef05f2c68
BLAKE2b-256 323a96a640aa1416e59b4462b37479fb61489d9c6c108bc22c644088ea1b1248

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