summaryrefslogtreecommitdiff
path: root/docs/build_meta.txt
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2020-09-04 10:22:54 -0400
committerJason R. Coombs <jaraco@jaraco.com>2020-09-04 10:22:54 -0400
commitfc4d9828768ceebd2f9337481450c88376c013e9 (patch)
tree6dff622c50739ca19fdfbecf1008a42589d37b57 /docs/build_meta.txt
parent7bb73a477de24069002516eb6eb1d755bed9d65b (diff)
parent03d36b9edb53e266a0b4b836e1e3178f989a0781 (diff)
downloadpython-setuptools-git-feature/implicit-bootstrap.tar.gz
Merge branch 'master' into feature/implicit-bootstrapfeature/implicit-bootstrap
Diffstat (limited to 'docs/build_meta.txt')
-rw-r--r--docs/build_meta.txt89
1 files changed, 89 insertions, 0 deletions
diff --git a/docs/build_meta.txt b/docs/build_meta.txt
new file mode 100644
index 00000000..fcc2b7fe
--- /dev/null
+++ b/docs/build_meta.txt
@@ -0,0 +1,89 @@
+=======================================
+Build System Support
+=======================================
+
+What is it?
+-------------
+
+Python packaging has come `a long way <https://www.bernat.tech/pep-517-518/>`_.
+
+The traditional ``setuptools`` way of packgaging Python modules
+uses a ``setup()`` function within the ``setup.py`` script. Commands such as
+``python setup.py bdist`` or ``python setup.py bdist_wheel`` generate a
+distribution bundle and ``python setup.py install`` installs the distribution.
+This interface makes it difficult to choose other packaging tools without an
+overhaul. Because ``setup.py`` scripts allowed for arbitrary execution, it
+proved difficult to provide a reliable user experience across environments
+and history.
+
+`PEP 517 <https://www.python.org/dev/peps/pep-0517/>`_ therefore came to
+rescue and specified a new standard to
+package and distribute Python modules. Under PEP 517:
+
+ a ``pyproject.toml`` file is used to specify what program to use
+ for generating distribution.
+
+ Then, two functions provided by the program, ``build_wheel(directory: str)``
+ and ``build_sdist(directory: str)`` create the distribution bundle at the
+ specified ``directory``. The program is free to use its own configuration
+ script or extend the ``.toml`` file.
+
+ Lastly, ``pip install *.whl`` or ``pip install *.tar.gz`` does the actual
+ installation. If ``*.whl`` is available, ``pip`` will go ahead and copy
+ the files into ``site-packages`` directory. If not, ``pip`` will look at
+ ``pyproject.toml`` and decide what program to use to 'build from source'
+ (the default is ``setuptools``)
+
+With this standard, switching between packaging tools becomes a lot easier. ``build_meta``
+implements ``setuptools``' build system support.
+
+How to use it?
+--------------
+
+Starting with a package that you want to distribute. You will need your source
+scripts, a ``pyproject.toml`` file and a ``setup.cfg`` file::
+
+ ~/meowpkg/
+ pyproject.toml
+ setup.cfg
+ meowpkg/__init__.py
+
+The pyproject.toml file is required to specify the build system (i.e. what is
+being used to package your scripts and install from source). To use it with
+setuptools, the content would be::
+
+ [build-system]
+ requires = ["setuptools", "wheel"]
+ build-backend = "setuptools.build_meta"
+
+Use ``setuptools``' `declarative config`_ to specify the package information::
+
+ [metadata]
+ name = meowpkg
+ version = 0.0.1
+ description = a package that meows
+
+ [options]
+ packages = find:
+
+Now generate the distribution. Although the PyPA is still working to
+`provide a recommended tool <https://github.com/pypa/packaging-problems/issues/219>`_
+to build packages, the `pep517 package <https://pypi.org/project/pep517>`_
+provides this functionality. To build the package::
+
+ $ pip install -q pep517
+ $ mkdir dist
+ $ python -m pep517.build .
+
+And now it's done! The ``.whl`` file and ``.tar.gz`` can then be distributed
+and installed::
+
+ dist/
+ meowpkg-0.0.1.whl
+ meowpkg-0.0.1.tar.gz
+
+ $ pip install dist/meowpkg-0.0.1.whl
+
+or::
+
+ $ pip install dist/meowpkg-0.0.1.tar.gz