Membuat Project Python yang mudah untuk dimaintain
Tags: python, indonesia, datascience, softwaredevelopment
Published: 2024-06-02 03:48:05

Bayangkan kamu memiliki project python pribadi di github kamu yang sudah tidak kamu buka selama berbulan-bulan. Ketika dicoba di laptop kamu ternyata tidak jalan entah karena kurang depedencies atau versi python kamu tidak cocok dan lain-lain. Seharian kamu berusaha menyelesaikan masalah tersebut dan akhirnya project tersebut bisa berjalan dilaptop kamu. Sekarang bayangkan jika hal tersebut terjadi di kantormu. Program itu selain harus bisa jalan di laptop kamu tetapi harus bisa jalan juga di server dan laptop teman kerja. Menyelesaikan masalah ini berulang-ulang itu tidak produktif.

Pada blog ini saya akan memberikan tips dan trik untuk membuat project python kalian lebih mudah dimaintain. Menggunakan best practice di python.

## 1. Definisikan versi python yang digunakan
Setiap depedencies python memiliki minimum versi python tersendiri. Contohnya Django 1.8 cuma bisa diggunakan oleh python 2.7 (Siapa yang masih pake python 2.7 di 2024??). Untuk menggunakan fastapi minimum versinya adalah python 3.5 karena fitur typehint pertama kali dikenalkan di pyhton 3.5.

Dimana saya harus mendefinisikan versi python yang digunakan? Saya pribadi mendifinisikan versi python di README.md. Saya membuat satu bagian yang berjudul requirement lalu mendefinisikanya di bagian tersebut. Contohnya bisa kalian lihat di repository github berikut [https://github.com/BimaAdi/Make-Maintainable-Python-Project](https://github.com/BimaAdi/Make-Maintainable-Python-Project).

## 2. Menggunakan Virtual Environtment
Secara default ketika menggunakan pip ketika kita melakukan `pip install {nama package}` pip akan menyimpan depedency secara global jadi bisa diakses oleh semua project di laptop kita. Masalahnya adalah tidak semua project menggunakan depedency tersebut. Contohnya kamu memiliki 2 project satu project mengenai machine learning satu lagi project mengenai backend development. Project machine learning menggunakan depedency yang berhubungan dengan machine learning seperti numpy, pandas, scikit learn dan lain-lain, Sedangkan project backend development menggunakan web framework seperti django. Project machine learning tidak membutuhkan django begitu pula project backend development tidak membutuhkan numpy, pandas maupun scikit learn. Dengan menggunakan virtual environtment kita mengelompokan depedencies berdasarkan kebutuhan project-project kita.


Untuk membuat virtual environtment pada folder project jalankan perintah:

```
python -m venv env
```

Pada folder project kalian akan melihat satu folder baru yang namanya env/. Folder ini menyimpan python intepreter dan depedency python. Untuk menggunakan python pada folder env jalankan perintah:

linux dan macos (bash or zsh)
```
source env/bin/activate
```
windows (command promt)
```
env\Scripts\activate.bat
```
windows (powershell)
```
env\Scripts\activate.ps1
```

Setelah menjalankan perintah diatas pada tampilan kiri terminal/command promt/powershell terdapat icon (env). 

![virtual environtment active](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/stu5xxpm2ufcmznxbsrh.png)

Ini menandakan python yang digunakan adalah python yang terdapat pada folder env (virtual environtmet) bukan python yang terinstalasi secara global. Kalau kalian coba jalankan perintah `pip list` tidak ada depedency apa pun kecuali bawaan python kalian. 

![pip list pada virtual environtment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twe694bfu6mm23fpksza.png)

Kalau kalian jalankan `pip install {nama depedency}` ketika terdapa icon (env) maka depedency tersebut akan disimpan di folder env. Coba lakukan `pip install Faker pandas` lalu `pip list` depedencies akan tersimpan di folder env.

![install depedency pada virtual environtment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rjjc1ebiuo2l1k8zav6e.png)

Untuk menggunakan python intepreter global bisa dengan 2 cara. Cara yang pertama dengan membukan terminal/command promt/powershell baru. Cara kedua dengan mematikan environtmentnya menggunakan perintah `deactivate`.

Pastikan folder env tidak masuk ke git repository jika menggunakan git. tambahkan folder env pada file .gitignore.

## 3. Catat depedency project pada file requirements.txt
Semakin besar suatu project semakin banyak depedency yang dibutuhkan. Mengintall depedency satu per satu pasti akan memakan banyak waktu. Selain itu kita juga harus mendefinisikan versi depedency apa yang digunkan. Untuk menyelesaikan masalah tersebut bisa menggunakan requirements.txt. requirements.txt itu hanya file txt biasa yang menyimpan depedency python dan versi yang digunakan.

Untuk membuat file requirements.txt ketika dalam kondisi menjalankan virtual environtment jalankan perintah `pip freeze > requirements.txt`. Perintah `pip freeze` menampilkan semua depedencies dan versinya pada virtual environtment. Perintah `> requirements.txt` untuk menyimpan hasilnya pada file requirements.txt. 

![pip freeze pada virtual environtment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r5vew9x0xzgo029rsk29.png)

Agar lebih jelas. Saya memiliki contoh project yang menggunakan semua tips diatas. Kalian bisa melihatnya di repository github [https://github.com/BimaAdi/Make-Maintainable-Python-Project](https://github.com/BimaAdi/Make-Maintainable-Python-Project)


Sebenarnya masih banyak tips lain untuk memmpermudah memaintain project python seperti menggunakan testing, formater dan lain-lain. Namun pada blog ini saya ingin specific hanya di python dan seminimal mungkin. Jika kalian memiliki tips lain atau solusi lain silahkan ditambah di kolom komentar.