Menyiapkan Modul Python untuk Suatu Pelatihan?


Semenjak Data Science (DS) & Big Data (BD) ngetrend di dunia akademis & jagad digital (kalau disebut "dunia Maya" takutnya ada yang keselek 😄), berbagai pelatihan atau workshop menjamur di berbagai tempat. (Don't get me wrong, it's a good thing. Educating people is always a good thing). Biasanya pelatihan terkait DS/BD ini akan menggunakan bahasa pemrograman Python, R, atau Java.
Masing² bahasa pemrograman memiliki kelebihan & kekurangannya sendiri. Solusi terbaik tentu saja menggabungkan berbagai bahasa pemrograman tersebut dalam suatu sistem DS/BD yang terintegrasi. Tapi kita hanya manusia ... eh kok jadi drama gini ... Maksud saya tapi tentu saja tidak ideal jika suatu pelatihan menggunakan beberapa bahasa pemrograman sekaligus. Selain peserta & instrukturnya puyeng bin pusing, pelatihan-nya juga menjadi tidak fokus. Kalau disuruh memilih satu diantara ketiganya saya pribadi prefer Python. Alasannya sudah pernah dibahas di blog ini (Link1, Link2), namun singkatnya begini: Python relatif cepat, mudah dipelajari & gunakan, bisa buat IoT & Big Data, library data science-nya cukup lengkap, scalable, most popular (jadi kalau butuh bantuan banyak yang bisa menolong 😁), dan yang terpenting: gratis!!... (gratis is the best :D ) Namun seperti yang pernah disebutkan sebelumnya, tidak ada bahasa pemrograman yang sempurna, termasuk Python. Jika modul-modul Python yang terinstall di komputer kita tidak sinkron, maka program tidak akan berjalan dengan baik, atau bahkan tidak jalan sama sekali ... 😣 ... Kalau kasusnya di sebuah pelatihan, hal ini akan cukup merepotkan panitia & buat keringet dingin instrukturnya. Nah, post ini akan membahas bagaimana membuat script python yang akan memeriksa modul & menginstalnya jika diperlukan (online/offline) secara automatis, sehingga memudahkan panitia & nyenengke  peserta ... 😃 ... Ok, mari kita mulai saja .... Pertama-tama buat sebuah file teks (misal menggunakan notepad), lalu namakan "requirements.txt". Lalu tuliskan di file tersebut modul-modul yang dibutuhkan dalam pelatihannya dalam format seperti contoh berikut:
  spacy>=2.0.5
    scikit-learn>=0.19.1
    nltk>=3.2.5
silahkan tambahkan sebanyak keperluan modulnya. Bagaimana mengetahui versi berapa modul yang ada di komputer kita? ... Cara berikut biasanya bisa digunakan di sebagian besar modul:
import nltk # ganti dengan modul yang anda gunakan
print(nltk.__version__)
Lalu siapkan sebuah file python baru (misal instalasi_modul.py) dengan code berikut: 
 import pkg_resources
# Loading dependensi-nya dulu
getFile = open('requirements.txt',encoding='utf-8', errors ='ignore', mode='r');
    dependencies = getFile.readlines(); getFile.close()
    dependencies = [d.strip() for d in dependencies]
# Cek satu per satu apakah modul sudah sesuai dengan requirement pelatihan
install_this = []
    for module in dependencies:
        try:
            pkg_resources.require(module)
        except:
            install_this.append(module)
Setelah code tersebut dijalankan variabel (list) "install_this" akan memuat modul² yang belum sesuai dengan kebutuhan. Selanjutnya install modul-modul tersebut dengan cara berikut:
import subprocess
    for module in install_this:
         subprocess.call(['pip', 'install', '-U', module, '--upgrade'])
Option "-U" bisa dihilangkan jika ingin menginstall ke "main environment" python dan opsi "--upgrade" digunakan untuk precaution seandainya modul sudah ada, namun versinya masih lebih rendah. Notes cara diatas membutuhkan koneksi internet. Dan terkadang gagal jika modulnya butuh di compile, misalnya gensim, wordcloud, atau semacamnya. Biasanya gagal karena di komputer peserta tidak ada compiler yang bersesuaian dengan Python yang terinstall. Untuk mengatasi hal tersebut offline installation menggunakan Python Wheels bisa digunakan. Pertama-tama unduh Wheels yang dibutuhkan, Web berikut memuat database Python wheels yang super keren : https://www.lfd.uci.edu/~gohlke/pythonlibs/ Silahkan unduh wheel files yang dibutuhkan, lalu letakkan di folder yang sama dengan "requirements.txt".  Lalu cara berikut dapat dilakukan untuk menginstal secara offline modul python yang relatif sulit untuk di install tersebut diatas:
#Misal ini file² Wheels-nya
files = ['cymem-1.31.2-cp36-cp36m-win_amd64.whl',
                 'murmurhash-0.28.0-cp36-cp36m-win_amd64.whl',
                 'preshed-1.0.0-cp36-cp36m-win_amd64.whl']

    for wheels in files:
        subprocess.call(['pip', 'install', '-U', wheels ])
Cara diatas bisa digunakan pada sembarang platform (Windows, Linux, Mac), tapi wheels di Gohlke hanya untuk windows. Cara diatas juga bermanfaat tidak hanya untuk pelatihan, namun juga ketika menginstal solusi analitic engine kita ke perusahaan client. Atau untuk seorang guru/dosen ketika mengajar di kelas. Atau kasus lain yang sekiranya membutuhkan trik diatas. Alternative lain dari melakukan hal di atas (jika menggunakan Windows) adalah dengan menggunakan WinPython .... Mengapa? Karena WinPython bersifat Portable, sehingga panitia/instruktur bisa menyiapkan di suatu komputer lalu mengcopy seluruh folder winpython ke komputer peserta (tanpa harus menginstal dari awal). Karena portable, seluruh modul juga akan automatis ikut terbawa. Kekurangannya hanya executable-nya belum ter-register di environment komputer kita. Tapi hal ini mudah untuk diatasi, yaitu dengan menambah directory winpython dan subdirectory script-nya ke windows Path. Tips tambahan: perintah subprocess juga bisa digunakan untuk menginstall data file yang dibutuhkan suatu modul. misal perintah berikut akan menambahkan english laguage model ke modul Spacy di Python: subprocess.call(['python', '-m', 'spacy', 'download', 'en'])

Tidak ada komentar:

Posting Komentar

Relevant & Respectful Comments Only.