6.17. Usando Python

A Coleção de Ports suporta a instalação paralela de várias versões do Python. Os ports devem usar um interpretador python, de acordo com a configuração do usuário de PYTHON_VERSION. Mais proeminentemente, isso significa substituir o caminho para o executável python em scripts com o valor de PYTHON_CMD.

Ports que instalam arquivos sob PYTHON_SITELIBDIR devem usar o prefixo pyXY- no prefixo do nome do pacote, assim o nome do pacote irá incorporar a versão do Python em que estão instalados.

PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
Tabela 6.25. Variáveis úteis para Ports que usam Python
USES=pythonO port precisa do Python. A versão mínima necessária pode ser especificada com valores como 2.7+. Os intervalos de versão também podem ser especificados separando dois números de versão com um traço: USES=python:3.2-3.3
USE_PYTHON=distutilsUse o distutils do Python para configurar, compilar e instalar. Isso é necessário quando o port vem com setup.py. Isso sobrescreve os targets do-build e do-install e também pode substituir do-configure se o GNU_CONFIGURE não estiver definido. Além disso, isso implica em USE_PYTHON=flavors.
USE_PYTHON=autoplistCrie a lista de empacotamento automaticamente. Isso também requer que USE_PYTHON=distutils seja definido.
USE_PYTHON=concurrentO port usará um prefixo exclusivo, normalmente PYTHON_PKGNAMEPREFIX para determinados diretórios, como EXAMPLESDIR e DOCSDIR e também irá acrescentar um sufixo, a versão python de PYTHON_VER, para os binários e scripts que serão instalados. Isso permite que os ports sejam instalados para diferentes versões do Python ao mesmo tempo, o que de outra forma instalaria arquivos conflitantes.
USE_PYTHON=flavorsO port não usa distutils, mas ainda suporta várias versões do Python. .FLAVORS será definido para as versões suportadas do Python. Veja Seção 7.4, “USES=python e Flavors” para maiores informações.
USE_PYTHON=optsuffixSe a versão atual do Python não for a versão padrão, o port receberá PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}. É útil apenas com flavors.
PYTHON_PKGNAMEPREFIXUsado como um PKGNAMEPREFIX para distinguir pacotes para diferentes versões do Python. Exemplo: py27-
PYTHON_SITELIBDIRLocal da árvore site-packages, que contém o caminho de instalação do Python (geralmente LOCALBASE). A PYTHON_SITELIBDIR pode ser muito útil ao instalar módulos Python.
PYTHONPREFIX_SITELIBDIRA variante PREFIX-clean do PYTHON_SITELIBDIR. Sempre use %%PYTHON_SITELIBDIR%% no pkg-plist quando possível. O valor padrão de %%PYTHON_SITELIBDIR%% é lib/python%%PYTHON_VERSION%%/site-packages
PYTHON_CMDLinha de comando do interpretador Python, incluindo o número da versão.

Tabela 6.26. Assistentes do Módulo de Dependências do Python
PYNUMERICLinha de dependência para extensão numérica.
PYNUMPYLinha de dependência para a nova extensão numérica, numpy. (PYNUMERIC foi descontinuado pelo fornecedor upstream).
PYXMLLinha de dependência para a extensão XML (não é necessária para o Python 2.0 e superior, pois também está na distribuição base).
PY_ENUM34Dependência condicional do devel/py-enum34 dependendo da versão do Python.
PY_ENUM_COMPATDependência condicional do devel/py-enum-compat dependendo da versão do Python.
PY_PATHLIBDependência condicional do devel/py-pathlib dependendo da versão do Python.
PY_IPADDRESSDependência condicional do net/py-ipaddress dependendo da versão do Python.
PY_FUTURESDependência condicional do devel/py-futures dependendo da versão do Python.

Uma lista completa das variáveis disponíveis pode ser encontrada em /usr/ports/Mk/Uses/python.mk.

Importante:

Todas as dependências para ports Python usando Python flavors (quer com USE_PYTHON=distutils ou USE_PYTHON=flavors) deve ter o flavor Python anexado à sua origem usando @${PY_FLAVOR}. Veja Exemplo 6.24, “Makefile para um Módulo Python Simples”.

Exemplo 6.24. Makefile para um Módulo Python Simples
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>

Algumas aplicações Python afirmam ter suporte a DESTDIR (que seria necessário para fazer o staging), mas ele está quebrado (Mailman até a versão 2.1.16, por exemplo). Isso pode ser contornado, recompilando os scripts. Isso pode ser feito, por exemplo, no target post-build. Assumindo que os scripts Python devem estar em PYTHONPREFIX_SITELIBDIR após a instalação, esta solução pode ser aplicada:

(cd ${STAGEDIR}${PREFIX} \
  && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
   -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})

Isso recompila os fontes com um caminho relativo ao diretório de stage e acrescenta o valor de PREFIX para o nome do arquivo gravado no arquivo bytecode de saída por -d. O -f é necessário para forçar a recompilação e o :S;${PREFIX}/;; remove prefixos do valor de PYTHONPREFIX_SITELIBDIR para torná-lo relativo ao 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>.