如何判断Python包安装是否包含预编译的二进制文件?

问题描述 投票:0回答:1

有没有可靠的方法来确定使用 pip/conda 安装 Python 包时安装程序是否包含预编译的二进制文件?我想排除或至少知道这种情况何时发生。有时,这可以通过查看源代码分发中的设置/项目或通过 whl 文件的名称来确定,但并非总是如此。大多数情况下,重要的是要有可靠的是/否/不确定信号来帮助确定进一步调查的优先顺序。

python pip conda
1个回答
0
投票

我无法找到一种方法来从 pip 的元数据中找出包是从源代码构建的还是作为轮子下载的,但我确实找到了一种扫描包目录中的二进制文件的方法。

首先,运行

python -m site
。这显示了 Python 可以从中加载包的目录列表。

选择其中一项进行扫描。

运行以下命令之一:

Linux:

(cd $PACKAGE_DIR && find . -type f -executable -exec file {} \; | awk -F'[/:]' '/ELF/ && !a[$2]++ {print $2}' )

将 $PACKAGE_DIR 替换为之前的目录之一。

OSX:

(cd $PACKAGE_DIR && find . -type f -perm +111 -exec file {} \; | awk -F'[/:]' '/Mach-O/ && !a[$2]++ {print $2}' )

将 $PACKAGE_DIR 替换为之前的目录之一。

这将为您提供包含共享对象的包列表。这些可能是从源代码构建的 - 如果没有可用的轮子,pip 会这样做。但 pip 会优先使用轮子,除非使用

--no-binary

还值得注意的是,pip 可以将二进制文件安装到

~/.local/bin
中。如果它在你的 $PATH 上,那么它们就可以运行。

© www.soinside.com 2019 - 2024. All rights reserved.