The Ports Collection supports parallel installation of
multiple Python versions. Ports must use a
correct python
interpreter, according to
the user-settable PYTHON_VERSION
.
Most prominently, this means replacing the path to
python
executable in scripts with the value
of PYTHON_CMD
.
Ports that install files under
PYTHON_SITELIBDIR
must use the
pyXY-
package name prefix, so their package
name embeds the version of Python they are installed
into.
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
USES=python | The port needs Python. The minimal required
version can be specified with values such as
2.7+ . Version ranges can also be
specified by separating two version numbers with a dash:
USES=python:3.2-3.3 |
USE_PYTHON=distutils | Use Python distutils for configuring, compiling,
and installing. This is required when the port comes
with setup.py . This overrides
the do-build and
do-install targets and may
also override do-configure
if GNU_CONFIGURE is not
defined. Additionally, it implies
USE_PYTHON=flavors . |
USE_PYTHON=autoplist | Create the packaging list automatically. This also
requires USE_PYTHON=distutils to be
set. |
USE_PYTHON=concurrent | The port will use an unique prefix, typically
PYTHON_PKGNAMEPREFIX for certain
directories, such as EXAMPLESDIR and
DOCSDIR and also will append a
suffix, the python version from
PYTHON_VER , to binaries and scripts
to be installed. This allows ports to be installed for
different Python versions at the same time, which
otherwise would install conflicting files. |
USE_PYTHON=flavors | The port does not use distutils but still supports
multiple Python versions. FLAVORS
will be set to the supported Python versions. See Section 7.4, “USES=python and Flavors” for more
information. |
USE_PYTHON=optsuffix | If the current Python version is not the default
version, the port will gain
PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX} .
Only useful with flavors. |
PYTHON_PKGNAMEPREFIX | Used as a PKGNAMEPREFIX to
distinguish packages for different Python versions.
Example: py27- |
PYTHON_SITELIBDIR | Location of the site-packages tree, that contains
installation path of Python (usually
LOCALBASE ).
PYTHON_SITELIBDIR can be
very useful when installing Python modules. |
PYTHONPREFIX_SITELIBDIR | The PREFIX-clean variant of PYTHON_SITELIBDIR.
Always use %%PYTHON_SITELIBDIR%% in
pkg-plist when possible. The
default value of
%%PYTHON_SITELIBDIR%% is
lib/python%%PYTHON_VERSION%%/site-packages |
PYTHON_CMD | Python interpreter command line, including version number. |
PYNUMERIC | Dependency line for numeric extension. |
PYNUMPY | Dependency line for the new numeric extension, numpy. (PYNUMERIC is deprecated by upstream vendor). |
PYXML | Dependency line for XML extension (not needed for Python 2.0 and higher as it is also in base distribution). |
PY_ENUM34 | Conditional dependency on devel/py-enum34 depending on the Python version. |
PY_ENUM_COMPAT | Conditional dependency on devel/py-enum-compat depending on the Python version. |
PY_PATHLIB | Conditional dependency on devel/py-pathlib depending on the Python version. |
PY_IPADDRESS | Conditional dependency on net/py-ipaddress depending on the Python version. |
PY_FUTURES | Conditional dependency on devel/py-futures depending on the Python version. |
A complete list of available variables can be found in
/usr/ports/Mk/Uses/python.mk
.
All dependencies to Python
ports using Python
flavors (either with
USE_PYTHON=distutils
or
USE_PYTHON=flavors
) must have the Python
flavor appended to their origin using
@${PY_FLAVOR}
. See Example 6.25, “Makefile for a Simple Python
Module”.
PORTNAME= sample DISTVERSION= 1.2.3 CATEGORIES= devel MAINTAINER= john@doe.tld COMMENT= Python sample module RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} USES= python USE_PYTHON= autoplist distutils .include <bsd.port.mk>
Some Python applications claim to have
DESTDIR
support (which would be required
for staging) but it is broken (Mailman up to 2.1.16, for
instance). This can be worked around by recompiling the
scripts. This can be done, for example, in the
post-build
target. Assuming the
Python scripts are supposed to reside in
PYTHONPREFIX_SITELIBDIR
after installation,
this solution can be applied:
(cd ${STAGEDIR}${PREFIX} \ && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \ -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})
This recompiles the sources with a path relative to the
stage directory, and prepends the value of
PREFIX
to the file name recorded in the
byte-compiled output file by -d
.
-f
is required to force recompilation, and
the :S;${PREFIX}/;;
strips prefixes from
the value of PYTHONPREFIX_SITELIBDIR
to make it relative to
PREFIX
.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.