Detecta com segurança arquivos de desenvolvimento do Python 3

1

Eu tenho um script de shell que instala todos os pacotes necessários para um projeto. Alguns desses pacotes são baseados no Python 3 e precisam ser compilados e, para isso, os fontes do Python precisam ser instalados 1 (por exemplo, o pacote python3-dev em distribuições comuns baseadas no Debian). Caso contrário, mensagens de erro de compilação ininteligíveis / enganosas serão exibidas (faltando arquivos de cabeçalho), o que é algo que eu quero evitar.

Agora, achei que seria melhor tentar detectar se as fontes do Python 3 já estão instaladas e, caso não estejam nem mesmo tentando executar pip , em vez disso, instrua o usuário a obter as fontes do Python para ele / sua distribuição e talvez também algumas instruções para os mais comuns.

Resumindo: Como posso detectar com segurança se os arquivos de cabeçalho do Python 3 estão instalados em várias distribuições (e talvez até mesmo em ambientes não Linux que vão tão longe quanto o Cygwin)?

1. O pacote é mypy e partes das mensagens de erro incluem:

ast27/Parser/acceler.c:13:25: fatal error: pgenheaders.h: No such file or directory
compilation terminated.

[…]

 Command "/path/to/my/venv/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-x0e2zn8t/typed-ast/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-uythmwn1-record/install-record.txt --single-version-externally-managed --compile --install-headers /path/to/my/venv/include/site/python3.5/typed-ast" failed with error code 1 in /tmp/pip-build-x0e2zn8t/typed-ast/

    
por phk 27.01.2017 / 14:01

1 resposta

2

Eu encontrei uma solução, basicamente eu só preciso verificar a existência de python3-config no PATH ( command -v python3-config >/dev/null ), isso significa que aqui estão os arquivos de desenvolvimento do Python 3.

Se eu quisesse ir ainda mais longe, eu teoricamente também poderia usar essa ferramenta para obter os diretórios de inclusão, o que eu poderia verificar em alguns dos arquivos de cabeçalho específicos necessários, mas não vejo necessidade disso.

BTW, aplica-se ao Python 2 e ao Python 2.7+ de forma semelhante ( python2-config e python2.7-config , respectivamente).

    
por 28.01.2017 / 02:37