如何修复安装软件包时 Python 编译器出现的 "无此文件或目录 "错误

介绍

安装 Python 模块时常见的错误是没有此类文件或目录 错误。 这可能是误导, 因为您通常不会错过您想要安装的软件包中的文件或目录 。 相反,这个出错是由于Python在模块安装过程中试图调用您的系统编译器. 这是因为您的系统编译器的路径往往被硬编码为Python本身,它没有找到它所需要的编译器文件. 此教程将提供一个这个错误的例子, 以及在多个平台上修正它的步骤 .

缺少编译器错误

Python 包通常使用「pip」包管理器与「pip install」命令进行安装。「pip」将打印您所选择的包附加要求的依赖性列表,以及从安装过程中输出的长列表。

 1[secondary_label Output]
 2      x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.10 -I/usr/local/lib/python3.10/dist-packages/numpy/core/include -I/usr/include/python3.10 -c radiomics/src/_cmatrices.c -o build/temp.linux-x86_64-3.10/radiomics/src/_cmatrices.o
 3      error: command 'x86_64-linux-gnu-gcc' failed: No such file or directory
 4      [end of output]
 5
 6  note: This error originates from a subprocess, and is likely not a problem with pip.
 7error: legacy-install-failure
 8
 9× Encountered error while trying to install package.
10╰─> pyradiomics
11
12note: This is an issue with the package mentioned above, not pip.
13hint: See above for output from the failure.

这种特殊的错误是试图安装 pd-dwi,用于化疗研究的Python库,使用pip install pd-dwi的结果。

一些Python库,特别是那些用于科学计算的工具,在被安装后需要在您的机器上本地编译额外的代码. Python是一种高层次,_解释_语言,只有Python解释器本身在场才能运行. Python库中偶尔包括用于高性能处理的C或Rust等低等语言,在被可执行之前需要编译并优化. 如果您的系统中没有编译器, 安装将失败 .

在大多数现代平台上,当你安装Python的包管理器,pip时,它也会设置编译器环境和相关包,但是,有几个原因,这可能并不总是发生。

本教程的以下步骤将提供在 Ubuntu/Debian Linux、Red Hat/Rocky Linux、Windows 和 macOS 上安装和验证 Python 兼容的编译器的说明。

Ubuntu 和 Debian 的编译器包

在Ubuntu上,你可以安装一个名为build-essential的包,它将为现代、支持良好的编译环境提供所需的所有包。

您还可以安装libpython3-dev。这是一个长期存在的Ubuntu/Debian生态系统包,基本上将编译器连接到Python,并提供所有必要的后端配置来自动从Python或pip调用您的编译器。

安装apt的包:

1sudo apt install build-essential libpython3-dev

之后,您可以通过检查系统上是否存在命令来验证编译器是否可用。

1which make
1[secondary_label Output]
2/usr/bin/make

Makegcc,最流行的开源编译器,使用的命令来解析Makefile,这就是在每个包中提供编译指示的方式。

Red Hat 和 Rocky Linux 的编译器包

在 Red Hat 和 Rocky Linux 上,您可以使用dnf包管理器的功能来安装一组包含支持良好的编译环境的包。

使用两个dnf命令来安装包组:

1sudo dnf groups mark install "Development Tools"
2sudo dnf groupinstall "Development Tools"

接下来,您可以安装python3-devel,一个长期存在的Red Hat生态系统包,基本上将编译器连接到Python。

1sudo dnf install python3-devel

之后,您可以通过检查系统上是否存在命令来验证编译器是否可用。

1which make
1[secondary_label Output]
2/usr/bin/make

Makegcc,最流行的开源编译器,使用的命令来解析Makefile,这就是在每个包中提供编译指示的方式。

Windows 编译环境

Windows 编译器问题可能更棘手,因为安装 Python 有许多不同的方法,每种方法都需要不同的编译器:

1[label Lib/distutils/distutils.cfg]
2[build]
3compiler=mingw32
4
5[build_ext]
6compiler=mingw32

如果您在 Windows 上安装编译器有问题,您可以尝试为您正在安装的库安装预编译轮包(https://www.lfd.uci.edu/~gohlke/pythonlibs/),尽管这不如从pip安装,并且它们通常只可在偶尔的基础上使用。

macOS 编译环境

macOS 将其编译器工具链集成到苹果的开发套件 XCode 中。与 Windows 上的 Visual Studio 一样,XCode 是一个完整的开发环境,具有自己的界面,但您实际上不需要使用 XCode 来编译 Python 套件。

1xcode-select --install

您将被要求开始安装,然后再次被要求接受软件许可证,然后工具将自动下载和安装。

结论

Python 生态系统非常强大,欢迎初学者和专家开发人员,但在其工具设计中遇到漏洞可能令人困惑. 在本教程中,您了解了如何修复由于缺少编译器包而可能出现的错误,以及当 Python 需要在模块安装时编译低级代码时。

接下来,你可能想查看我们的 如何在Python中编码系列。

Published At
Categories with 技术
comments powered by Disqus