21 Ocak 2018 Pazar

Azure Web App Service üzerinde SpaCy (veya diğer Python native module) kurulumu



Azure App Service üzerinde Python ile geliştirilmiş uygulamayı çalıştırabilmek için:
-İstenirse güncel Python extension kurulumu (3.4 mevcut)
-Eğer geliştirilen uygulama "native module" kullanıyorsa gerekli çevrim işleminin yapılması (Windows App Service üzerinde çalışabilmesi için)

Aşağıdaki açıklamalarda Azure Web App Service ortamına bir Cython native compiler'a ihtiyaç duyan Python paketi olan spaCy NLP kurulumu anlatılmakta. Aynı yöntem ile diğer compiler kullanan Python paketleri kurulumu da yapılabilir.

Ön bilgi

Azure App Service üzerinde Python 3.4 kurulu geliyor. Uygulama ayarlarından açık konuma getirilip kullanılabilir.

Baştan sonra Git üzerindeki hazır bir örnek uygulamayı Azure App Service de çalışır hale getirme örneği:
-"Deployment user" oluşturma
-"Resource Group" oluşturma
-"App Service Plan" oluşturma
-Uygulamayı oluşturma
-Git üzerinden Azure'daki uygulamaya kurulum




Alternatif anlatım:
Kullanılan paket'e göre web.config de yapılması gerekli değişikliklerle birlikte anlatım (Bottle, Flask, Django...)

Güncel bir Python versiyonu kurmak

Web uygulama eklentileri (extension) üzerinden x86 yada x64 olarak galeride bir kaç farklı güncel version bulunmakta.

Extension Repository (problem olması durumunda hatayı araştırma)


Burada önemli nokta, kurulumun basit, tanımların karışık olması.
Anahtar nokta web.config dosyasının doğru yapılandırılması.
Örnek bir hata ve çözüm için yapılabilecekler: https://github.com/Microsoft/PTVS/issues/2364

Örnek bir web.config dosyası:
Dikkat edilmesi gereken iki nokta; Python runtime yolunun doğru verilmesi (eklentinin kurulduğu yer) ve FastCGI handler tanımı (IIS'e gelen isteklerin Python runtime'a iletiminden sorumlu aracı kurum)

Bu şekildeki yapılandırma ile standart Python modulleri kullanarak geliştirilmiş uygulamalar çalıştırılabilir.

Ortam kurulumu detay bilgiler: 

Extension kurulumu ve Python paketleri kurulumu:
-Paketlerin kurulumu için Python runtime dizinde standart yöntem kullanılır "python -m pip install bottle"
-Alternatif olarak uygulamanın referans verdiği tüm paketlerin requirements.txt üzerinden kurulumu için: python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt

Native Moduller için derleme

App Service üzerinden C Compiler olmadığı için istenen platformda (bu durumda Windows App Service ortamına kurulum için Windows geliştirme ortamında) wheel ile gerekli derlenmiş dosyalar hazırlanıp yayına uygulama ile birlikte alınmalı.

Eğer daha önce kurulmadıysa, geliştirme ortamında wheel kurulması.
python.exe -m pip install wheel
wheel ile compile edilmiş hallerini kurma

Python paketlerin wheel dosyalarını oluşturmak için:
python.exe -m pip wheel -r requirements.txt -w wheelhouse
spaCy ile geliştirilen projede üstteki komut çalıştırılınca alttaki 29 dosya ortaya çıkıyor.
Bu dosyaları Azure App Service de wwwroot altında wheelhouse64 dizini altına atarsak, requirements.txt dosyasında alttaki gibi tanım yapmalıyız.

--find-links wheelhouse64
bottle
spacy==2.0.5 

Alternatif olarak spaCy model örneğinde olduğu gibi paketin url referensı verilebilir.
spacy>=2.0.0,<3 .0.0="" div="">
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz#en_core_web_sm

spaCy için ek olarak model kurulumu "python -m spacy download en" şeklinde yada üstte belirtildiği gibi requirements.txt ile yapılabilir.
Yalnız "en kısa yolu ve en_core_web_sm modeli" arasındaki tanım yetersiz haktan dolayı yapılamayacaktır. Tam isim sorunsuz kullanılabilir.




Son olarak:
spaCy'yi servis ile sunmak.




Docker kullanarak Python uygulaması yayına alma

Visual Studio Python eklentisini verilmli kullanabilmek için: 

Hiç yorum yok: