Makina Blog
Compiler les librairies Python sous Windows
Installer de nouvelles librairies se fait relativement facilement avec Python via la ligne de commande et l'instruction « pip » ; qui signifie PIP Installs Package. Mais sous Windows cela se solde très souvent par le message 'error: Unable to find vcvarsall.bat' car « pip » essaye de compiler certaines sources lorsqu'elles sont écrites en C. Nous vous proposons dans ce tutoriel de corriger cette erreur.
Introduction
Installer de nouvelles librairies se fait relativement facilement avec Python via la ligne de commande et l'instruction « pip » ; qui signifie PIP Installs Package.
L'avantage de cet outil est qu'il télécharge automatiquement la dernière version des librairies désirées depuis le site PyPi ainsi que toutes ses dépendances.
Cette commande est très riche et vous propose de nombreuses options comme préciser spécifiquement les versions des librairies que vous souhaitez installer.
Il est d'ailleurs vivement recommandé de les installer dans des environnements virtuel avec virtualenv ou pyenv.
Là ou « pip » est très fort c'est qu'il réalise aussi toutes les étapes de compilation si cela est nécessaire.
Mais sous Windows, c'est là que le bât blesse.
En effet, autant sous Linux et la plupart des autres systèmes Unix, les environnements de développement sont généralement installés par défaut et n'importe quel utilisateur aura appris dès ses débuts à lancer une compilation via l'invite de commande aussi facilement qu'un utilisateur Windows double-clique sur un « .exe » ; autant sous Windows cette tâche s'avère être un véritable problème car aucun outil de compilation n'est fourni nativement sur cet OS. Et c'est clairement une volonté du système de limiter les utilisateurs aux seules interactions graphique/souris.
C'est très convivial mais dans un environnement professionnel, ce n'est pas toujours suffisant.
Nous vous proposons donc dans ce tutoriel de vous aider à compiler vos librairies avec pip sous Windows.
Comment installer une librairie Python (PyCrypto) sous Windows
Un bon exemple est la compilation de la librairie PyCrypto qui est requise par de nombreux projets Python, comme PySNMP.
Sous Windows, avec un Python par défaut, vous obtenez ceci lorsque vous lancez la commande depuis l'invite de commande MSDOS :
C:\Users\utilisateur>c:\Python35\Scripts\pip.exe install pycrypto Collecting pycrypto Using cached pycrypto-2.6.1.tar.gz Installing collected packages: pycrypto Running setup.py install for pycrypto … copying lib\Crypto\Signature\__init__.py -> build\lib.win-amd64-3.5\Crypto\Signature Skipping optional fixer: buffer Skipping optional fixer: idioms Skipping optional fixer: set_literal Skipping optional fixer: ws_comma running build_ext building 'Crypto.Random.OSRNG.winrandom' extension warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath. error: Unable to find vcvarsall.bat ---------------------------------------- Command "c:\python35\python.exe -c "import setuptools, tokenize;__file__='C:\\Users\\UTILIS~1\\AppData\\Local\\Temp\\pip-build-oll8xinc\\pycrypto\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record C:\Users\UTILIS~1\AppData\Local\Temp\pip-9v78ols4-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\UTILIS~1\AppData\Local\Temp\pip-build-oll8xinc\pycrypto You are using pip version 7.1.2, however version 8.1.2 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. C:\Users\utilisateur>
Ce qui donne en images :
C'est sur cette dernière capture que les problèmes apparaissent car « pip » n'installe pas de binaires Windows, il les compile !
Mais ce n'est pas de la meilleure inspiration, pourriez-vous penser !
Et vous n'auriez pas tout à fait tort. Mais c'est ainsi, et il va falloir faire avec.
En même temps, c'est souvent la seule solution pour avoir une librairie vraiment adaptée et optimisée pour votre processeur et système.
Ne le blâmons pas trop vite.
Résoudre les problèmes d'installation de librairies Python
A ce niveau du processus d'installation « pip » ne vous laisse plus beaucoup d'options :
- Soit vous trouvez un paquet binaire de la librairie problématique pour votre Python et votre Windows
- Soit vous installez une distribution python toute packagée qui fournit cette librairie
- Soit vous renoncez à installer l'outil, ou vous passez sous Linux ; mais ce n'est pas possible car vous en avez besoin et votre environnement de travail c'est Windows !
- Soit vous donnez les moyens à « pip » de compiler sous Windows
La première solution est souvent possible en allant regarder dans la section download du site officiel de la librairie ou sur la page Pypi associée ou encore via le site Python Wheels.
Hélas, pour PyCrypto, cela ne fonctionne pas :
- Rien sur Pypi
- Rien sur le site officiel
Face à cette suite d’événements que l'on pourrait croire tirés tout droit de la loi de Murphy, vous avez encore la possibilité d'utiliser votre moteur de recherche préféré, ou le site stackoverflow qui restent toujours vos amis dans les moments difficiles afin de trouver un binaire pycrypto.
Et dans ce cas vous en trouverez :
Mais, dans certains cas cela n'ira toujours pas :
- Le binaire n'est pas pour votre version de Windows
- Le binaire n'est pas pour votre version de Python
- Le binaire n'est pas pour votre architecture (32 ou 64 bits)
- Vous n'avez pas confiance dans l'origine du binaire et vous avez bien raison !
Alors, vous pouvez vous rabattre sur la seconde option : installer une distribution Python incluant déjà la librairie PyCrypto.
Plusieurs distributions dont Anaconda vous le proposent et c'est souvent un excellent choix que j'ai tendance à conseiller et pratiquer, surtout pendant les formations.
Mais l'archive Anaconda fait quand même plus de 350Mo et inclut tout un tas de choses supplémentaires dont vous n'avez pas besoin, et, là encore, ce n'est pas optimisé pour votre processeur qui a les dernières instructions SSE5 ou MMX6 et vous comptez bien chiffrer et déchiffrer à la vitesse de la lumière et plus si possible.
Enfin, bref, ce n'est pas adapté à votre usage, ni envisageable pour vos clients.
Il vous reste l'option Linux, clairement, pour développer avec Python c'est le système idoine.
Mais non, vous travaillez sous Windows !
Et comme vous n'êtes pas du genre à lâcher le morceau vous décidez de compiler cette librairie, surtout que sur stackoverflow il y a des réponses dans ce sens.
Ce sera la solution que nous vous proposerons ici !
Compilation de librairies Python sous Windows
Nous y voilà donc, vous trouverez ci-dessous un procédé relativement générique et fiable qui vous permettra de compiler toute librairie Python le nécessitant sous Windows.
En voici les étapes :
- Identifier votre version de Python, son architecture (32 ou 64 bits) et la version du compilateur utilisé pour le compiler
- Télécharger et installer le compilateur identifié au point précédent
- Lancer l'installation avec pip
Identifier Python et le compilateur requis
Vous allez devoir compiler la librairie dans une version adaptée à votre interpréteur :
- 32 ou 64 bits
- Avec les mêmes librairies pour éviter les problèmes à l'exécution
L'idéal est d'utiliser le compilateur qui a servi à compiler votre Python ce qui est indiqué sur le site officiel de Python dans le lien précédent.
Mais plus généralement l'information est fournie dans l'entête de la console Python en mode interpréteur, comme le précise très bien ce fil stackoverflow :
Dans notre cas c'est la chaîne « [MSC v.1900 64 bit (AMD64)] » qui nous fournit l'information :
- MSC : Microsoft C
- v.1900 : la version du compilateur
- 64 bit : l'architecture
Il ne nous reste plus qu'à trouver le Visual Studio de Microsoft v1900, 64bits.
Télécharger et installer Microsoft Visual Studio
Pour identifier à quelle version du produit le numéro « v.1900 » correspond précisément vous pouvez chercher (sans véritable succès dans mon cas) sur le site de Microsoft ou Visual Studio. A défaut vous référer à Wikipédia et la valeur _MSC_VER décrite pour chaque version.
Dans notre exemple il s'agit de Miscrosoft Visual Studio 2015.
Vous pouvez la télécharger depuis cette URL :
- Visual Studio 2015 community edition
- Pour télécharger Visual Studio 2013, 2012 et autres, cherchez plutôt ici
- Mais surtout, le compilateur à utiliser est décrit sur le site officiel de Python
Nous travaillerons avec Visual Studio community edition 2015 dans la suite de ce tutoriel.
Une fois téléchargée, installez-là, attention, c'est volumineux (10Go minimum) et lent, très lent !
Commencez par choisir l'installation personnalisée :
Dans les langages proposés, sélectionnez Visual C++ et les outils Python :
Pour diminuer la taille occupée vous pouvez ne pas installer les outils « Windows and Web Developement », et peut-être les « Microsoft Foundation Classes for C++ », mais je n'ai pas essayé.
Ensuite, patientez.
Compiler PyCrypto
Une fois l'installation terminée, redémarrez l'ordinateur, lancez une invite de commande MSDOS et exécutez de nouveau la commande « pip install pycrypto »
C:\Users\utilisateur>c:\Python35\Scripts\pip.exe install pycrypto Collecting pycrypto Using cached pycrypto-2.6.1.tar.gz Installing collected packages: pycrypto Running setup.py install for pycrypto Successfully installed pycrypto-2.6.1 You are using pip version 7.1.2, however version 8.1.2 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. C:\Users\utilisateur>python Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import pycrypto Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'pycrypto' >>> import Crypto >>> help(Crypto) Help on package Crypto: NAME Crypto - Python Cryptography Toolkit
Ce qui donne en images:
Conclusion
Ce tutoriel vous a mené sur une solution standard de compilation de librairies Python sous Windows.
Les différentes étapes menant des erreurs à la solution ont été introduites afin de vous permettre de mieux suivre le cheminement menant à la solution finale.
Il est évident que le dernier chapitre aurait suffit.
La partie traitant des installations de binaires (wheels) reste une piste sérieuse à étudier et utiliser si vous ne souhaitez pas ou ne pouvez pas vous permettre d'installer Visual Studio.
En vous forçant, vous trouverez toujours un binaire…
Une fois Visual Studio installé vous devriez pouvoir compiler n'importe quelle librairie, notamment des choses plus compliquées comme PWM.
Mais nous y reviendrons.
Enfin, si vous êtes intéressé par l'installation de PySNMP sous Windows, suivez ce tutoriel et n'hésitez pas à suivre nos formations Python pour devenir un AS de ce langage.
Formations associées
Formations IA / Data Science
Formation Initiation au Python scientifique
À distance (FOAD) Du 2 au 6 décembre 2024
Voir la formationActualités en lien
Makina Corpus est sponsor de la PyConFR 2024
Le soutien de Makina Corpus à la PyConFR 2024, qui se tient du 31 octobre au 3 novembre 2024 à Strasbourg, reflète ses valeurs de partage et d’innovation, et son engagement envers la communauté dynamique et ouverte de Python.
Revoir les webinaires : découverte de l’outil CANARI-France
L’application CANARI-France est destiné aux acteurs agricoles afin de calculer des indicateurs agro-climatiques à partir de projections climatiques. Découvrer en le replay des 4 webinaires organisés par Solagro et l’ADEME.
La formation Python éligible au CPF est enfin arrivée
Makina Corpus propose un nouvelle formation Python éligible au CPF. Grâce à cette certification, cette formation peut être entièrement financée par votre compte Compte Personnel de Formation.