|
| 1 | +.. _distributing-index: |
| 2 | + |
| 3 | +############################### |
| 4 | + Distributing Python Modules |
| 5 | +############################### |
| 6 | + |
| 7 | +:Email: distutils-sig@python.org |
| 8 | + |
| 9 | + |
| 10 | +As a popular open source development project, Python has an active |
| 11 | +supporting community of contributors and users that also make their software |
| 12 | +available for other Python developers to use under open source license terms. |
| 13 | + |
| 14 | +This allows Python users to share and collaborate effectively, benefiting |
| 15 | +from the solutions others have already created to common (and sometimes |
| 16 | +even rare!) problems, as well as potentially contributing their own |
| 17 | +solutions to the common pool. |
| 18 | + |
| 19 | +This guide covers the distribution part of the process. For a guide to |
| 20 | +installing other Python projects, refer to the |
| 21 | +:ref:`installation guide <installing-index>`. |
| 22 | + |
| 23 | +.. note:: |
| 24 | + |
| 25 | + For corporate and other institutional users, be aware that many |
| 26 | + organisations have their own policies around using and contributing to |
| 27 | + open source software. Please take such policies into account when making |
| 28 | + use of the distribution and installation tools provided with Python. |
| 29 | + |
| 30 | + |
| 31 | +Key terms |
| 32 | +========= |
| 33 | + |
| 34 | +* the `Python Package Index <https://pypi.python.org/pypi>`__ is a public |
| 35 | + repository of open source licensed packages made available for use by |
| 36 | + other Python users |
| 37 | +* the `Python Packaging Authority |
| 38 | + <http://packaging.python.org/en/latest/future.html>`__ are the group of |
| 39 | + developers and documentation authors responsible for the maintenance and |
| 40 | + evolution of the standard packaging tools and the associated metadata and |
| 41 | + file format standards. They maintain a variety of tools, documentation |
| 42 | + and issue trackers on both `GitHub <https://github.com/pypa>`__ and |
| 43 | + `BitBucket <https://bitbucket.org/pypa/>`__. |
| 44 | +* ``distutils`` is the original build and distribution system first added to |
| 45 | + the Python standard library in 1998. While direct use of ``distutils`` is |
| 46 | + being phased out, it still laid the foundation for the current packaging |
| 47 | + and distribution infrastructure, and it not only remains part of the |
| 48 | + standard library, but its name lives on in other ways (such as the name |
| 49 | + of the mailing list used to coordinate Python packaging standards |
| 50 | + development). |
| 51 | + |
| 52 | + |
| 53 | +Open source licensing and collaboration |
| 54 | +======================================= |
| 55 | + |
| 56 | +In most parts of the world, software is automatically covered by copyright. |
| 57 | +This means that other developers require explicit permission to copy, use, |
| 58 | +modify and redistribute the software. |
| 59 | + |
| 60 | +Open source licensing is a way of explicitly granting such permission in a |
| 61 | +relatively consistent way, allowing developers to share and collaborate |
| 62 | +efficiently by making common solutions to various problems freely available. |
| 63 | +This leaves many developers free to spend more time focusing on the problems |
| 64 | +that are relatively unique to their specific situation. |
| 65 | + |
| 66 | +The distribution tools provided with Python are designed to make it |
| 67 | +reasonably straightforward for developers to make their own contributions |
| 68 | +back to that common pool of software if they choose to do so. |
| 69 | + |
| 70 | +The same distribution tools can also be used to distribute software within |
| 71 | +an organisation, regardless of whether that software is published as open |
| 72 | +source software or not. |
| 73 | + |
| 74 | + |
| 75 | +Installing the tools |
| 76 | +==================== |
| 77 | + |
| 78 | +The standard library does not include build tools that support modern |
| 79 | +Python packaging standards, as the core development team has found that it |
| 80 | +is important to have standard tools that work consistently, even on older |
| 81 | +versions of Python. |
| 82 | + |
| 83 | +The currently recommended build and distribution tools can be installed |
| 84 | +using ``pip``:: |
| 85 | + |
| 86 | + pip install setuptools wheel twine |
| 87 | + |
| 88 | + |
| 89 | +Reading the guide |
| 90 | +================= |
| 91 | + |
| 92 | +The Python Packaging User Guide covers the various key steps and elements |
| 93 | +involved in creating a project |
| 94 | + |
| 95 | +* `Project structure`_ |
| 96 | +* `Building and packaging the project`_ |
| 97 | +* `Uploading the project to the Python Package Index`_ |
| 98 | + |
| 99 | +.. _Project structure: \ |
| 100 | + http://packaging.python.org/en/latest/tutorial.html#creating-your-own-project |
| 101 | +.. _Building and packaging the project: \ |
| 102 | + http://packaging.python.org/en/latest/tutorial.html#building-packaging-your-project |
| 103 | +.. _Uploading the project to the Python Package Index: \ |
| 104 | + http://packaging.python.org/en/latest/tutorial.html#uploading-your-project-to-pypi |
| 105 | + |
| 106 | + |
| 107 | +How do I...? |
| 108 | +============ |
| 109 | + |
| 110 | +These are quick answers or links for some common tasks. |
| 111 | + |
| 112 | +... choose a name for my project? |
| 113 | +--------------------------------- |
| 114 | + |
| 115 | +This isn't an easy topic, but here are a few tips: |
| 116 | + |
| 117 | +* check the Python Package Index to see if the name is already in use |
| 118 | +* check popular hosting sites like GitHub, BitBucket, etc to see if there |
| 119 | + is already a project with that name |
| 120 | +* check what comes up in a web search for the name you're considering |
| 121 | +* avoid particularly common words, especially ones with multiple meanings, |
| 122 | + as they can make it difficult for users to find your software when |
| 123 | + searching for it |
| 124 | + |
| 125 | + |
| 126 | +... create and distribute binary extensions? |
| 127 | +-------------------------------------------- |
| 128 | + |
| 129 | +This is actually quite a complex topic, with a variety of alternatives |
| 130 | +available depending on exactly what you're aiming to achieve. See the |
| 131 | +Python Packaging User Guide for more information and recommendations. |
| 132 | + |
| 133 | +.. seealso:: |
| 134 | + |
| 135 | + `Python Packaging User Guide: Binary Extensions |
| 136 | + <http://packaging.python.org/en/latest/extensions.html>`__ |
| 137 | + |
| 138 | +.. other topics: |
| 139 | +
|
| 140 | + Once the Development & Deployment part of PPUG is fleshed out, some of |
| 141 | + those sections should be linked from new questions here (most notably, |
| 142 | + we should have a question about avoiding depending on PyPI that links to |
| 143 | + http://packaging.python.org/en/latest/deployment.html#pypi-mirrors-and-caches) |
0 commit comments