Kaydet (Commit) 96c45a98 authored tarafından Tarek Ziadé's avatar Tarek Ziadé

reverted distutils doc to its 3.1 state

üst b00a75f1
This diff is collapsed.
...@@ -146,8 +146,8 @@ commands. ...@@ -146,8 +146,8 @@ commands.
Creating dumb built distributions Creating dumb built distributions
================================= =================================
.. XXX Need to document absolute vs. prefix-relative packages here, but first **\*\*** Need to document absolute vs. prefix-relative packages here, but first
I have to implement it! I have to implement it! **\*\***
.. _creating-rpms: .. _creating-rpms:
...@@ -241,8 +241,7 @@ tedious and error-prone, so it's usually best to put them in the setup ...@@ -241,8 +241,7 @@ tedious and error-prone, so it's usually best to put them in the setup
configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`. If configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`. If
you distribute or package many Python module distributions, you might want to you distribute or package many Python module distributions, you might want to
put options that apply to all of them in your personal Distutils configuration put options that apply to all of them in your personal Distutils configuration
file (:file:`~/.pydistutils.cfg`). If you want to temporarily disable file (:file:`~/.pydistutils.cfg`).
this file, you can pass the --no-user-cfg option to setup.py.
There are three steps to building a binary RPM package, all of which are There are three steps to building a binary RPM package, all of which are
handled automatically by the Distutils: handled automatically by the Distutils:
......
...@@ -48,6 +48,50 @@ This command installs all (Python) scripts in the distribution. ...@@ -48,6 +48,50 @@ This command installs all (Python) scripts in the distribution.
.. % \label{clean-cmd} .. % \label{clean-cmd}
.. _sdist-cmd:
Creating a source distribution: the :command:`sdist` command
============================================================
**\*\*** fragment moved down from above: needs context! **\*\***
The manifest template commands are:
+-------------------------------------------+-----------------------------------------------+
| Command | Description |
+===========================================+===============================================+
| :command:`include pat1 pat2 ...` | include all files matching any of the listed |
| | patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`exclude pat1 pat2 ...` | exclude all files matching any of the listed |
| | patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`recursive-include dir pat1 pat2 | include all files under *dir* matching any of |
| ...` | the listed patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`recursive-exclude dir pat1 pat2 | exclude all files under *dir* matching any of |
| ...` | the listed patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`global-include pat1 pat2 ...` | include all files anywhere in the source tree |
| | matching --- & any of the listed patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`global-exclude pat1 pat2 ...` | exclude all files anywhere in the source tree |
| | matching --- & any of the listed patterns |
+-------------------------------------------+-----------------------------------------------+
| :command:`prune dir` | exclude all files under *dir* |
+-------------------------------------------+-----------------------------------------------+
| :command:`graft dir` | include all files under *dir* |
+-------------------------------------------+-----------------------------------------------+
The patterns here are Unix-style "glob" patterns: ``*`` matches any sequence of
regular filename characters, ``?`` matches any single regular filename
character, and ``[range]`` matches any of the characters in *range* (e.g.,
``a-z``, ``a-zA-Z``, ``a-f0-9_.``). The definition of "regular filename
character" is platform-specific: on Unix it is anything except slash; on Windows
anything except backslash or colon.
**\*\*** Windows support not there yet **\*\***
.. % \section{Creating a built distribution: the .. % \section{Creating a built distribution: the
.. % \protect\command{bdist} command family} .. % \protect\command{bdist} command family}
.. % \label{bdist-cmds} .. % \label{bdist-cmds}
......
...@@ -233,6 +233,58 @@ With exactly the same source tree layout, this extension can be put in the ...@@ -233,6 +233,58 @@ With exactly the same source tree layout, this extension can be put in the
ext_modules=[Extension('foopkg.foo', ['foo.c'])], ext_modules=[Extension('foopkg.foo', ['foo.c'])],
) )
Checking a package
==================
The ``check`` command allows you to verify if your package meta-data
meet the minimum requirements to build a distribution.
To run it, just call it using your :file:`setup.py` script. If something is
missing, ``check`` will display a warning.
Let's take an example with a simple script::
from distutils.core import setup
setup(name='foobar')
Running the ``check`` command will display some warnings::
$ python setup.py check
running check
warning: check: missing required meta-data: version, url
warning: check: missing meta-data: either (author and author_email) or
(maintainer and maintainer_email) must be supplied
If you use the reStructuredText syntax in the `long_description` field and
`docutils <http://docutils.sourceforge.net/>`_ is installed you can check if
the syntax is fine with the ``check`` command, using the `restructuredtext`
option.
For example, if the :file:`setup.py` script is changed like this::
from distutils.core import setup
desc = """\
My description
=============
This is the description of the ``foobar`` package.
"""
setup(name='foobar', version='1', author='tarek',
author_email='tarek@ziade.org',
url='http://example.com', long_description=desc)
Where the long description is broken, ``check`` will be able to detect it
by using the `docutils` parser::
$ pythontrunk setup.py check --restructuredtext
running check
warning: check: Title underline too short. (line 2)
warning: check: Could not finish the parsing.
.. % \section{Multiple extension modules} .. % \section{Multiple extension modules}
.. % \label{multiple-ext} .. % \label{multiple-ext}
......
...@@ -15,8 +15,8 @@ want to modify existing commands; many simply add a few file extensions that ...@@ -15,8 +15,8 @@ want to modify existing commands; many simply add a few file extensions that
should be copied into packages in addition to :file:`.py` files as a should be copied into packages in addition to :file:`.py` files as a
convenience. convenience.
Most distutils command implementations are subclasses of the Most distutils command implementations are subclasses of the :class:`Command`
:class:`distutils.cmd.Command` class. New commands may directly inherit from class from :mod:`distutils.cmd`. New commands may directly inherit from
:class:`Command`, while replacements often derive from :class:`Command` :class:`Command`, while replacements often derive from :class:`Command`
indirectly, directly subclassing the command they are replacing. Commands are indirectly, directly subclassing the command they are replacing. Commands are
required to derive from :class:`Command`. required to derive from :class:`Command`.
......
...@@ -207,7 +207,7 @@ However, you can also include SWIG interface (:file:`.i`) files in the list; the ...@@ -207,7 +207,7 @@ However, you can also include SWIG interface (:file:`.i`) files in the list; the
SWIG on the interface file and compile the resulting C/C++ file into your SWIG on the interface file and compile the resulting C/C++ file into your
extension. extension.
.. XXX SWIG support is rough around the edges and largely untested! **\*\*** SWIG support is rough around the edges and largely untested! **\*\***
This warning notwithstanding, options to SWIG can be currently passed like This warning notwithstanding, options to SWIG can be currently passed like
this:: this::
...@@ -326,7 +326,7 @@ include the location in ``library_dirs``:: ...@@ -326,7 +326,7 @@ include the location in ``library_dirs``::
(Again, this sort of non-portable construct should be avoided if you intend to (Again, this sort of non-portable construct should be avoided if you intend to
distribute your code.) distribute your code.)
.. XXX Should mention clib libraries here or somewhere else! **\*\*** Should mention clib libraries here or somewhere else! **\*\***
Other options Other options
......
...@@ -26,16 +26,16 @@ to create a gzipped tarball and a zip file. The available formats are: ...@@ -26,16 +26,16 @@ to create a gzipped tarball and a zip file. The available formats are:
+===========+=========================+=========+ +===========+=========================+=========+
| ``zip`` | zip file (:file:`.zip`) | (1),(3) | | ``zip`` | zip file (:file:`.zip`) | (1),(3) |
+-----------+-------------------------+---------+ +-----------+-------------------------+---------+
| ``gztar`` | gzip'ed tar file | \(2) | | ``gztar`` | gzip'ed tar file | (2),(4) |
| | (:file:`.tar.gz`) | | | | (:file:`.tar.gz`) | |
+-----------+-------------------------+---------+ +-----------+-------------------------+---------+
| ``bztar`` | bzip2'ed tar file | | | ``bztar`` | bzip2'ed tar file | \(4) |
| | (:file:`.tar.bz2`) | | | | (:file:`.tar.bz2`) | |
+-----------+-------------------------+---------+ +-----------+-------------------------+---------+
| ``ztar`` | compressed tar file | \(4) | | ``ztar`` | compressed tar file | \(4) |
| | (:file:`.tar.Z`) | | | | (:file:`.tar.Z`) | |
+-----------+-------------------------+---------+ +-----------+-------------------------+---------+
| ``tar`` | tar file (:file:`.tar`) | | | ``tar`` | tar file (:file:`.tar`) | \(4) |
+-----------+-------------------------+---------+ +-----------+-------------------------+---------+
Notes: Notes:
...@@ -51,16 +51,8 @@ Notes: ...@@ -51,16 +51,8 @@ Notes:
of the standard Python library since Python 1.6) of the standard Python library since Python 1.6)
(4) (4)
requires the :program:`compress` program. Notice that this format is now requires external utilities: :program:`tar` and possibly one of :program:`gzip`,
pending for deprecation and will be removed in the future versions of Python. :program:`bzip2`, or :program:`compress`
When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or
``tar``) under Unix, you can specify the ``owner`` and ``group`` names
that will be set for each member of the archive.
For example, if you want all files of the archive to be owned by root::
python setup.py sdist --owner=root --group=root
.. _manifest: .. _manifest:
...@@ -76,10 +68,10 @@ source distribution: ...@@ -76,10 +68,10 @@ source distribution:
:option:`packages` options :option:`packages` options
* all C source files mentioned in the :option:`ext_modules` or * all C source files mentioned in the :option:`ext_modules` or
:option:`libraries` options :option:`libraries` options (
.. XXX Getting C library sources is currently broken -- no **\*\*** getting C library sources currently broken---no
:meth:`get_source_files` method in :file:`build_clib.py`! :meth:`get_source_files` method in :file:`build_clib.py`! **\*\***)
* scripts identified by the :option:`scripts` option * scripts identified by the :option:`scripts` option
See :ref:`distutils-installing-scripts`. See :ref:`distutils-installing-scripts`.
...@@ -111,60 +103,9 @@ per line, regular files (or symlinks to them) only. If you do supply your own ...@@ -111,60 +103,9 @@ per line, regular files (or symlinks to them) only. If you do supply your own
:file:`MANIFEST`, you must specify everything: the default set of files :file:`MANIFEST`, you must specify everything: the default set of files
described above does not apply in this case. described above does not apply in this case.
See :ref:`manifest_template` section for a syntax reference.
.. _manifest-options:
Manifest-related options
========================
The normal course of operations for the :command:`sdist` command is as follows:
* if the manifest file, :file:`MANIFEST` doesn't exist, read :file:`MANIFEST.in`
and create the manifest
* if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest
with just the default file set
* if either :file:`MANIFEST.in` or the setup script (:file:`setup.py`) are more
recent than :file:`MANIFEST`, recreate :file:`MANIFEST` by reading
:file:`MANIFEST.in`
* use the list of files now in :file:`MANIFEST` (either just generated or read
in) to create the source distribution archive(s)
There are a couple of options that modify this behaviour. First, use the
:option:`--no-defaults` and :option:`--no-prune` to disable the standard
"include" and "exclude" sets.
Second, you might just want to (re)generate the manifest, but not create a
source distribution::
python setup.py sdist --manifest-only
:option:`-o` is a sortcut for :option:`--manifest-only`.
.. _manifest_template:
The MANIFEST.in template
========================
A :file:`MANIFEST.in` file can be added in a project to define the list of
files to include in the distribution built by the :command:`sdist` command.
When :command:`sdist` is run, it will look for the :file:`MANIFEST.in` file
and interpret it to generate the :file:`MANIFEST` file that contains the
list of files that will be included in the package.
This mechanism can be used when the default list of files is not enough.
(See :ref:`manifest`).
Principle
---------
The manifest template has one command per line, where each command specifies a The manifest template has one command per line, where each command specifies a
set of files to include or exclude from the source distribution. For an set of files to include or exclude from the source distribution. For an
example, let's look at the Distutils' own manifest template:: example, again we turn to the Distutils' own manifest template::
include *.txt include *.txt
recursive-include examples *.txt *.py recursive-include examples *.txt *.py
...@@ -176,7 +117,9 @@ matching :file:`\*.txt` or :file:`\*.py`, and exclude all directories matching ...@@ -176,7 +117,9 @@ matching :file:`\*.txt` or :file:`\*.py`, and exclude all directories matching
:file:`examples/sample?/build`. All of this is done *after* the standard :file:`examples/sample?/build`. All of this is done *after* the standard
include set, so you can exclude files from the standard set with explicit include set, so you can exclude files from the standard set with explicit
instructions in the manifest template. (Or, you can use the instructions in the manifest template. (Or, you can use the
:option:`--no-defaults` option to disable the standard set entirely.) :option:`--no-defaults` option to disable the standard set entirely.) There are
several other commands available in the manifest template mini-language; see
section :ref:`sdist-cmd`.
The order of commands in the manifest template matters: initially, we have the The order of commands in the manifest template matters: initially, we have the
list of default files as described above, and each command in the template adds list of default files as described above, and each command in the template adds
...@@ -230,41 +173,36 @@ should always be slash-separated; the Distutils will take care of converting ...@@ -230,41 +173,36 @@ should always be slash-separated; the Distutils will take care of converting
them to the standard representation on your platform. That way, the manifest them to the standard representation on your platform. That way, the manifest
template is portable across operating systems. template is portable across operating systems.
Commands
-------- .. _manifest-options:
The manifest template commands are: Manifest-related options
========================
+-------------------------------------------+-----------------------------------------------+
| Command | Description | The normal course of operations for the :command:`sdist` command is as follows:
+===========================================+===============================================+
| :command:`include pat1 pat2 ...` | include all files matching any of the listed | * if the manifest file, :file:`MANIFEST` doesn't exist, read :file:`MANIFEST.in`
| | patterns | and create the manifest
+-------------------------------------------+-----------------------------------------------+
| :command:`exclude pat1 pat2 ...` | exclude all files matching any of the listed | * if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest
| | patterns | with just the default file set
+-------------------------------------------+-----------------------------------------------+
| :command:`recursive-include dir pat1 pat2 | include all files under *dir* matching any of | * if either :file:`MANIFEST.in` or the setup script (:file:`setup.py`) are more
| ...` | the listed patterns | recent than :file:`MANIFEST`, recreate :file:`MANIFEST` by reading
+-------------------------------------------+-----------------------------------------------+ :file:`MANIFEST.in`
| :command:`recursive-exclude dir pat1 pat2 | exclude all files under *dir* matching any of |
| ...` | the listed patterns | * use the list of files now in :file:`MANIFEST` (either just generated or read
+-------------------------------------------+-----------------------------------------------+ in) to create the source distribution archive(s)
| :command:`global-include pat1 pat2 ...` | include all files anywhere in the source tree |
| | matching --- & any of the listed patterns | There are a couple of options that modify this behaviour. First, use the
+-------------------------------------------+-----------------------------------------------+ :option:`--no-defaults` and :option:`--no-prune` to disable the standard
| :command:`global-exclude pat1 pat2 ...` | exclude all files anywhere in the source tree | "include" and "exclude" sets.
| | matching --- & any of the listed patterns |
+-------------------------------------------+-----------------------------------------------+ Second, you might just want to (re)generate the manifest, but not create a source
| :command:`prune dir` | exclude all files under *dir* | distribution::
+-------------------------------------------+-----------------------------------------------+
| :command:`graft dir` | include all files under *dir* | python setup.py sdist --manifest-only
+-------------------------------------------+-----------------------------------------------+
:option:`-o` is a shortcut for :option:`--manifest-only`.
The patterns here are Unix-style "glob" patterns: ``*`` matches any sequence of
regular filename characters, ``?`` matches any single regular filename
character, and ``[range]`` matches any of the characters in *range* (e.g.,
``a-z``, ``a-zA-Z``, ``a-f0-9_.``). The definition of "regular filename
character" is platform-specific: on Unix it is anything except slash; on Windows
anything except backslash or colon.
...@@ -60,13 +60,13 @@ in the package:: ...@@ -60,13 +60,13 @@ in the package::
setup(name='Distutils', setup(name='Distutils',
long_description=open('README.txt')) long_description=open('README.txt'))
In that case, :file:`README.txt` is a regular reStructuredText text file located In that case, `README.txt` is a regular reStructuredText text file located
in the root of the package besides :file:`setup.py`. in the root of the package besides `setup.py`.
To prevent registering broken reStructuredText content, you can use the To prevent registering broken reStructuredText content, you can use the
:program:`rst2html` program that is provided by the :mod:`docutils` package :program:`rst2html` program that is provided by the `docutils` package
and check the ``long_description`` from the command line:: and check the ``long_description`` from the command line::
$ python setup.py --long-description | rst2html.py > output.html $ python setup.py --long-description | rst2html.py > output.html
:mod:`docutils` will display a warning if there's something wrong with your syntax. `docutils` will display a warning if there's something wrong with your syntax.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment