|
8 | 8 | The Python Package Index (PyPI) |
9 | 9 | ******************************* |
10 | 10 |
|
11 | | -The `Python Package Index (PyPI)`_ stores :ref:`meta-data <meta-data>` |
12 | | -describing distributions packaged with distutils, as well as package data like |
13 | | -distribution files if a package author wishes. |
14 | | - |
15 | | -Distutils provides the :command:`register` and :command:`upload` commands for |
16 | | -pushing meta-data and distribution files to PyPI, respectively. See |
17 | | -:ref:`package-commands` for information on these commands. |
18 | | - |
19 | | - |
20 | | -PyPI overview |
21 | | -============= |
22 | | - |
23 | | -PyPI lets you submit any number of versions of your distribution to the index. |
24 | | -If you alter the meta-data for a particular version, you can submit it again |
25 | | -and the index will be updated. |
26 | | - |
27 | | -PyPI holds a record for each (name, version) combination submitted. The first |
28 | | -user to submit information for a given name is designated the Owner of that |
29 | | -name. Changes can be submitted through the :command:`register` command or |
30 | | -through the web interface. Owners can designate other users as Owners or |
31 | | -Maintainers. Maintainers can edit the package information, but not designate |
32 | | -new Owners or Maintainers. |
33 | | - |
34 | | -By default PyPI displays only the newest version of a given package. The web |
35 | | -interface lets one change this default behavior and manually select which |
36 | | -versions to display and hide. |
37 | | - |
38 | | -For each version, PyPI displays a home page. The home page is created from |
39 | | -the ``long_description`` which can be submitted via the :command:`register` |
40 | | -command. See :ref:`package-display` for more information. |
41 | | - |
42 | | - |
43 | | -.. _package-commands: |
44 | | - |
45 | | -Distutils commands |
46 | | -================== |
47 | | - |
48 | | -Distutils exposes two commands for submitting package data to PyPI: the |
49 | | -:ref:`register <package-register>` command for submitting meta-data to PyPI |
50 | | -and the :ref:`upload <package-upload>` command for submitting distribution |
51 | | -files. Both commands read configuration data from a special file called a |
52 | | -:ref:`.pypirc file <pypirc>`. |
53 | | - |
54 | | - |
55 | | -.. _package-register: |
56 | | - |
57 | | -The ``register`` command |
58 | | ------------------------- |
59 | | - |
60 | | -The distutils command :command:`register` is used to submit your distribution's |
61 | | -meta-data to an index server. It is invoked as follows:: |
62 | | - |
63 | | - python setup.py register |
64 | | - |
65 | | -Distutils will respond with the following prompt:: |
66 | | - |
67 | | - running register |
68 | | - We need to know who you are, so please choose either: |
69 | | - 1. use your existing login, |
70 | | - 2. register as a new user, |
71 | | - 3. have the server generate a new password for you (and email it to you), or |
72 | | - 4. quit |
73 | | - Your selection [default 1]: |
74 | | - |
75 | | -Note: if your username and password are saved locally, you will not see this |
76 | | -menu. Also, refer to :ref:`pypirc` for how to store your credentials in a |
77 | | -:file:`.pypirc` file. |
78 | | - |
79 | | -If you have not registered with PyPI, then you will need to do so now. You |
80 | | -should choose option 2, and enter your details as required. Soon after |
81 | | -submitting your details, you will receive an email which will be used to confirm |
82 | | -your registration. |
83 | | - |
84 | | -Once you are registered, you may choose option 1 from the menu. You will be |
85 | | -prompted for your PyPI username and password, and :command:`register` will then |
86 | | -submit your meta-data to the index. |
87 | | - |
88 | | -See :ref:`package-cmdoptions` for options to the :command:`register` command. |
89 | | - |
90 | | - |
91 | | -.. _package-upload: |
92 | | - |
93 | | -The ``upload`` command |
94 | | ----------------------- |
95 | | - |
96 | | -The distutils command :command:`upload` pushes the distribution files to PyPI. |
97 | | - |
98 | | -The command is invoked immediately after building one or more distribution |
99 | | -files. For example, the command :: |
100 | | - |
101 | | - python setup.py sdist bdist_wininst upload |
102 | | - |
103 | | -will cause the source distribution and the Windows installer to be uploaded to |
104 | | -PyPI. Note that these will be uploaded even if they are built using an earlier |
105 | | -invocation of :file:`setup.py`, but that only distributions named on the command |
106 | | -line for the invocation including the :command:`upload` command are uploaded. |
107 | | - |
108 | | -If a :command:`register` command was previously called in the same command, |
109 | | -and if the password was entered in the prompt, :command:`upload` will reuse the |
110 | | -entered password. This is useful if you do not want to store a password in |
111 | | -clear text in a :file:`.pypirc` file. |
112 | | - |
113 | | -You can use the ``--sign`` option to tell :command:`upload` to sign each |
114 | | -uploaded file using GPG (GNU Privacy Guard). The :program:`gpg` program must |
115 | | -be available for execution on the system :envvar:`PATH`. You can also specify |
116 | | -which key to use for signing using the ``--identity=name`` option. |
117 | | - |
118 | | -See :ref:`package-cmdoptions` for additional options to the :command:`upload` |
119 | | -command. |
120 | | - |
121 | | - |
122 | | -.. _package-cmdoptions: |
123 | | - |
124 | | -Additional command options |
125 | | --------------------------- |
126 | | - |
127 | | -This section describes options common to both the :command:`register` and |
128 | | -:command:`upload` commands. |
129 | | - |
130 | | -The ``--repository`` or ``-r`` option lets you specify a PyPI server |
131 | | -different from the default. For example:: |
132 | | - |
133 | | - python setup.py sdist bdist_wininst upload -r https://example.com/pypi |
134 | | - |
135 | | -For convenience, a name can be used in place of the URL when the |
136 | | -:file:`.pypirc` file is configured to do so. For example:: |
137 | | - |
138 | | - python setup.py register -r other |
139 | | - |
140 | | -See :ref:`pypirc` for more information on defining alternate servers. |
141 | | - |
142 | | -The ``--show-response`` option displays the full response text from the PyPI |
143 | | -server, which is useful when debugging problems with registering and uploading. |
144 | | - |
145 | | - |
146 | | -.. index:: |
147 | | - single: .pypirc file |
148 | | - single: Python Package Index (PyPI); .pypirc file |
149 | | - |
150 | | -.. _pypirc: |
151 | | - |
152 | | -The ``.pypirc`` file |
153 | | --------------------- |
154 | | - |
155 | | -The :command:`register` and :command:`upload` commands both check for the |
156 | | -existence of a :file:`.pypirc` file at the location :file:`$HOME/.pypirc`. |
157 | | -If this file exists, the command uses the username, password, and repository |
158 | | -URL configured in the file. The format of a :file:`.pypirc` file is as |
159 | | -follows: |
160 | | - |
161 | | -.. code-block:: ini |
162 | | -
|
163 | | - [distutils] |
164 | | - index-servers = |
165 | | - pypi |
166 | | -
|
167 | | - [pypi] |
168 | | - repository: <repository-url> |
169 | | - username: <username> |
170 | | - password: <password> |
171 | | -
|
172 | | -The *distutils* section defines an *index-servers* variable that lists the |
173 | | -name of all sections describing a repository. |
174 | | - |
175 | | -Each section describing a repository defines three variables: |
176 | | - |
177 | | -- *repository*, that defines the url of the PyPI server. Defaults to |
178 | | - ``https://upload.pypi.org/legacy/``. |
179 | | -- *username*, which is the registered username on the PyPI server. |
180 | | -- *password*, that will be used to authenticate. If omitted the user |
181 | | - will be prompt to type it when needed. |
182 | | - |
183 | | -If you want to define another server a new section can be created and |
184 | | -listed in the *index-servers* variable: |
185 | | - |
186 | | -.. code-block:: ini |
187 | | -
|
188 | | - [distutils] |
189 | | - index-servers = |
190 | | - pypi |
191 | | - other |
192 | | -
|
193 | | - [pypi] |
194 | | - repository: <repository-url> |
195 | | - username: <username> |
196 | | - password: <password> |
197 | | -
|
198 | | - [other] |
199 | | - repository: https://example.com/pypi |
200 | | - username: <username> |
201 | | - password: <password> |
202 | | -
|
203 | | -This allows the :command:`register` and :command:`upload` commands to be |
204 | | -called with the ``--repository`` option as described in |
205 | | -:ref:`package-cmdoptions`. |
206 | | - |
207 | | -Specifically, you might want to add the `PyPI Test Repository |
208 | | -<https://wiki.python.org/moin/TestPyPI>`_ to your ``.pypirc`` to facilitate |
209 | | -testing before doing your first upload to ``PyPI`` itself. |
210 | | - |
211 | | - |
212 | | -.. _package-display: |
213 | | - |
214 | | -PyPI package display |
215 | | -==================== |
216 | | - |
217 | | -The ``long_description`` field plays a special role at PyPI. It is used by |
218 | | -the server to display a home page for the registered package. |
219 | | - |
220 | | -If you use the `reStructuredText <http://docutils.sourceforge.net/rst.html>`_ |
221 | | -syntax for this field, PyPI will parse it and display an HTML output for |
222 | | -the package home page. |
223 | | - |
224 | | -The ``long_description`` field can be attached to a text file located |
225 | | -in the package:: |
226 | | - |
227 | | - from distutils.core import setup |
228 | | - |
229 | | - with open('README.txt') as file: |
230 | | - long_description = file.read() |
231 | | - |
232 | | - setup(name='Distutils', |
233 | | - long_description=long_description) |
234 | | - |
235 | | -In that case, :file:`README.txt` is a regular reStructuredText text file located |
236 | | -in the root of the package besides :file:`setup.py`. |
237 | | - |
238 | | -To prevent registering broken reStructuredText content, you can use the |
239 | | -:program:`rst2html` program that is provided by the :mod:`docutils` package and |
240 | | -check the ``long_description`` from the command line: |
241 | | - |
242 | | -.. code-block:: shell-session |
243 | | -
|
244 | | - $ python setup.py --long-description | rst2html.py > output.html |
245 | | -
|
246 | | -:mod:`docutils` will display a warning if there's something wrong with your |
247 | | -syntax. Because PyPI applies additional checks (e.g. by passing ``--no-raw`` |
248 | | -to ``rst2html.py`` in the command above), being able to run the command above |
249 | | -without warnings does not guarantee that PyPI will convert the content |
250 | | -successfully. |
| 11 | +The `Python Package Index (PyPI)`_ stores metadata describing distributions |
| 12 | +packaged with distutils and other publishing tools, as well the distribution |
| 13 | +archives themselves. |
251 | 14 |
|
| 15 | +Detailed instructions on using PyPI at :ref:`distributing-index`. |
252 | 16 |
|
253 | 17 | .. _Python Package Index (PyPI): https://pypi.org |
0 commit comments