可靠地检测 Python 3 开发文件

可靠地检测 Python 3 开发文件

我有一个 shell 脚本,它安装项目所需的所有包。其中一些软件包是基于 Python 3 的,需要进行编译,为此需要安装 Python 源1(例如,python3-dev基于 Debian 的常见发行版中的软件包)。否则,将显示难以理解/误导性的编译错误消息(缺少头文件),这是我想防止的。

现在我认为最好尝试检测Python 3源是否已经安装,以防它们甚至不尝试运行pip,而是指示用户获取他/她的发行版的Python源,也许还有一些最常见的说明。

简而言之:如何可靠地检测 Python 3 头文件是否安装在各种发行版上(甚至可能在非 Linux 环境中,例如 Cygwin)?


1. 包mypy及部分错误信息包括:

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/

答案1

我找到了解决方案,基本上我只需要检查( )python3-config中是否存在,这表明这里是Python 3开发文件。PATHcommand -v python3-config >/dev/null

如果我想更进一步,理论上我也可以使用这个工具来获取包含目录,我可以在其中检查所需的一些特定头文件,但我认为没有必要这样做。

顺便说一句,同样适用于 Python 2 和 Python 2.7+(分别为python2-configpython2.7-config)。

相关内容