blob: 5c0e5d04234bca3e48740cc73a63557087e5a4b0 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. _source-dist:
2
3******************************
4Creating a Source Distribution
5******************************
6
7As shown in section :ref:`distutils-simple-example`, you use the :command:`sdist` command
8to create a source distribution. In the simplest case, ::
9
10 python setup.py sdist
11
12(assuming you haven't specified any :command:`sdist` options in the setup script
13or config file), :command:`sdist` creates the archive of the default format for
14the current platform. The default format is a gzip'ed tar file
15(:file:`.tar.gz`) on Unix, and ZIP file on Windows.
16
17You can specify as many formats as you like using the :option:`--formats`
18option, for example::
19
20 python setup.py sdist --formats=gztar,zip
21
22to create a gzipped tarball and a zip file. The available formats are:
23
24+-----------+-------------------------+---------+
25| Format | Description | Notes |
26+===========+=========================+=========+
27| ``zip`` | zip file (:file:`.zip`) | (1),(3) |
28+-----------+-------------------------+---------+
29| ``gztar`` | gzip'ed tar file | (2),(4) |
30| | (:file:`.tar.gz`) | |
31+-----------+-------------------------+---------+
32| ``bztar`` | bzip2'ed tar file | \(4) |
33| | (:file:`.tar.bz2`) | |
34+-----------+-------------------------+---------+
35| ``ztar`` | compressed tar file | \(4) |
36| | (:file:`.tar.Z`) | |
37+-----------+-------------------------+---------+
38| ``tar`` | tar file (:file:`.tar`) | \(4) |
39+-----------+-------------------------+---------+
40
41Notes:
42
43(1)
44 default on Windows
45
46(2)
47 default on Unix
48
49(3)
50 requires either external :program:`zip` utility or :mod:`zipfile` module (part
51 of the standard Python library since Python 1.6)
52
53(4)
54 requires external utilities: :program:`tar` and possibly one of :program:`gzip`,
55 :program:`bzip2`, or :program:`compress`
56
57
58.. _manifest:
59
60Specifying the files to distribute
61==================================
62
63If you don't supply an explicit list of files (or instructions on how to
64generate one), the :command:`sdist` command puts a minimal default set into the
65source distribution:
66
67* all Python source files implied by the :option:`py_modules` and
68 :option:`packages` options
69
70* all C source files mentioned in the :option:`ext_modules` or
71 :option:`libraries` options (
72
73 **\*\*** getting C library sources currently broken---no
74 :meth:`get_source_files` method in :file:`build_clib.py`! **\*\***)
75
76* scripts identified by the :option:`scripts` option
Tarek Ziadé0d0506e2009-02-16 21:49:12 +000077 See :ref:`distutils-installing-scripts`.
Georg Brandl116aa622007-08-15 14:28:22 +000078
79* anything that looks like a test script: :file:`test/test\*.py` (currently, the
80 Distutils don't do anything with test scripts except include them in source
81 distributions, but in the future there will be a standard for testing Python
82 module distributions)
83
84* :file:`README.txt` (or :file:`README`), :file:`setup.py` (or whatever you
85 called your setup script), and :file:`setup.cfg`
86
Tarek Ziadé0d0506e2009-02-16 21:49:12 +000087* all files that matches the ``package_data`` metadata.
88 See :ref:`distutils-installing-package-data`.
89
90 .. versionadded:: 2.7
91
92* all files that matches the ``data_files`` metadata.
93 See :ref:`distutils-additional-files`.
94
95 .. versionadded:: 2.7
96
97
Georg Brandl116aa622007-08-15 14:28:22 +000098Sometimes this is enough, but usually you will want to specify additional files
99to distribute. The typical way to do this is to write a *manifest template*,
100called :file:`MANIFEST.in` by default. The manifest template is just a list of
101instructions for how to generate your manifest file, :file:`MANIFEST`, which is
102the exact list of files to include in your source distribution. The
103:command:`sdist` command processes this template and generates a manifest based
104on its instructions and what it finds in the filesystem.
105
106If you prefer to roll your own manifest file, the format is simple: one filename
107per line, regular files (or symlinks to them) only. If you do supply your own
108:file:`MANIFEST`, you must specify everything: the default set of files
109described above does not apply in this case.
110
111The manifest template has one command per line, where each command specifies a
112set of files to include or exclude from the source distribution. For an
113example, again we turn to the Distutils' own manifest template::
114
115 include *.txt
116 recursive-include examples *.txt *.py
117 prune examples/sample?/build
118
119The meanings should be fairly clear: include all files in the distribution root
120matching :file:`\*.txt`, all files anywhere under the :file:`examples` directory
121matching :file:`\*.txt` or :file:`\*.py`, and exclude all directories matching
122:file:`examples/sample?/build`. All of this is done *after* the standard
123include set, so you can exclude files from the standard set with explicit
124instructions in the manifest template. (Or, you can use the
125:option:`--no-defaults` option to disable the standard set entirely.) There are
126several other commands available in the manifest template mini-language; see
127section :ref:`sdist-cmd`.
128
129The order of commands in the manifest template matters: initially, we have the
130list of default files as described above, and each command in the template adds
131to or removes from that list of files. Once we have fully processed the
132manifest template, we remove files that should not be included in the source
133distribution:
134
135* all files in the Distutils "build" tree (default :file:`build/`)
136
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000137* all files in directories named :file:`RCS`, :file:`CVS`, :file:`.svn`,
138 :file:`.hg`, :file:`.git`, :file:`.bzr` or :file:`_darcs`
Georg Brandl116aa622007-08-15 14:28:22 +0000139
140Now we have our complete list of files, which is written to the manifest for
141future reference, and then used to build the source distribution archive(s).
142
143You can disable the default set of included files with the
144:option:`--no-defaults` option, and you can disable the standard exclude set
145with :option:`--no-prune`.
146
147Following the Distutils' own manifest template, let's trace how the
148:command:`sdist` command builds the list of files to include in the Distutils
149source distribution:
150
151#. include all Python source files in the :file:`distutils` and
152 :file:`distutils/command` subdirectories (because packages corresponding to
153 those two directories were mentioned in the :option:`packages` option in the
154 setup script---see section :ref:`setup-script`)
155
156#. include :file:`README.txt`, :file:`setup.py`, and :file:`setup.cfg` (standard
157 files)
158
159#. include :file:`test/test\*.py` (standard files)
160
161#. include :file:`\*.txt` in the distribution root (this will find
162 :file:`README.txt` a second time, but such redundancies are weeded out later)
163
164#. include anything matching :file:`\*.txt` or :file:`\*.py` in the sub-tree
165 under :file:`examples`,
166
167#. exclude all files in the sub-trees starting at directories matching
168 :file:`examples/sample?/build`\ ---this may exclude files included by the
169 previous two steps, so it's important that the ``prune`` command in the manifest
170 template comes after the ``recursive-include`` command
171
Christian Heimesdd15f6c2008-03-16 00:07:10 +0000172#. exclude the entire :file:`build` tree, and any :file:`RCS`, :file:`CVS`,
173 :file:`.svn`, :file:`.hg`, :file:`.git`, :file:`.bzr` and :file:`_darcs`
174 directories
Georg Brandl116aa622007-08-15 14:28:22 +0000175
176Just like in the setup script, file and directory names in the manifest template
177should always be slash-separated; the Distutils will take care of converting
178them to the standard representation on your platform. That way, the manifest
179template is portable across operating systems.
180
181
182.. _manifest-options:
183
184Manifest-related options
185========================
186
187The normal course of operations for the :command:`sdist` command is as follows:
188
189* if the manifest file, :file:`MANIFEST` doesn't exist, read :file:`MANIFEST.in`
190 and create the manifest
191
192* if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest
193 with just the default file set
194
195* if either :file:`MANIFEST.in` or the setup script (:file:`setup.py`) are more
196 recent than :file:`MANIFEST`, recreate :file:`MANIFEST` by reading
197 :file:`MANIFEST.in`
198
199* use the list of files now in :file:`MANIFEST` (either just generated or read
200 in) to create the source distribution archive(s)
201
202There are a couple of options that modify this behaviour. First, use the
203:option:`--no-defaults` and :option:`--no-prune` to disable the standard
204"include" and "exclude" sets.
205
206Second, you might want to force the manifest to be regenerated---for example, if
207you have added or removed files or directories that match an existing pattern in
208the manifest template, you should regenerate the manifest::
209
210 python setup.py sdist --force-manifest
211
212Or, you might just want to (re)generate the manifest, but not create a source
213distribution::
214
215 python setup.py sdist --manifest-only
216
217:option:`--manifest-only` implies :option:`--force-manifest`. :option:`-o` is a
218shortcut for :option:`--manifest-only`, and :option:`-f` for
219:option:`--force-manifest`.
220
221