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.
Tabela 6.25. Variáveis úteis para Ports que usam Python
USES=python O 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=distutils Use 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=autoplist Crie a lista de empacotamento automaticamente. Isso também requer que USE_PYTHON=distutils seja definido.
USE_PYTHON=concurrent O 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=flavors O 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=optsuffix Se 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_PKGNAMEPREFIX Usado como um PKGNAMEPREFIX para distinguir pacotes para diferentes versões do Python. Exemplo: py27-
PYTHON_SITELIBDIR Local 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_SITELIBDIR A 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_CMD Linha de comando do interpretador Python, incluindo o número da versão.
Tabela 6.26. Assistentes do Módulo de Dependências do Python
PYNUMERIC Linha de dependência para extensão numérica.
PYNUMPY Linha de dependência para a nova extensão numérica, numpy. (PYNUMERIC foi descontinuado pelo fornecedor upstream).
PYXML Linha 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_ENUM34 Dependência condicional do devel/py-enum34 dependendo da versão do Python.
PY_ENUM_COMPAT Dependência condicional do devel/py-enum-compat dependendo da versão do Python.
PY_PATHLIB Dependência condicional do devel/py-pathlib dependendo da versão do Python.
PY_IPADDRESS Dependência condicional do net/py-ipaddress dependendo da versão do Python.
PY_FUTURES Dependê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.
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.26, "Makefile para um Módulo Python Simples".
Exemplo 6.26. Makefile para um Módulo Python Simples
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:
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.