Checked in with Andrew's blessing, I leave the comments with which

this was posted to distutils-sig in.

Here is what I've hacked together over some spare time
at the weekend. I would appreciate feedback, as I've told
before I'm neither a great author, nor native english speaker,
nor anything else.

Mostly I've completed (and written) docs for bdist_wininst
(where I'm an experert for), also I've started some stuff
for the data_files and scripts option.

Should I continue in this way? Would others like to jump in?
This commit is contained in:
Thomas Heller 2001-02-19 17:48:03 +00:00
parent 15bc404ca8
commit 5f52f7230c
1 changed files with 106 additions and 26 deletions

132
Doc/dist/dist.tex vendored
View File

@ -53,7 +53,7 @@ Modules} manual.
Using the Distutils is quite simple, both for module developers and for
users/administrators installing third-party modules. As a developer,
your responsibilites (apart from writing solid, well-documented and
your responsibilities (apart from writing solid, well-documented and
well-tested code, of course!) are:
\begin{itemize}
\item write a setup script (\file{setup.py} by convention)
@ -148,19 +148,7 @@ python setup.py bdist_wininst
will create an executable installer, \file{Foo-1.0.win32.exe}, in the
current directory.
\XXX{not implemented yet}
(Another way to create executable installers for Windows is with the
\command{bdist\_wise} command, which uses Wise---the commercial
installer-generator used to create Python's own installer---to create
the installer. Wise-based installers are more appropriate for large,
industrial-strength applications that need the full capabilities of a
``real'' installer. \command{bdist\_wininst} creates a self-extracting
zip file with a minimal user interface, which is enough for small- to
medium-sized module collections. You'll need to have version XXX of
Wise installed on your system for the \command{bdist\_wise} command to
work; it's available from \url{http://foo/bar/baz}.)
Currently (Distutils 0.9.2), the are only other useful built
Currently (Distutils 0.9.2), the only other useful built
distribution format is RPM, implemented by the \command{bdist\_rpm}
command. For example, the following command will create an RPM file
called \file{Foo-1.0.noarch.rpm}:
@ -192,7 +180,7 @@ following glossary of common Python terms:
single \file{.py} file (and possibly associated \file{.pyc} and/or
\file{.pyo} files). Sometimes referred to as a ``pure module.''
\item[extension module] a module written in the low-level language of
the Python implemention: C/C++ for Python, Java for JPython.
the Python implementation: C/C++ for Python, Java for JPython.
Typically contained in a single dynamically loadable pre-compiled
file, e.g. a shared object (\file{.so}) file for Python extensions on
\UNIX, a DLL (given the \file{.pyd} extension) for Python extensions
@ -290,6 +278,14 @@ this document are slash-separated (MacOS programmers should keep in
mind that the \emph{absence} of a leading slash indicates a relative
path, the opposite of the MacOS convention with colons).
This, of course, only applies to pathnames given to Distutils functions.
If you, for example, use standard python functions such as glob.glob
or os.listdir to specify files, you should be careful to write portable
code instead of hardcoding path separators:
\begin{verbatim}
glob.glob(os.path.join('mydir', 'subdir', '*.html'))
os.listdir(os.path.join('mydir', 'subdir'))
\end{verbatim}
\subsection{Listing whole packages}
\label{listing-packages}
@ -447,8 +443,9 @@ resulting C/C++ file into your extension.
On some platforms, you can include non-source files that are processed
by the compiler and included in your extension. Currently, this just
means Windows resource files for Visual C++. \XXX{get more detail on
this feature from Thomas Heller!}
means Windows message text (\file{.mc}) files and resource definition
(\file{.rc}) files for Visual C++. These will be compiled to binary resource
(\file{.res}) files and linked into the executable.
\subsubsection{Preprocessor options}
@ -550,9 +547,63 @@ Extension(...,
(Again, this sort of non-portable construct should be avoided if you
intend to distribute your code.)
\XXX{still undocumented: extra\_objects, extra\_compile\_args,
extra\_link\_args, export\_symbols---none of which are frequently
needed, some of which might be completely unnecessary!}
\XXX{Should mention clib libraries here or somewhere else!}
\subsubsection{Other options}
There are still some other options which can be used to handle special
cases.
The \option{extra\_objects} option is a list of object files to be passed
to the linker. These files must not have extensions, as the default
extension for the compiler is used.
\option{extra\_compile\_args} and \option{extra\_link\_args} can be used
to specify additional command line options for the compiler resp.
the linker command line.
\option{export\_symbols} is only useful on windows, it can contain a list
of symbols (functions or variables) to be exported. This option
is not needed when building compiled extensions: the \code{initmodule}
function will automatically be added to the exported symbols list
by Distutils.
\subsection{Listing scripts}
So far we have been dealing with pure and non-pure Python modules,
which are usually not run by themselves but imported by scripts.
Scripts are files containing Python source code, indended to be started
from the command line.
Distutils doesn't provide much functionality for the scripts: the only
support Distutils gives is to adjust the first line of the script
if it starts with \code{#!} and contains the word ``python'' to refer
to the current interpreter location.
The \option{scripts} option simply is a list of files to be handled
in this way.
\subsection{Listing additional files}
The \option{data\_files} option can be used to specify additional
files needed by the module distribution: configuration files,
data files, anything which does not fit in the previous categories.
\option{data\_files} specify a sequence of \code{(directory, files)}
pairs in the following way:
\begin{verbatim}
setup(...
data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
('config', ['cfg/data.cfg'])])
\end{verbatim}
Note that you can specify the directory names where the data files
will be installed, but you cannot rename the data files themselves.
You can specify the \option{data\_files} options as a simple sequence
of files without specifying a target directory, but this is not recommended,
and the \command{install} command will print a warning in this case.
To install data files directly in the target directory, an empty
string should be given as the directory.
\section{Writing the Setup Configuration File}
@ -948,8 +999,7 @@ The available formats for built distributions are:
\lineiii{zip}{zip file (\file{.zip})}{(4)}
\lineiii{rpm}{RPM}{(5)}
\lineiii{srpm}{source RPM}{(5) \XXX{to do!}}
\lineiii{wininst}{self-extracting ZIP file for Windows}{(2),(6)}
%\lineiii{wise}{Wise installer for Windows}{(3)}
\lineiii{wininst}{self-extracting ZIP file for Windows}{(2),(4)}
\end{tableiii}
\noindent Notes:
@ -962,8 +1012,6 @@ The available formats for built distributions are:
\module{zipfile} module (not part of the standard Python library)
\item[(5)] requires external \program{rpm} utility, version 3.0.4 or
better (use \code{rpm --version} to find out which version you have)
\item[(6)] \XXX{requirements for \command{bdist\_wininst}?}
%\item[(3)] not implemented yet
\end{description}
You don't have to use the \command{bdist} command with the
@ -980,7 +1028,6 @@ each, are:
\lineii{bdist\_dumb}{tar, ztar, gztar, zip}
\lineii{bdist\_rpm}{rpm, srpm}
\lineii{bdist\_wininst}{wininst}
%\lineii{bdist\_wise}{wise}
\end{tableii}
The following sections give details on the individual \command{bdist\_*}
@ -1093,7 +1140,7 @@ tree,'' in a temporary directory created by \command{bdist\_rpm}.)
\XXX{this isn't implemented yet---is it needed?!}
You can also specify a custom \file{.spec} file with the
\longprogramopt{spec-file} option; used in conjunctin with
\longprogramopt{spec-file} option; used in conjunction with
\longprogramopt{spec-only}, this gives you an opportunity to customize
the \file{.spec} file manually:
\begin{verbatim}
@ -1110,7 +1157,38 @@ extending the Distutils.)
\subsection{Creating Windows installers}
\label{creating-wininst}
Executable Windows installers are the natural format for binary
distributions on Windows. They display a nice GUI interface, display
some information of the module distribution to be installed, taken
from the meta-dada in the setup script, let the user select a few
(currently maybe too few) options, and start or cancel the installation.
Since the meta-data is taken from the setup script, creating
Windows installers is usually as easy as running:
\begin{verbatim}
python setup.py bdist_wininst
\end{verbatim}
or the \command{bdist} command with the \longprogramopt{format} option:
\begin{verbatim}
python setup.py bdist --formats=wininst
\end{verbatim}
If you have a pure module distribution (only containing pure
Python modules and packages), the resulting installer will be
version independent and have a name like \file{Foo-1.0.win32.exe}.
These installers can even be created on \UNIX{} or MacOS platforms.
If you have a non-pure distribution, the extensions can only be
created on a Windows platform, and will be Python version dependend.
The installer filename will reflect this and now has the form
\file{Foo-1.0.win32-py2.0.exe}. You have to create a separate installer
for every Python version you want to support.
The installer will try to compile pure modules into bytecode after
installation on the target system in normal and optimizing mode.
If you don't want this to happen for some reason, you can run
the bdist_wininst command with the \longprogramopt{no-target-compile} and/or
the \longprogramopt{no-target-optimize} option.
\section{Examples}
\label{examples}
@ -1147,6 +1225,8 @@ extending the Distutils.)
\subsection{Writing new commands}
\label{new-commands}
\XXX{Would an uninstall command be a good example here?}
\section{Reference}