介绍
安装 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
Make
是gcc
,最流行的开源编译器,使用的命令来解析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
Make
是gcc
,最流行的开源编译器,使用的命令来解析Makefile
,这就是在每个包中提供编译指示的方式。
Windows 编译环境
Windows 编译器问题可能更棘手,因为安装 Python 有许多不同的方法,每种方法都需要不同的编译器:
- 联合国 如果您使用 Python 与 [WSL2] (https://andsky.com/tech/tutorials/how-to-install-the-windows-subsystem-for-linux-2-on-microsoft-windows-10 ) , 它就像在 Linux 下运行 Python , 这样您就可以按照 distro (Ubuntu 默认) 的 排除故障指令 。
- 联合国 如果使用有 [Anaconda] (https://andsky.com/tech/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-22-04] 的 Python,它将在"conda" 环境中提供自己的编译器包,通常首先避免任何这些错误.
- 联合国 如果在Windows本土上使用Python,还有其他几个考虑. 默认情况下,Windows上的Python试图使用微软视觉工作室构建工具. 这是一个非常大的安装并添加了许多Windows生态系统软件包,如果大多在云中工作,这些软件包可能并不熟悉,但在安装后应该自动工作,比如在Linux上安装"make".
- 联合国 如果您已经使用 [MinGW] (https://www.mingw-w64.org/) 或 [Chocolatey] (https://chocolatey.org/) 在 Windows 环境中安装了开源
gcc
和make
构建工具, 您可以告诉 Python 在 Windows 上使用此编译器, 在 创建 ` Lib/ distutils/ distitils.cfg' 相对于您的 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中编码系列。