Skip to main content

A small test package by setuptools

Project description

build a python package

This example repo:

  • uses build, setuptools and pyproject.toml to build package
  • uses setup.py to build package
  • uses twine to upload package
  • uses pip or setup.py to install package
pyenv shell 3.9.7
python -m venv venv
source venv/bin/activate

python -m pip install --upgrade pip build wheel setuptools twine

use build

Ref: https://packaging.python.org/en/latest/tutorials/packaging-projects/

build with pyproject.toml

rm -rf build dist *.egg-info
python -m build

upload to package index PyPI (First, register PyPI account if not yet.):

# optional: --skip-existing
python -m twine upload --skip-existing dist/*

Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: binlecode
Enter your password:
Uploading my_pkg_binlecode-0.0.3-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.0/9.0 kB  00:00  3.2 MB/s
Uploading my_pkg_binlecode-0.0.3.tar.gz
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1/9.1 kB  00:00  5.7 MB/s

View at:
https://pypi.org/project/my-pkg-binlecode/0.0.3/

Alternatively, can use api token to replace interactive user credentials input. First, get API token from pypi.org, then assign it to env var TWINE_USERNAME.

TWINE_USERNAME=<TOKEN> python -m twine upload --skip-existing dist/*

use setuptools and setup.py

Ref: setuptools guide: https://setuptools.pypa.io/en/latest/userguide/index.html

python setup sdist generates source distribution:

  • dist folder that contains <package-name>-<version>.tar.gz
  • .egg-info folder

A source distribution contains source code. That includes not only Python code but also the source code of any extension modules (usually in C or C++) bundled with the package. With source distributions, extension modules are compiled on the user’s side rather than the developer’s.

Source distributions also contain a bundle of metadata sitting in a directory called <package-name>.egg-info. Egg distribution format is being replaced by wheel distribution format.

bdist and bdist_wheel

bdist means build distribution, which is not necessarily binary.

python setup.py bdist generates:

  • dist/-..tar.gz, which is the default type of built distribution for the current platform
  • build/bdist.
  • build/lib folder that includes modules

python setup.py bdist_wheel generates:

  • dist/---.whl

A wheel file is essentially a zip archive with metadata of supported python versions and platforms.

Usually both source and wheel build distributions should be generated and uploaded to package index for download and install.

rm -rf build dist *.egg-info
python setup.py sdist bdist_wheel

upload package to PyPI (First, register PyPI account if not yet.):

twine upload dist/*

install

pip install <package-name> is a general way of installing package. pip always prefers wheel distribution over source distribution. If wheel distribution is available for the target platform, source distribution will be used to build package at client side.

pip install on wheel skips setup.py execution, which is described below.

Inside package folder, use python setup.py install to install the distribution package.

A inline editable install is for development mode: python setup.py install --editable . will install with the source content that is editable, which is great for debuging and testing changes.

pyproject.toml

A later PEP517 standard defines pyproject.toml as the new standard for packaging and distributing python modules.

If there's no pyproject.toml available, setuptools will fall back to setup.py file.

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

my_pkg_binlecode-0.0.4.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

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

my_pkg_binlecode-0.0.4-py3-none-any.whl (3.1 kB view details)

Uploaded Python 3

File details

Details for the file my_pkg_binlecode-0.0.4.tar.gz.

File metadata

  • Download URL: my_pkg_binlecode-0.0.4.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.11

File hashes

Hashes for my_pkg_binlecode-0.0.4.tar.gz
Algorithm Hash digest
SHA256 bd87ca28a85ad3d4529aae04b7e95bd6a56990015d729caf39caa759b0812f52
MD5 dfc65fd3aeb27acecb772c69d4347bb6
BLAKE2b-256 717500862c6958f4953b7ecbc2de359042f94acc9b06ade96040e2c88b05c36d

See more details on using hashes here.

File details

Details for the file my_pkg_binlecode-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for my_pkg_binlecode-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 56e2a9db5becd72cab1f21a14c134df0f7277c58ecf9f19514c1a3f342c55d09
MD5 f15a38564916e9e59e714eaaa2b39dee
BLAKE2b-256 278f3984d330fbae16fb4de95a015d0e8028f4809fe1eb434892942ba415d77f

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