Ben Finney <ben+deb...@benfinney.id.au> writes: > * Address all the language around Python 2 versus Python 3 versus > Python general, and re-order or re-word to focus *primarily* on Python > 3, with Python 2 treated as the still-supported legacy system. > > I'm maintaining a Bazaar branch for this, feel free to get it:: > > $ mkdir python.benfinney/ && cd python.benfinney/ > $ bzr branch --bind > http://vcs.whitetree.org/bzr/public/debian/python/python-defaults-debian/devel/
Ben Finney <ben+deb...@benfinney.id.au> writes: > Thank you, Scott! I'll proceed with the semantic changes that promote > Python 3 to the primary position. Those changes are now in the above branch. The summary of changes from the commit messages: $ bzr log --log-format line --revision ancestor:.. 430: Ben Finney 2016-02-02 Re-phrase version distinctions to make Python 3 primary. 429: Ben Finney 2016-02-01 When only Python 2 is specified, just use literal “2” major version. 428: Ben Finney 2016-02-01 Use Python 3 examples where appropriate. 427: Ben Finney 2016-01-31 Refine some grammar and punctuation. 426: Ben Finney 2016-01-31 Distinguish “Python” the unversioned system versus “Python 2”. 425: Ben Finney 2016-01-30 [merge] Merge from ‘python-defaults-debian’ mainline. Also attached to this message as a Bazaar patch bundle.
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: ben+deb...@benfinney.id.au-20160201192807-\ # 7ux9dchggw9s8znh # target_branch: bzr+ssh://bzr.debian.org/bzr/pkg-python/python-\ # defaults-debian/ # testament_sha1: 6a28ebdd010851ced1dfe1087d61b9a1dbded494 # timestamp: 2016-02-02 06:36:06 +1100 # base_revision_id: sc...@kitterman.com-20160129221800-\ # kkxuexf3v28q9ro0 # # Begin patch === modified file 'debian/python-policy.sgml' --- debian/python-policy.sgml revid:sc...@kitterman.com-20160129221800-kkxuexf3v28q9ro0 +++ debian/python-policy.sgml revid:ben+deb...@benfinney.id.au-20160201192807-7ux9dchggw9s8znh @@ -84,10 +84,12 @@ <chapt id="python3"> <heading>On the move to Python 3</heading> <p> - Debian currently supports two Python stacks, one for Python 2 - and one for Python 3. The long term goal for Debian is to + Debian currently supports two Python stacks, one for Python 3 + and one for Python 2. The long term goal for Debian is to reduce this to one stack, dropping the Python 2 stack at some time. + </p> + <p> <url id="https://www.python.org/dev/peps/pep-0404/" name="PEP 404"> states that no more major Python 2 releases are planned, although the latest released minor version 2.7 @@ -112,10 +114,10 @@ </item> <item> <p> - Python libraries should be always packaged for Python 3 - if supported. Python 2 libraries should be packaged, if - applications found in the reverse dependencies are not - yet supported by Python 3. + Python libraries, if they support Python 3, should be always + packaged for Python 3. If an application supports only Python + 2, the Python libraries for that application should also be + packaged for Python 2. </p> </item> <item> @@ -133,12 +135,12 @@ <sect id="versions"> <heading>Versions</heading> <p> - At any given time, the binary package <package>python</package> - will represent the current default Debian Python version. The - binary package <package>python3</package> will represent the - current Debian Python 3 version. As far as is reasonable, Python - and Python 3 should be treated as separate runtime systems with - minimal interdependencies. + At any given time, the binary package <package>python3</package> + will represent the current default Debian Python 3 version; the + binary package <package>python</package> will represent the + current default Debian Python 2 version. As far as is reasonable, + Python 3 and Python 2 should be treated as separate runtime + systems with minimal interdependencies. </p> <p> In some cases, Python policy explicitly references Python helper @@ -150,15 +152,17 @@ It is a design goal to fully specify required interfaces and functions in policy for Python 3 and to avoid enshrining specific implementation details in policy. Except as noted, policy for - Python 3 is the same as Python with the addition of the version - number as needed to distinguish them. - </p> - <p> - The default Debian Python version should always be the latest - stable upstream version that can be fully integrated in Debian. + Python 2 is the same as Python 3 with the exception of the + different major version number as needed to distinguish them. + </p> + <p> + The default Debian Python version, for each of Python 3 and Python + 2, should always be the latest stable upstream version that can be + fully integrated in Debian. + </p> + <p> There may be newer supported or unsupported versions included in - the Debian if they are not fully integrated for a particular - release. + Debian if they are not fully integrated for a particular release. </p> <p> Apart from the default version, legacy versions of Python or beta @@ -178,17 +182,17 @@ </p> <p> - The set of currently supported Python versions can be found in - <file>/usr/share/python/debian_defaults</file>; the supported - interface to this information is <prgn>/usr/bin/pyversions</prgn>. The set of currently supported Python 3 versions can be found in <file>/usr/share/python3/debian_defaults</file>; the supported interface to this information is through <prgn>/usr/bin/py3versions</prgn>. + The set of currently supported Python 2 versions can be found in + <file>/usr/share/python/debian_defaults</file>; the supported + interface to this information is <prgn>/usr/bin/pyversions</prgn>. </p> <p> - These files are in Python ConfigParser format. They define (in - the <tt>DEFAULT</tt> section) the following options: + These files are in Python <tt>configparser</tt> format. They + define (in the <tt>DEFAULT</tt> section) the following options: <list> <item><tt>default-version</tt>: The name of the interpreter for the current default Debian Python.</item> @@ -228,7 +232,7 @@ <p> Excluded are modules that cannot be included for licensing reasons (for example the <tt>profile</tt> module), for dependency tracking - purposes (for example the GPL-licensed <tt>gdbm</tt> module) or + purposes (for example the GPL-licensed <tt>gdbm</tt> module), or that should not be included for packaging reasons (for example the <tt>tk</tt> module which depends on Xorg). </p> @@ -241,27 +245,37 @@ Documentation will be provided separately as well. </p> <p> + At any time, the <package>python3</package> binary package must + ensure that <file>/usr/bin/python3</file> is provided, as a + symlink to the current <file>python3.<var>Y</var></file> + executable. The package must depend on + the <package>python3.<var>Y</var></package> package that installs + the executable. + </p> + <p> + The version of the <package>python3</package> package must be + greater than or equal to 3.<var>Y</var> and lower than + 3.<var>Y+1</var>. + </p> + <p> At any time, the <package>python</package> binary package must - ensure that <file>/usr/bin/python</file> is provided as a symlink - to the current <file>python<var>X</var>.<var>Y</var></file> - executable. - </p> - <p> - The <package>python</package> binary package must also depend on - the appropriate <package>python<var>X</var>.<var>Y</var></package> - to ensure this runtime is installed. - </p> - <p> - The version of the <package>python</package> binary package must - be greater than or equal to <var>X</var>.<var>Y</var> and smaller - than <var>X</var>.<var>Y+1</var>. - </p> - <p> - Because upstream has started providing it, there will be a symlink - for <file>/usr/bin/python2</file> for Wheezy and later releases. See - <url id="https://www.python.org/dev/peps/pep-0394/" name="PEP 394"> - for details. Packages must be careful to depend on a sufficient - version of <package>python</package> if they make use of this symlink. + ensure that <file>/usr/bin/python2</file> is provided, as a + symlink to the current <file>python2.<var>Y</var></file> + executable. The package must depend on + the <package>python2.<var>Y</var></package> package that installs + the executable. + </p> + <p> + The version of the <package>python</package> package must be + greater than or equal to 2.<var>Y</var> and lower than + 2.<var>Y+1</var>. + </p> + <p> + The <package>python</package> binary package must also ensure + that <file>/usr/bin/python</file> is provided, as a symlink to the + current <file>python2.<var>Y</var></file> executable. See + <url id="https://www.python.org/dev/peps/pep-0394/" name="PEP + 394"> for details. </p> </sect> @@ -280,31 +294,57 @@ <sect1 id="interpreter_name"> <heading>Interpreter Name</heading> <p> - Python scripts depending on the default Python version (see <ref - id="base">) or not depending on a specific Python version should - use <file>python</file> (without a version) as the interpreter name. - </p> - <p> - Python scripts that only work with a specific Python version must - explicitly use the versioned interpreter name + The different Python major versions require different + interpreters (see <ref id="base">). + </p> + <p> + Python scripts that require the default Python 3 version should + specify <file>python3</file> as the interpreter name. + </p> + <p> + Python scripts that require the default Python 2 version should + specify <file>python2</file> as the interpreter name. + </p> + <p> + Python scripts may specify <file>python</file> as the + interpreter name only if they do not require any particular + version of Python. + </p> + <p> + Python scripts that only work with a specific Python minor + version must explicitly use the versioned interpreter name (<file>python<var>X</var>.<var>Y</var></file>). </p> </sect1> <sect1 id="interpreter_loc"> <heading>Interpreter Location</heading> <p> - The preferred specification for the Python interpreter is - <file>/usr/bin/python</file> or - <file>/usr/bin/python<var>X</var>.<var>Y</var></file>. - This ensures that a Debian installation of Python is used - and all dependencies on additional Python modules are met. - </p> - <p> - Maintainers should not override the Debian Python interpreter using - <file>/usr/bin/env python</file> or - <file>/usr/bin/env python<var>X</var>.<var>Y</var></file>. This is - not advisable as it bypasses Debian's dependency checking and makes - the package vulnerable to incomplete local installations of Python. + Python scripts should specify the Debian Python interpreter, to + ensure that the Debian Python installation is used and all + dependencies on additional Python modules are met. + </p> + <p> + The preferred specification for the Python 3 interpreter is + <file>/usr/bin/python3</file> (or + <file>/usr/bin/python3.<var>Y</var></file> if it requires Python + 3.<var>Y</var>). + </p> + <p> + The preferred specification for the Python 2 interpreter is + <file>/usr/bin/python2</file> (or + <file>/usr/bin/python2.<var>Y</var></file> if it requires Python + 2.<var>Y</var>). + </p> + <p> + Scripts requiring the default Python 2 version may instead + specify the interpreter <file>/usr/bin/python</file>. + </p> + <p> + Maintainers should not override the Debian Python interpreter + using <file>/usr/bin/env <var>name</var></file>. This is not + advisable as it bypasses Debian's dependency checking and makes + the package vulnerable to incomplete local installations of + Python. </p> </sect1> </sect> @@ -323,11 +363,14 @@ <tt>sys.path</tt>. </p> <p> - Public Python modules must be installed in the system Python - modules directory, - <file>/usr/lib/python<var>X</var>.<var>Y</var>/dist-packages</file>. - Public Python 3 modules must be installed in - <file>/usr/lib/python3/dist-packages</file>. + Public Python 3 modules must be installed in the system Python 3 + modules directory, <file>/usr/lib/python3/dist-packages</file>. + </p> + <p> + Public Python 2 modules must be installed in the system Python 2 + modules directory + <file>/usr/lib/python2.<var>Y</var>/dist-packages</file>, where + 2.<var>Y</var> is the Python 2 version. </p> <p> A special directory is dedicated to public Python modules @@ -337,12 +380,12 @@ Python 2. </p> <p> - For a local installation by the administrator of Python 2, a - special directory is reserved to Python modules which should only - be available to this Python, - <file>/usr/local/lib/python2.<var>Y</var>/site-packages</file> (and - <file>/usr/local/lib/python3/site-packages</file> for all Python 3 - versions). + For local installation of Python modules by the system + administrator, special directories are reserved. The + directory <file>/usr/local/lib/python3/site-packages</file> is in + the Python 3 runtime module search path. The + directory <file>/usr/local/lib/python2.<var>Y</var>/site-packages</file> + is in the Python 2.<var>Y</var> runtime module search path. </p> <p> Additional information on appending site-specific paths to the @@ -350,23 +393,23 @@ the <tt>site</tt> module. </p> <p> - When binary packages ship identical source code for multiple - Python versions, for instance + Python modules which work with multiple supported Python 2 + versions must install to version-specific locations, for instance <file>/usr/lib/python2.6/dist-packages/foo.py</file> and - <file>/usr/lib/python2.7/dist-packages/foo.py</file>, these should - point to a common file. Version-specific directories for identical - source code are not required for Python 3 and must not be used for - this. - </p> - <p> + <file>/usr/lib/python2.7/dist-packages/foo.py</file>. These should + point to a common file. + </p> + <p> + Architecture-independent public Python 3 modules must be installed + to <file>/usr/lib/python3/dist-packages</file>. + </p> + <p> + Architecture-independent public Python 2 modules should be + installed to <file>/usr/lib/python2.7/dist-packages</file>. The + historical location for this was <file>/usr/share/pyshared</file>. Since Python 2.7 is the last Python 2 version and the only - supported version in Wheezy and later releases, a common location - to share arch-independent files across Python versions is no - longer needed. Historically the location for this - was <file>/usr/share/pyshared</file>. For Python 2.7, use - of <file>/usr/lib/python2.7/dist-packages</file> is sufficient. - For Python 3, a special location is not required, use - <file>/usr/lib/python3/dist-packages</file>. + supported version in Wheezy and later releases, a version-specific + location is sufficient. </p> </sect> @@ -391,6 +434,7 @@ <p><enumlist> <item> <p> + <file>/usr/share/python3/runtime.d/*.rtinstall</file>, <file>/usr/share/python/runtime.d/*.rtinstall</file>: These are called when a runtime is installed or becomes supported. The first argument is <tt>rtinstall</tt>, the second argument @@ -403,24 +447,26 @@ </item> <item> <p> + <file>/usr/share/python3/runtime.d/*.rtremove</file>, <file>/usr/share/python/runtime.d/*.rtremove</file>: These are called when a runtime is removed or stops being supported. The first argument is <tt>rtremove</tt>, and the second argument - is the affected runtime (for example - <file>python<var>X</var>.<var>Y</var></file>). + is the affected runtime (for + example <file>python<var>X</var>.<var>Y</var></file>). </p> </item> <item> <p> + <file>/usr/share/python3/runtime.d/*.rtupdate</file>, <file>/usr/share/python/runtime.d/*.rtupdate</file>: These are called when the default runtime changes. The first argument is either <tt>pre-rtupdate</tt>, called before changing the default runtime, or <tt>rtupdate</tt>, called when changing the default runtime, or <tt>post-rtupdate</tt>, called immediately afterwards. The second argument is the old default - runtime (for example - <file>python<var>X</var>.<var>Y</var></file>), and the third - argument is the new default runtime (for example + runtime (for + example <file>python<var>X</var>.<var>Y</var></file>), and the + third argument is the new default runtime (for example <file>python<var>X</var>.<var>Z</var></file>). </p> </item> @@ -431,9 +477,13 @@ <heading>Documentation</heading> <p> Python documentation is split out in separate binary packages - <package>python<var>X</var>.<var>Y</var>-doc</package>. The binary - package <package>python-doc</package> will always provide the - documentation for the default Debian Python version. + <package>python<var>X</var>.<var>Y</var>-doc</package>. + </p> + <p> + The binary package <package>python3-doc</package> will always + provide the documentation for the default Debian Python 3 version. + The binary package <package>python-doc</package> will always + provide the documentation for the default Debian Python 2 version. </p> <p> TODO: Policy for documentation of third party packages. @@ -464,8 +514,8 @@ be used by one version of Python. </p> <p> - Some distributions link extensions to libpython, but this is not - the case in Debian as symbols might as well be resolved by + Debian Python does not link extensions to <file>libpython</file> + (as is done in some operating systems). Symbols are resolved by <file>/usr/bin/python<var>X</var>.<var>Y</var></file> which is not linked to <file>libpython</file>. </p> @@ -515,81 +565,91 @@ debug. </p> <p> - A very limited set of wheel packages are available in the archive, - but these support the narrow purpose of enabling - the <prgn>pip</prgn>, <prgn>virtualenv</prgn>, - and <prgn>pyvenv</prgn> tools in a Debian policy compliant way. - These packages build their own dependent wheels through the use of - the <prgn>dirtbike</prgn> "rewheeling" tool, which takes installed - Debian packages and turns them back into wheels. Only universal - wheels (i.e. pure-Python, Python 2 and 3 compatible packages) are - supported. Since only the programs that require wheels need build - them, only they may provide <var>-whl</var> packages, - e.g. <package>python-pip-whl</package>. - </p> + A very limited set of wheel packages are available in the archive, + but these support the narrow purpose of enabling + the <prgn>pip</prgn>, <prgn>virtualenv</prgn>, + and <prgn>pyvenv</prgn> tools in a Debian policy compliant way. + These packages build their own dependent wheels through the use of + the <prgn>dirtbike</prgn> "rewheeling" tool, which takes installed + Debian packages and turns them back into wheels. Only universal + wheels (i.e. pure-Python, Python 3 and 2 compatible packages) are + supported. Since only the programs that require wheels need build + them, only they may provide <file>-whl</file> packages, + e.g. <package>python3-pip-whl</package>. + </p> <p> - When these binary packages are installed, .whl files must be placed - in the /usr/share/python-wheels directory. The location inside a - virtual environment will be rooted in the virtual environment, - instead of in /usr. - </p> + When these binary packages are installed, <file>*.whl</file> files + must be placed in the <file>/usr/share/python-wheels</file> + directory. The location inside a virtual environment will be + rooted in the virtual environment, instead of <file>/usr</file>. + </p> </sect> <sect id="package_names"> <heading>Module Package Names</heading> <p> - Public modules used by other packages must have their binary - package name prefixed with <package>python-</package>. It is - recommended to use this prefix for all packages with public + Public Python modules must be packages separately by major Python + version, to preserve run time separation between Python 2 and + Python 3. + </p> + <p> + Public Python 3 modules used by other packages must have their + binary package name prefixed with <package>python3-</package>. + Public Python 2 modules used by other packages must have their + binary package name prefixed with <package>python-</package>. + It is recommended to use this prefix for all packages with public modules as they may be used by other packages in the future. - Python 3 modules must be in a separate binary package prefixed - with <package>python3-</package> to preserve run time separation - between Python and Python 3. </p> <p> - The binary package for module foo should preferably be named - <package>python-<var>foo</var></package>, if the module name - allows, but this is not required if the binary package ships - multiple modules. In the latter case the maintainer chooses the - name of the module which represents the package the most. + The binary package for module <var>foo</var> should preferably be + named <package>python3-<var>foo</var></package> (for Python 3) + or <package>python-<var>foo</var></package> (for Python 2), if the + module name allows. This is not required if the binary package + installs multiple modules, in which case the maintainer shall + choose the name of the module which best represents the package. </p> <p> For subpackages such as <var>foo.bar</var>, the recommendation is to name the binary - packages <package>python-<var>foo.bar</var></package> - and <package>python3-<var>foo.bar</var></package>. + package <package>python3-<var>foo.bar</var></package> (for Python + 3) or <package>python-<var>foo.bar</var></package> (for Python 2). </p> <p> Such a package should support the current Debian Python version, and more if possible (there are several tools to help implement - this, see <ref id="packaging_tools">). For example, if Python 2.5, - 2.6, and 2.7 are supported, the Python statement + this, see <ref id="packaging_tools">). For example, if Python 3.3, + 3.4, and 3.5 are supported, the Python statement <example> import foo </example> - should import the module when the user is running any - of <prgn>/usr/bin/python2.5</prgn>, <prgn>/usr/bin/python2.6</prgn>, - and <prgn>/usr/bin/python2.7</prgn>. This requirement also - applies to extension modules; binaries for all the supported - Python versions should be included in a single package. + should import the module when the program interpreter is any + of <prgn>/usr/bin/python3.3</prgn>, <prgn>/usr/bin/python3.4</prgn>, + and <prgn>/usr/bin/python3.5</prgn>. This requirement also applies + to extension modules; binaries for all the supported Python + versions should be included in a single package. </p> </sect> <sect id="specifying_versions"> <heading>Specifying Supported Versions</heading> <p> - The optional <tt>X-Python-Version</tt> (preferred) or <tt> - XS-Python-Version</tt> field in the general paragraph (the first one, - for the source package) of <file>debian/control</file> were methods to - specify the versions of Python (not versions of Python 3) supported by the - source package (they are obsolete and can be removed now that there is only - <package>python2.7</package>). Similarly, <tt>X-Python3-Version</tt> is - used to specify the versions of Python 3 supported by the package. When not - specified, they default to all currently supported Python (or Python 3) - versions. - </p> - <p> - They are used by some packaging scripts to automatically generate - appropriate Depends and Provides lines. The format of the field - may be one of the following: + The <file>debian/control</file> source paragraph may contain + optional fields to specify the versions of Python the package + supports. + </p> + <p> + The optional <tt>X-Python3-Version</tt> field specifies the + versions of Python 3 supported. When not specified, it defaults to + all currently supported Python 3 versions. + </p> + <p> + Similarly, the optional fields <tt>X-Python-Version</tt> + or <tt>XS-Python-Version</tt> were used to specify the versions of + Python 2 supported by the source package. They are obsolete and + can be removed now that only Python 2.7 is supported. + </p> + <p> + These fields are used by some packaging scripts to automatically + generate appropriate Depends and Provides lines. The format of the + field may be one of the following: <example> X-Python3-Version: >= X.Y X-Python3-Version: >= A.B, << X.Y @@ -599,21 +659,24 @@ </p> <p> The keyword <tt>all</tt> means that the package supports any - Python version available but might be deprecated in the future + Python 2 version available but might be deprecated in the future since using version numbers is clearer than <tt>all</tt> and encodes more information. The keyword <tt>all</tt> is limited to - Python versions and must be ignored for Python 3 versions. Lists - of multiple individual versions (e.g. 2.4, 2.5, 2.6) work - for <tt>XS-Python-Version</tt> and will continue to be supported, - but are not recommended and are not supported - by <tt>X-Python-Version</tt> or <tt>X-Python3-Version</tt> for - Wheezy and later releases. + Python 2 versions and must be ignored for Python 3 versions. + </p> + <p> + A comma-separated list of multiple individual versions + (e.g. <tt>3.3, 3.4, 3.5</tt>) in <tt>XS-Python-Version</tt> will + continue to be supported, but is not recommended. The use of + multiple individual versions in <tt>X-Python-Version</tt> + or <tt>X-Python3-Version</tt> is not supported for Wheezy and + later releases. </p> <p> The keyword <tt>current</tt> has been deprecated and used to mean - that the package would only have to support a single version (even - across default version changes). It must be ignored for Python 3 - versions. + that the package would only have to support a single Python 2 + version (even across default version changes). It must be ignored + for Python 3 versions. </p> <p> The use of <tt>XB-Python-Version</tt> in the binary package @@ -628,31 +691,41 @@ <sect id="dependencies"> <heading>Dependencies</heading> <p> - Packaged modules available for the default Python version (or many - versions including the default) as described - in <ref id="package_names"> must declare <tt>Depends: - python (>= <var>X</var>.<var>Y</var>)</tt>. If they - require other modules to work, they must depend on the - corresponding <package>python-foo</package>. They must not depend - on any <package>python<var>X</var>.<var>Y</var>-foo</package>. - </p> - <p> - All Python module packages and Python 3 binary extension packages must - also declare a maximum version they support as currently built (this - is accomplished by declaring a maximum version constraint strictly - less than one higher than the current maxiumum version, i.e. - <tt>Depends: - python (<< <var>X</var>.<var>Y</var>)</tt>. + Any package that installs modules for the default Python version + (or many versions including the default) as described + in <ref id="package_names">, must declare a dependency on the + default Python runtime package. If it requires other modules to + work, the package must declare dependencies on the corresponding + packaged modules. The package must not declare dependency on any + version-specific Python runtime or module package. + </p> + <p> + For Python 3, the correct dependencies are <tt>Depends: + python3 (>= 3.<var>Y</var>)</tt> and any + corresponding <package>python3-<var>foo</var></package> packages. + </p> + <p> + For Python 2, the correct dependencies are <tt>Depends: + python (>= 2.<var>Y</var>)</tt> and any + corresponding <package>python-<var>foo</var></package> packages. + </p> + <p> + Any package that installs Python modules or Python 3 binary + extensions must also declare a maximum version it supports as + currently built. This is accomplished by declaring a maximum + version constraint strictly less than one higher than the current + maximum version, i.e. <tt>Depends: + python3 (<< <var>X</var>.<var>Y</var>)</tt>. </p> </sect> <sect id="provides"> <heading>Provides</heading> <p> - Python Provides in binary packages of the form + Binary packages that declare Provides dependencies of the form <package>python<var>X</var>.<var>Y</var>-<var>foo</var></package> were never supported for Python 3 and are no longer useful for - Python. They should be removed in the normal course of package + Python 2. They should be removed in the normal course of package updates. Future provision of values for the substituation variable <tt>python:Provides</tt> is not guaranteed. </p> @@ -699,28 +772,50 @@ <chapt id="programs"> <heading>Python Programs</heading> + <sect id="interpreter-directive"> + <heading>Interpreter directive (“Shebang”)</heading> + <p> + Executables written for interpretation by Python must use an + appropraite interpreter directive, or “shebang”, as the first line + of the program. This line should be of the + form <tt>#!<var>interpreter_location</var></tt>. + See <ref id="interpreter_name"> for the interpreter name to use. + </p> + <p> + As noted in <ref id="interpreter_loc">, the + form <tt>#!/usr/bin/env <var>interpreter_name</var></tt> is + deprecated. + </p> + </sect> + <sect id="version_indep_progs"> <heading>Programs using the default Python</heading> <p> - Programs that can run with any version of Python must - begin with <tt>#!/usr/bin/python</tt> or <tt>#!/usr/bin/env - python</tt> (the former is strongly preferred). They must also - specify a dependency on <package>python</package>, with a - versioned dependency if necessary. - </p> - <p> - If the program needs the Python module <tt>foo</tt>, it must - depend on the real package providing this module, usually - <package>python-foo</package> but this name might vary when the - package ships multiple modules. + A package that installs a program that can be run by any version + of Python 3 must declare a dependency + on <package>python3</package>, with a versioned dependency if + necessary. + </p> + <p> + A package that installs a program that can be run by any version + of Python 2 must declare a dependency + on <package>python2</package>, with a versioned dependency if + necessary. + </p> + <p> + If the program needs the public Python module <tt>foo</tt>, the + package must depend on the binary package that installs + the <tt>foo</tt> module. See <ref id="package_names"> for the + naming of packages that install public Python modules. </p> <sect1 id="current_version_progs"> <heading>Programs Shipping Private Modules</heading> <p> - A program using <file>/usr/bin/python</file> as interpreter can - come up with private Python modules. These modules should be - installed in <file>/usr/share/<var>module</var></file>, or + A program that specifies <prgn>python3</prgn> + or <prgn>python</prgn> as its interpreter may require its own + private Python modules. These modules should be installed + in <file>/usr/share/<var>module</var></file>, or <file>/usr/lib/<var>module</var></file> if the modules are architecture-dependent (e.g. extensions). </p> @@ -736,8 +831,8 @@ Programs that have private compiled extensions must either handle multiple version support themselves, or declare a tight dependency on the current Python version (e.g. <tt>Depends: - python (>= 2.7), - python (<< 2.8)</tt>. + python3 (>= 3.5), + python3 (<< 3.6)</tt>. </p> </sect1> </sect> @@ -745,13 +840,13 @@ <sect id="version_dep_progs"> <heading>Programs Using a Particular Python Version</heading> <p> - A program which requires a specific version of Python must - begin with - <tt>#!/usr/bin/python<var>X</var>.<var>Y</var></tt> (or - <tt>#!/usr/bin/env python<var>X</var>.<var>Y</var></tt>). It - must also specify a dependency on + A program which requires a specific minor version of Python must + specify the versioned + interpreter <prgn>python<var>X</var>.<var>Y</var></tt>. The + package that installs the programs must also specify a dependency + on <package>python<var>X</var>.<var>Y</var></package> and on any - package providing necessary modules. + packages that install necessary modules. </p> <p> The notes on installation directories and byte-compilation @@ -769,8 +864,8 @@ <sect id="build_embedded"> <heading>Building Embedded Programs</heading> <p> - Programs which embed a Python interpreter must declare - <tt>Build-Depends</tt> on + Any package that installs a program which embeds a Python + interpreter must declare <tt>Build-Depends</tt> on <package>python<var>X</var>.<var>Y</var>-dev</package>, where <var>X</var>.<var>Y</var> is the Python version the program builds against. It should be the current default Python version @@ -809,20 +904,25 @@ <appendix id="build_dependencies"> <heading>Build Dependencies</heading> <p> - Build dependencies for Python dependent packages must be declared + Build dependencies for Python-dependent packages must be declared for every Python version that the package is built for. + </p> + <p> + The <package>python3-all-dev</package> should be used when building + extensions for any or all Python 3 versions. The <package>python-all-dev</package> should be used when building - extensions for any or all Python versions. To build for a specific + extensions for any or all Python 2 versions. To build for a specific version or versions, declare <tt>Build-Depends</tt> on <package>python<var>X</var>.<var>Y</var>-dev</package>. </p> <p> - Some applications and pure Python modules may be able to declare - <tt>Build-Depends</tt> on the runtime <package>python</package> - or <package>python-all</package> package, and not require - the <package>-dev</package> packages. A package that does not - require the <package>-dev</package> packages must not declare - <tt>Build-Depends</tt> on them. + Some applications and pure Python modules may be able to avoid + dependency on the <package>-dev</package> packages, and declare + <tt>Build-Depends</tt> on the runtime environment only + (<package>python3</package>, <package>python3-all</package>, + <package>python</package>, <package>python-all</package>). A package + that does not require the <package>-dev</package> packages must not + declare <tt>Build-Depends</tt> on them. </p> <p> @@ -886,24 +986,26 @@ <sect id="dh-python"> <heading><package>dh-python</package></heading> <p> - <package>dh-python</package> provides extensions - for <package>debhelper</package> to make it easier to package - Python modules and extensions. They calculate Python dependencies, - add maintainer scripts to byte compile files, etc. Their use is not - mandatory, but they are recommended by the Python maintainers. + <package>dh-python</package> provides extensions + for <package>debhelper</package> to make it easier to package + Python modules and extensions. They calculate Python dependencies, + add maintainer scripts to byte compile files, etc. Their use is + not mandatory, but they are recommended by the Debian Python + maintainers. </p> <p> - See <tt>man dh_python2</tt> or <tt>man dh_python3</tt> for details. + See <tt>man dh_python3</tt> or <tt>man dh_python2</tt> for + details. </p> </sect> <sect id="pybuild"> <heading>pybuild</heading> <p> - Pybuild is a Debian Python specific build system that invokes various - build systems for requested Python versions in order to build modules - and extensions. It supports automatically building for multiple Python - and Python 3 versions. + Pybuild is a Debian Python specific build system that invokes + various build systems for requested Python versions in order to + build modules and extensions. It supports automatically building + for multiple Python versions. </p> </sect> # Begin bundle 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 +LuSKcKEhLynLiA=
-- \ “The Vatican is not a state.… a state must have people. There | `\ are no Vaticanians.… No-one gets born in the Vatican except by | _o__) an unfortunate accident.” —Geoffrey Robertson, 2010-09-18 | Ben Finney