Configure Python
Configure Python
bug-pyconfigure@[Link]
This manual is for pyconfigure (version 0.2.1, updated 21 August 2013).
Copyright c 2012, 2013 Brandon Invergo
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.2 or any later
version published by the Free Software Foundation; with no Invariant Sections,
no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included
in the section entitled “GNU Free Documentation License.”
i
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Configuring Python packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Invoking pyconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1 PKG-INFO metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4 Existing projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Customization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1.1 Required macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1.2 Verifying the Python version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1.3 Checking for a module or function . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1.4 Writing test programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.1.5 Using Sphinxbuild to build documentation . . . . . . . . . . . . . . . . . 8
5.2 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2.1 [Link] (distutils) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2.2 [Link] (Make) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6 Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.1 Autoconf macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1 Introduction
Python packages typically are configured and installed through the use of the distutils
module or one of its derivatives. The user performs necessary actions via a Python script
called [Link]. For simple programs, this is straight-forward. However, for more complex
software packages, especially for those which also include code in other languages such as
C or Fortran, the limitations of the distutils method quickly become apparent.
The configuration and installation of GNU software and many other programs, on the
other hand, is done according to the use of standard configure scripts and Make recipes.
This method has the advantage of being language-agnostic, very flexible, and time-proven.
pyconfigure consists of all the files necessary to begin using the standard GNU build process
to configure and install a Python package.
Argument Description
However, as the developer is expected to customize these files, the final configure script
may take many more arguments. The developer is expected to provide proper documenta-
tion in this case.
Chapter 2: Installation 2
2 Installation
Pyconfigure includes the template files that you will use in your projects, the pyconf script
to copy those files into a project’s directory, and this documentation. In order for their
usage to be convenient, it is recommended to install them. Installation of pyconfigure
follows the standard GNU installation procedure. Upon unpacking the source, navigate
into its directory and run the following command sequence:
$ ./configure --prefix=/usr/local
$ make install
If you wish the files to be installed to a different location, specify it using the --prefix
option.
Chapter 3: Invoking pyconf 3
3 Invoking pyconf
Before invoking the pyconf script, you first must decide whether you would prefer to have
your installation logic written in Python or in Make. If you choose the former, the generated
Makefile will be a wrapper around the Python installation script (i.e. [Link]), while if
you choose the latter, the Python installation script will be a wrapper around the Makefile.
Next, you must create a PKG-INFO file containing standard metadata about your project
(see Section 3.1 [PKG-INFO metadata], page 3). Finally, in the most basic case, you would
navigate to your project’s directory and simply invoke pyconf on your project’s PKG-INFO
file:
$ pyconf PKG-INFO
This will generate a [Link] Autoconf file, a configure script generated from
that Autoconf file, a [Link] installation file (to be configured by the user upon the
invocation of configure) and a [Link] file which wraps the functionality of [Link].
If any of these files already exist, pyconf will not overwrite them unless the --overwrite
option is passed.
If you wish the files to be copied into a different directory, you may add the --output
option (or its short form -o) to specify the directory into which you would prefer the files
to be copied.
$ pyconf -output=$HOME/Projects/pyproject PKG-INFO
If you would prefer to write your installation logic using Make, pass the --prefer-make
(-m) option:
$ pyconf --prefer-make PKG-INFO
Now, the [Link] script that is generated will instead be a wrapper around the
[Link] file. You would then extend the installation process in the latter file.
If you would prefer a pure-Python approach, pyconf may optionally not generate any
Makefile by passing the --no-make option. Finally, if you only need pyconfigure’s Autoconf
macros, you may pass the --macros-only option, which causes pyconf to exit immediately
after copying the macros into your package directory.
Metadata-Version: 1.2
Name: foo
Version: 1.5
Author-email: bug-foo@[Link]
Chapter 4: Existing projects 5
4 Existing projects
Using pyconfigure with existing projects is easy. For example, if your project already has
a [Link] script, there is no need to replace it with pyconfigure. In this case, the best
way to proceed would be to run pyconf to copy all of the files into your project’s directory.
Next, you simply need to copy the contents of your [Link] script into [Link]. Be
sure not to just overwrite the file directly! Inside [Link] you will see several strings
like @PACKAGE_NAME@. These are strings that will be replaced by the configure script and
they should remain as they are. Most of the contents of the standard setup function should
have already been filled in through the information in the PKG-INFO file but if not, they can
be filled in manually. The default [Link] script is otherwise very simple, meaning
any extensions to it that you have written in your [Link] script can simply be copied in.
If your project does not yet have a [Link] script but it already has a Makefile, the
process is even easier. Simply call pyconf with --prefer-make and the [Link] file
that is generated in your project’s directory will simply wrap your Makefile (just be sure
not to pass the --overwrite option!).
Chapter 5: Customization 6
5 Customization
Once pyconf has generated the files in your project’s directory, you should customize them
to meet your project’s needs.
In particular, you will want to customize [Link] and [Link] or
[Link]. [Link] contains a series of macros which are used by Autoconf
to build a portable configure shell script. This script either guesses important system
settings or is provided them by the user. When the user invokes configure, it uses
[Link] and [Link] as templates to create the Make recipe Makefile and the
Python setup script [Link].
5.1 [Link]
There are some minimum modifications that should be made in [Link]. The file
contains a significant amount of information in the form of comments, so it is possible to
discern your needs while editing. For more advanced usage, it is recommended to refer to
the See Info file autoconf, node ‘Autoconf’.
In this file you will see a macro called AC_INIT. This is a standard Autoconf macro.
The arguments to this are automatically generated from the PKG-INFO file that you used.
These three values are used extensively in the files modified by the configure script, so it is
important that they be correct.
Further down, you will also find a macro called PC_INIT. This is the core macro of
pyconfigure. This will build the code necessary to find a suitable Python interpreter on
the user’s computer. To that end, you can pass arguments to this macro which specify the
minimum and/or maximum supported Python versions.
While the default [Link] script will likely be sufficient for a basic Python-based
project, it may be made to be much more powerful for packages with more complex needs.
To that end, several Autoconf macros are provided in the file m4/python.m4 to allow the
developer to write robust tests See Section 6.1 [Autoconf macros], page 11. Note that when
you distribute your software, you must include this directory and file with your distribution
if you also distribute your [Link] file.
Once you modify your [Link] to your liking, you must regenerate your configure
script with the [Link] script that is generated by pyconfigure.
$ ./[Link]
A full explanation of the general use of Autoconf macros is beyond the scope of this
document, however it is worth presenting some examples.
AC_CONFIG_MACRO_DIR([m4])
This macro imports all of the Python Autoconf macros. If you choose to write your own
macros for other purposes, you should include them in the m4 directory as well.
PC_INIT([2.5], [3.3.1])
This is the key macro. It finds a Python interpreter available on the system that meets
optional version requirements specified in its arguments and saves its path in the PYTHON
variable. Generally speaking, the highest-version Python interpreter found within the given
version range (inclusive) will be used. Note, however, that minor version differences may
cause discrepancies. For example, the user may have Python 3.3.1 installed but a slight
difference in its release may cause the interpreter to internally report a slightly higher
version, causing this interpreter to not pass the version check. To be safe, set the maximum
version one bugfix release higher (i.e. “3.3.2” in this case).
PC_PYTHON_SITE_PACKAGE_DIR
PC_PYTHON_EXEC_PACKAGE_DIR
These two macros figure out where Python expects packages to be installed (i.e.
/usr/lib/python2.7/site-packages/) and saves them in the variables pkgpythondir
and pkgpyexecdir, respectively, for use in [Link]. These macros are only required
if you will be writing your installation logic in Make.
5.2 [Link]
How you will customize the file [Link] and, indeed, what you will find in the file
when it is first generated both depend on whether you specified if you prefer to write your
installation logic in Make See Chapter 3 [Invoking pyconf], page 3.
Chapter 5: Customization 9
The directories listed under PYPACKAGES will only have their Python files installed. If
your modules depend on other, non-Python data files, you may list these under the PKG_
DATA variable. Data files should be listed relative to their parent module. Thus, if module
“foo” contains a file called [Link], set PKG_DATA = foo/[Link].
Other data files, which are not specific to any of the Python modules, may be specified
under the DATA variable. As before, if your data files are all stored under a particular
sub-directory, you may specify it in DATA_ROOT. Files listed under DATA are installed to the
package’s data directory, which is typically /usr/local/share/$package).
Finally, if your package has any scripts to install, list them under the SCRIPTS variable.
They should be listed as files relative to the directory containing [Link]. Thus, if
your script baz is located in the sub-directory bin, you would set SCRIPTS = bin/baz.
One particular advantage of writing the installation logic in Make is the ease with which
you may work with non-Python code in your project, such as extensions written in C. How
these recipes are to be written is dependent upon the build requirements of this code, and
you are thus referred to the See Info file make, node ‘Make’. Any installation recipes should
be given their own targets and made as prerequisites of the “install” target.
5.3 [Link]
pyconf will automatically generate a [Link] file, to be configured by the configure
script to produce the Python [Link] script. If the --prefer-make option was specified,
this file will merely contain Python code which calls Make on the generated Makefile,
and needs not to be modified. Otherwise, the file will contain basic Python code to use
distutils for package installation. The reader is referred to the Python documentation
for more information on how to customize this file.
Chapter 6: Appendix 11
6 Appendix
under this License. If a section does not fit the above definition of Secondary then it is
not allowed to be designated as Invariant. The Document may contain zero Invariant
Sections. If the Document does not identify any Invariant Sections then there are none.
The “Cover Texts” are certain short passages of text that are listed, as Front-Cover
Texts or Back-Cover Texts, in the notice that says that the Document is released under
this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may
be at most 25 words.
A “Transparent” copy of the Document means a machine-readable copy, represented
in a format whose specification is available to the general public, that is suitable for
revising the document straightforwardly with generic text editors or (for images com-
posed of pixels) generic paint programs or (for drawings) some widely available drawing
editor, and that is suitable for input to text formatters or for automatic translation to
a variety of formats suitable for input to text formatters. A copy made in an otherwise
Transparent file format whose markup, or absence of markup, has been arranged to
thwart or discourage subsequent modification by readers is not Transparent. An image
format is not Transparent if used for any substantial amount of text. A copy that is
not “Transparent” is called “Opaque”.
Examples of suitable formats for Transparent copies include plain ASCII without
markup, Texinfo input format, LaTEX input format, SGML or XML using a publicly
available DTD, and standard-conforming simple HTML, PostScript or PDF designed
for human modification. Examples of transparent image formats include PNG, XCF
and JPG. Opaque formats include proprietary formats that can be read and edited
only by proprietary word processors, SGML or XML for which the DTD and/or pro-
cessing tools are not generally available, and the machine-generated HTML, PostScript
or PDF produced by some word processors for output purposes only.
The “Title Page” means, for a printed book, the title page itself, plus such following
pages as are needed to hold, legibly, the material this License requires to appear in the
title page. For works in formats which do not have any title page as such, “Title Page”
means the text near the most prominent appearance of the work’s title, preceding the
beginning of the body of the text.
The “publisher” means any person or entity that distributes copies of the Document
to the public.
A section “Entitled XYZ” means a named subunit of the Document whose title either
is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in
another language. (Here XYZ stands for a specific section name mentioned below, such
as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve
the Title” of such a section when you modify the Document means that it remains a
section “Entitled XYZ” according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that
this License applies to the Document. These Warranty Disclaimers are considered to
be included by reference in this License, but only as regards disclaiming warranties:
any other implication that these Warranty Disclaimers may have is void and has no
effect on the meaning of this License.
2. VERBATIM COPYING
Appendix A: GNU Free Documentation License 15
You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license
notice saying this License applies to the Document are reproduced in all copies, and
that you add no other conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further copying of the copies
you make or distribute. However, you may accept compensation in exchange for copies.
If you distribute a large enough number of copies you must also follow the conditions
in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly
display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of
the Document, numbering more than 100, and the Document’s license notice requires
Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all
these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify you as the publisher
of these copies. The front cover must present the full title with all words of the title
equally prominent and visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve the title of the
Document and satisfy these conditions, can be treated as verbatim copying in other
respects.
If the required texts for either cover are too voluminous to fit legibly, you should put
the first ones listed (as many as fit reasonably) on the actual cover, and continue the
rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100,
you must either include a machine-readable Transparent copy along with each Opaque
copy, or state in or with each Opaque copy a computer-network location from which
the general network-using public has access to download using public-standard network
protocols a complete Transparent copy of the Document, free of added material. If
you use the latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent copy will
remain thus accessible at the stated location until at least one year after the last time
you distribute an Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the Document well
before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions
of sections 2 and 3 above, provided that you release the Modified Version under precisely
this License, with the Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever possesses a copy of
it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any,
Appendix A: GNU Free Documentation License 16
be listed in the History section of the Document). You may use the same title as
a previous version if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least five
of the principal authors of the Document (all of its principal authors, if it has fewer
than five), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modified Version, as the
publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
F. Include, immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in the form
shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Document’s license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item
stating at least the title, year, new authors, and publisher of the Modified Version
as given on the Title Page. If there is no section Entitled “History” in the Docu-
ment, create one stating the title, year, authors, and publisher of the Document
as given on its Title Page, then add an item describing the Modified Version as
stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public access to
a Transparent copy of the Document, and likewise the network locations given in
the Document for previous versions it was based on. These may be placed in the
“History” section. You may omit a network location for a work that was published
at least four years before the Document itself, or if the original publisher of the
version it refers to gives permission.
K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title
of the section, and preserve in the section all the substance and tone of each of the
contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text and
in their titles. Section numbers or the equivalent are not considered part of the
section titles.
M. Delete any section Entitled “Endorsements”. Such a section may not be included
in the Modified Version.
N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in
title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify
as Secondary Sections and contain no material copied from the Document, you may at
your option designate some or all of these sections as invariant. To do this, add their
Appendix A: GNU Free Documentation License 17
titles to the list of Invariant Sections in the Modified Version’s license notice. These
titles must be distinct from any other section titles.
You may add a section Entitled “Endorsements”, provided it contains nothing but
endorsements of your Modified Version by various parties—for example, statements of
peer review or that the text has been approved by an organization as the authoritative
definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be
added by (or through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or by arrangement
made by the same entity you are acting on behalf of, you may not add another; but
you may replace the old one, on explicit permission from the previous publisher that
added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission
to use their names for publicity for or to assert or imply endorsement of any Modified
Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License,
under the terms defined in section 4 above for modified versions, provided that you
include in the combination all of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your combined work in its license
notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment
to the section titles in the list of Invariant Sections in the license notice of the combined
work.
In the combination, you must combine any sections Entitled “History” in the vari-
ous original documents, forming one section Entitled “History”; likewise combine any
sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You
must delete all sections Entitled “Endorsements.”
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released
under this License, and replace the individual copies of this License in the various
documents with a single copy that is included in the collection, provided that you
follow the rules of this License for verbatim copying of each of the documents in all
other respects.
You may extract a single document from such a collection, and distribute it individu-
ally under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of
that document.
Appendix A: GNU Free Documentation License 18