[PYTHON] Installer des packages qui ne peuvent pas utiliser de pips dans Azure App Service

introduction

Lors du déploiement d'une application Python sur Azure App Service, j'ai eu du mal à installer des packages qui devaient être compilés par wheel, donc je vais laisser une note: Pencil2 :: notebook: Pour les lecteurs, un aperçu d'Azure App Service et par Git Il est destiné à ceux qui savent se déployer. Pour ceux qui n'ont pas les connaissances préalables, Configurer Python avec Azure App Service Web Apps Création d'une application Web à l'aide de Django sur Azure Veuillez d'abord consulter la page.

Cette fois, le package est installé dans l'environnement suivant.

--Python 3.4.1 32 bits (environnement fourni par App Service par défaut)

Erreur de déploiement

Lors de l'installation de packages nécessitant une roue, [Documents officiels](https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-python-create-deploy-django-app # dépannage d'un nom --- installation du packagea% E3% 83% 88% E3% 83% A9% E3% 83% 96% E3% 83% AB% E3% 82% B7% E3% 83% A5% E3% 83 % BC% E3% 83% 86% E3% 82% A3% E3% 83% B3% E3% 82% B0 ---% E3% 83% 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8% E3% 81% AE% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% Peu importe le nombre de fois que j'ai déployé en référence à AB), j'ai eu des problèmes avec l'erreur suivante. Cette fois, nous éliminerons cette erreur.

remote:   Running setup.py install for pyodbc
remote:     building 'pyodbc' extension
remote:     error: Unable to find vcvarsall.bat
remote:     Complete output from command D:\home\site\wwwroot\env\Scripts\python.exe -c "import setuptools, tokenize;__file__='D:\\home\\site\\wwwroot\\env\\build\\pyodbc\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record D:\local\Temp\pip-okpfh2du-record\install-record.txt --single-version-externally-managed --compile --install-headers D:\home\site\wwwroot\env\include\site\python3.4:
remote:     running install
remote:
remote: running build
remote:
remote: running build_ext
remote:
remote: building 'pyodbc' extension
remote:
remote: error: Unable to find vcvarsall.bat
remote:
remote: ----------------------------------------

Construction locale et changement de nom de fichier avec la roue

Azure App Service est un environnement sandbox. Par conséquent, une bibliothèque créée en enveloppant C ou C ++ ne peut pas être installée avec ** pip **. Pour installer ces packages, vous avez besoin de ** pré-build avec wheel **. En outre, l'environnement Python que vous créez doit être sur la même plate-forme / architecture / version que App Service. Autrement dit, Python 2.7 32 bits ou 3.4 32 bits est requis sous Windows. En outre, l'environnement C ++ est pour Python 2.7 et [Python 3](https://www.microsoft. Veuillez noter que c'est différent pour com / ja-jp / download / details.aspx? Id = 5555). Lorsque l'environnement est prêt, exécutez la commande suivante.

python -m pip install --upgrade pip
pip install wheel
pip wheel azure-storage
pip wheel django-pyodbc-azure

Lorsque vous exécutez la commande ci-dessus, un fichier .whl est généré. Créez un dossier ** wheelhouse ** dans le répertoire racine de l'application que vous prévoyez de déployer et copiez-le là.

Puis renommez une partie du fichier .whl copié. C'était la plus grosse pierre d'achoppement, mais ** Les déploiements d'App Service ne prennent en charge que la balise none **: confounded: (Github's [Issue](https://github.com/Azure/azure] -storage-python / issues / 219 # issuecomment-250763151) Je suis enfin arrivé ...) Donc, cryptographie-1.5.2-cp34-cp34m-win32.whl => cryptographie-1.5.2-cp34 Renommez cp34m du nom de fichier à aucun sous la forme -none-win32.whl. Dans le package installé cette fois, la cryptographie, cffi et pyodbc ont été renommées. Même si vous installez un paquet différent du mien, soyez méfiant si le fichier .whl n'en contient aucun.

Modifier les exigences.txt

Ajoutez ensuite --find-links wheelhouse au début de requirements.txt. Désormais, lorsque vous déployez Git, il recherchera le package dans la timonerie. De plus, requirements.txt se présente comme suit.

--find-links wheelhouse
django==1.11
azure-storage==0.34.3
django-pyodbc-azure==1.11

Après cela, si vous récupérez les modifications avec Git, c'est l'environnement d'installation.

finalement

Azure App Service est très pratique, mais vous avez l'habitude d'installer des packages. .. .. J'ai eu l'impression que le déploiement d'applications créées avec C # ou Node.js était beaucoup plus facile.

Recommended Posts

Installer des packages qui ne peuvent pas utiliser de pips dans Azure App Service
[Road to Intermediate Python] Installer des packages en masse avec pip
Installer les packages qui doivent être compilés avec Python 3 avec pip [Windows]
Mesures pour ne pas être en mesure d'installer ou d'importer ssl avec pycharm
Dans pip install clang: erreur: argument inconnu: '- mno-fused-madd'
Installez python sur xserver pour utiliser pip
pipsi: utilisez le package sans polluer le système pip
Gérer les packages python à installer dans des conteneurs