Comment corriger les erreurs de compilation `Aucun fichier ou répertoire de ce type` lors de l'installation de packages Python
Introduction
Une erreur courante que vous pouvez rencontrer lors de l'installation de modules Python est l'erreur Pas de fichier ou de répertoire de ce type. Cela peut être trompeur, car vous n'êtes généralement pas en train de manquer un fichier ou un répertoire du package que vous essayez d'installer. Au lieu de cela, cette erreur résulte du fait que Python essaie d'appeler votre compilateur système lors de l'installation du module. Ceci est dû au fait que les chemins vers votre compilateur système sont souvent hardcodés dans Python lui-même, et qu'il ne trouve pas les fichiers de compilateur dont il a besoin. Ce tutoriel fournira un exemple de cette erreur et les étapes pour la corriger sur plusieurs plateformes.
Erreurs de compilateur manquantes
Les packages Python sont généralement installés à l'aide du gestionnaire de packages pip avec la commande pip install. pip affichera une liste des dépendances supplémentaires requises par le package que vous avez sélectionné, ainsi qu'une longue liste de sortie du processus d'installation. Parfois, l'installateur se termine par une erreur, contenant un texte comme celui-ci près de la fin de la sortie :
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
error: command 'x86_64-linux-gnu-gcc' failed: No such file or directory
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure
× Encountered error while trying to install package.
╰─> pyradiomics
note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.
Cette erreur particulière était le résultat de la tentative d'installation de pd-dwi, une bibliothèque Python utilisée dans la recherche sur la chimiothérapie, en utilisant pip install pd-dwi.
Certaines bibliothèques Python, en particulier celles utilisées pour le calcul scientifique, doivent compiler du code supplémentaire localement sur votre machine après avoir été installées. Python est un langage de haut niveau, interprété qui peut fonctionner uniquement avec l'interpréteur Python lui-même présent. Les langages de bas niveau comme C ou Rust, que les bibliothèques Python incluent parfois pour un traitement à haute performance, doivent être compilés et optimisés avant d'être exécutables. Si aucun compilateur n'est présent sur votre système, l'installation échouera.
Sur la plupart des plateformes modernes, lorsque vous installez le gestionnaire de paquets Python, pip, il configure également un environnement de compilation et les paquets associés. Cependant, il y a quelques raisons pour lesquelles cela peut ne pas toujours se produire. Par exemple, il est possible que le compilateur ait été désinstallé par accident, ou qu'il n'ait jamais été installé en premier lieu. Et contrairement à Linux, les paquets Python ne sont généralement pas installés par le gestionnaire de paquets du système sur Mac ou Windows, ce qui crée plus d'opportunités de problèmes.
Les étapes suivantes de ce tutoriel fourniront des instructions pour installer et vérifier un compilateur compatible avec Python sur Ubuntu/Debian Linux, sur Red Hat/Rocky Linux, sur Windows et sur macOS.
Paquets de compileurs pour Ubuntu et Debian
Sur Ubuntu, vous pouvez installer un paquet appelé build-essential qui fournira tous les paquets nécessaires pour un environnement de compilation moderne et bien supporté. Le build-essential est ce qu'on appelle un méta-paquet. Il ne fait référence à aucun paquet en particulier, mais regroupe plutôt un certain nombre d'outils de compilation communs comme dépendances.
Vous pouvez également installer libpython3-dev. Il s'agit d'un paquet de l'écosystème Ubuntu/Debian de longue date qui « connecte » essentiellement le compilateur à Python, et fournit toute la configuration backend nécessaire pour appeler automatiquement votre compilateur depuis Python ou depuis pip. En général, il est installé automatiquement avec pip, mais si vous installez pip sans utiliser le gestionnaire de paquets, vous pouvez le manquer.
Installez les paquets avec apt:
- sudo apt install build-essential libpython3-dev
Cela installera également un certain nombre de dépendances. Ensuite, vous pouvez vérifier qu'un compilateur est disponible en vérifiant l'existence de la commande make sur votre système. Pour ce faire, utilisez la commande which :
- which make
/usr/bin/make
make est la commande que gcc, le compilateur open-source le plus populaire, utilise pour parser un Makefile, qui est la façon dont les instructions de compilation sont fournies dans chaque package. Si vous avez maintenant une version de make installée dans votre chemin, essayez d'installer à nouveau votre module Python en utilisant pip.
Packages de compilation pour Red Hat et Rocky Linux
Sur Red Hat et Rocky Linux, vous pouvez utiliser la fonctionnalité groups du gestionnaire de paquets dnf pour installer un groupe de paquets comprenant un environnement de compilation bien pris en charge. Le groupe de paquets que vous allez installer s'appelle "Development Tools".
Utilisez deux commandes dnf pour installer le groupe de paquets :
- sudo dnf groups mark install "Development Tools"
- sudo dnf groupinstall "Development Tools"
Cela installera également un certain nombre de dépendances. Ensuite, vous pouvez installer python3-devel, un package traditionnel de l'écosystème Red Hat qui “connecte” essentiellement le compilateur à Python. python3-devel fournit toute la configuration de backend nécessaire pour appeler automatiquement votre compilateur depuis Python ou depuis pip:
- sudo dnf install python3-devel
Ensuite, vous pouvez vérifier qu'un compilateur est disponible en vérifiant l'existence de la commande make sur votre système. Pour ce faire, utilisez la commande which :
- which make
/usr/bin/make
`make` est la commande que `gcc`, le compilateur open source le plus populaire, utilise pour analyser un `Makefile`, qui est la manière dont les instructions de compilation sont fournies dans chaque package. Si vous avez maintenant une version de `make` installée dans votre chemin, essayez de réinstaller votre module Python en utilisant `pip`.
Environnements de compilation Windows
Les problèmes de compilation sous Windows peuvent être plus compliqués, car il existe de nombreuses manières différentes d'installer Python, et chacune d'elles attend différents compilateurs :
Si vous utilisez Python avec WSL2, c'est comme exécuter Python sous Linux, donc vous pouvez suivre les instructions de dépannage pour votre distribution (Ubuntu par défaut).
Si vous utilisez Python avec Anaconda, il fournira ses propres packages de compilation dans l'environnement
conda, évitant généralement toutes ces erreurs dès le départ.Si vous utilisez Python sur Windows nativement, il y a quelques autres considérations. Par défaut, Python sur Windows essaie d'utiliser les outils de construction de Microsoft Visual Studio. C'est une installation très lourde et elle ajoute de nombreux packages de l'écosystème Windows qui peuvent être inconnus si vous travaillez surtout dans le cloud, mais cela devrait fonctionner automatiquement après l'installation, comme l'installation de
makesur Linux.Si vous avez déjà une version fonctionnelle des outils de construction open-source
gccetmakeinstallée dans votre environnement Windows en utilisant MinGW ou Chocolatey, vous pouvez dire à Python d'utiliser ce compilateur sous Windows à la place, en créant un fichier àLib/distutils/distutils.cfgpar rapport à votre chemin d'installation Python et en ajoutant le contenu suivant :
[build]
compiler=mingw32
[build_ext]
compiler=mingw32
Si vous avez des difficultés à installer un compilateur sur Windows, vous pouvez essayer d'installer un paquet de roue précompilé pour la bibliothèque que vous installez à la place, bien que cela soit moins pratique que d'installer à partir de pip et qu'ils ne soient généralement disponibles que de manière ad hoc.
Environnements de compilation macOS
macOS regroupe sa chaîne d'outils de compilation dans la suite de développement d'Apple, XCode. Comme Visual Studio sur Windows, XCode est un environnement de développement complet avec sa propre interface, mais vous n'aurez pas réellement besoin d'utiliser XCode lui-même pour compiler des packages Python. Au lieu de cela, vous devez simplement vous assurer que les paquets XCode eux-mêmes sont installés. Vous pouvez le faire en exécutant xcode-select –install:
- xcode-select --install
Vous serez invité à commencer l'installation, puis à nouveau à accepter une licence logicielle. Ensuite, les outils se téléchargeront et s'installeront automatiquement.
Conclusion
L'écosystème Python est très puissant et accueillant tant pour les développeurs novices qu'experts, mais rencontrer des lacunes dans ses outils peut être déroutant. Dans ce tutoriel, vous avez appris à corriger les erreurs qui peuvent survenir en raison de l'absence de paquets de compilation, et quand Python doit compiler du code bas niveau au moment de l'installation du module.
Ensuite, vous voudrez peut-être consulter notre série Comment coder en Python.
