Kursus
Variabel lingkungan adalah mekanisme yang kuat untuk menyimpan detail konfigurasi proyek pengembangan Anda secara fleksibel dan aman. Variabel ini menyimpan pasangan kunci-nilai yang dapat diakses oleh bahasa pemrograman seperti Python dan menjaga informasi tersebut tetap tersembunyi dari pihak yang tidak berwenang. Dalam tutorial ini, Anda akan mempelajari konsep dan teknik penting untuk membuat dan mengelola variabel lingkungan di Python.
Apa Itu Variabel Lingkungan?
Variabel lingkungan adalah pasangan nama-nilai yang disimpan di tempat yang aman di sistem operasi Anda. Umumnya, bentuknya seperti ini:
API_KEY=1akn4nka-aqwej3
Di Python, Anda dapat menggunakan variabel seperti ini untuk menyimpan informasi sensitif yang terkait dengan proyek pengembangan Anda. Informasi sensitif dapat berupa:
- Kunci API untuk mengakses aplikasi pihak lain
- Nama pengguna dan kata sandi untuk masuk ke aplikasi melalui skrip
- Kredensial basis data
- apa pun yang dapat menimbulkan masalah keamanan jika tidak sengaja terekspos.
Sebagai contoh, jika Anda menulis skrip Python yang secara terbuka menggunakan kredensial AWS Anda dan tanpa sengaja meng-commit skrip tersebut ke GitHub, ada kemungkinan pihak jahat menemukannya dan secara signifikan meningkatkan tagihan AWS Anda (ini bukan hal yang jarang terjadi).
Manfaat lain dari variabel lingkungan adalah keterkonfigurasian. Anda dapat dengan mudah menyesuaikan pengaturan (URL basis data, path file) dengan mengubah variabel lingkungan tanpa mengubah kode Anda. Fitur ini sangat membantu jika Anda menggunakan pengaturan yang sama di banyak bagian proyek.
Jadi, mari kita pelajari cara menggunakannya di Python.
Cara Mengambil Variabel Lingkungan di Modul os Python
Untuk mengambil variabel lingkungan yang sudah ada di sistem Anda, Anda dapat menggunakan modul os. Modul ini memiliki fungsi .getenv untuk mengambil variabel:
import os
os.getenv("USER")
'bexgboost'
Di atas, saya mengambil nama pengguna sistem, yang tersedia di semua sistem. Ada banyak variabel lain seperti path home:
os.getenv("HOME")
'/home/bexgboost'
Atau path ke executable Conda Anda:
os.getenv("CONDA_EXE")
'/home/bexgboost/anaconda3/bin/conda'
Jadi, saat Anda menjalankan perintah conda, itulah cara terminal mengetahui aplikasi mana yang harus dijalankan.
Namun, apa yang terjadi jika Anda mencoba mengambil variabel yang tidak ada:
os.getenv("MYDATABASE")
Fungsi .getenv() tidak mengembalikan apa pun, tetapi kita dapat mengubah perilaku itu. Anda dapat menggunakan parameter default untuk mengembalikan nilai kustom jika variabel tidak ada:
os.getenv("COMPUTER_PASSWORD", default="Nope!")
'Nope!'
Fungsi .getenv() adalah metode terbaik untuk mengambil variabel yang sudah ada.
Namun, di sumber lain, Anda mungkin melihat metode berbeda seperti atribut .environ, yang mengembalikan kamus berisi semua variabel lingkungan:
current_directory = os.environ.get("PWD", None)
current_directory
'/home/bexgboost/articles/2024/4_april'
Karena ini adalah kamus, Anda dapat menggunakan notasi kurung (tidak direkomendasikan) atau fungsi .get() untuk mengambil nilai.
os juga memiliki akses ke mungkin variabel sistem terpenting bernama PATH. PATH menyimpan path absolut ke semua executable yang terpasang di sistem Anda, sehingga biasanya sangat panjang:
os.getenv("PATH")[:46]
'/home/bexgboost/.local/bin:/home/bexgboost/bin'
Setiap path di PATH dipisahkan oleh tanda titik dua. Mari hitung panjang PATH di sistem saya:
def count_path_items():
items = os.getenv("PATH").split(":")
return len(items)
count_path_items()
79
79! Lumayan.
Menggunakan Pustaka python-dotenv untuk Mengelola Variabel Lingkungan di Python Secara Efektif
Menetapkan variabel lingkungan kustom
Sekarang setelah kita tahu cara mengambil variabel yang sudah ada, mari kita lihat cara menetapkan variabel kustom. Metode pertama adalah menggunakan kamus os.environ:
# Create a new environment variable
os.environ["NEW_VARIABLE"] = "42" # Always expects a string value
os.getenv("NEW_VARIABLE")
'42'
Namun, metode ini kurang berguna karena semua variabel baru akan hilang setelah sesi saat ini berakhir.
Untungnya, ada metode yang lebih tahan lama untuk menyimpan variabel lingkungan dengan menggunakan file .env (dibaca dot-env). File-file ini memiliki sintaks yang sama, yang berarti akan berfungsi di sistem operasi apa pun. Berikut contoh tampilan file .env:
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Untuk saat ini, file tersebut hanya mendefinisikan tiga variabel. Untuk membaca file ini dan mengekstrak isinya, kita akan menggunakan pustaka bernama python-dotenv:
$ pip install python-dotenv
Lalu, di skrip Python atau Jupyter Notebook kita akan mengimpor fungsi load_dotenv dan memanggilnya:
from dotenv import load_dotenv
load_dotenv()
True
Jika tidak dapat menemukan file .env di direktori saat ini, fungsi ini akan mencari di semua direktori induk dan mengembalikan True jika ditemukan.
Saya menyimpan file .env di atas di direktori home saya ~/.env; itulah sebabnya load_dotenv dapat menemukannya.
Untuk membuat file Anda sendiri, Anda dapat menggunakan perintah touch di terminal atau menggunakan editor teks seperti VSCode:
$ touch ~/.env
Sintaks file .env cukup fleksibel. Misalnya, Anda dapat menetapkan variabel dengan nilai multi-baris (harus menggunakan tanda kutip):
LONG_ENV="This is an environment
variable with a long message"
Gunakan karakter escape:
LONG_ENV="This value uses an \"escape character"
Anda juga dapat menambahkan komentar ke file untuk referensi di masa mendatang:
# You can also add comments anywhere with a hashtag
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03
Anda juga bisa menggunakan nilai dari satu variabel di dalam variabel lain menggunakan sintaks ${VAR_NAME}:
FIRST_NAME=John
LAST_NAME=Doe
FULL_NAME="I am ${FIRST_NAME} ${LAST_NAME}"
Mengambil variabel lingkungan kustom dengan python-dotenv
Mengambil variabel kustom sama seperti sebelumnya - cukup gunakan modul os:
import os
os.getenv("CUSTOM_API_LINK")
'https://myapi.com/v1/api'
os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'
Pastikan Anda memanggil load_dotenv terlebih dahulu.
Jika file .env Anda berada di lokasi yang tidak dapat dijangkau oleh load_dotenv, Anda dapat memberikan path langsung seperti di bawah ini:
load_dotenv("/home/bexgboost/somewhere/unreachable/.env")
True
Bekerja dengan file .env di Jupyter
Setelah Anda memasang Python-dotenv, Anda tidak perlu mengimpornya ke Python jika menggunakan Jupyter. Pustaka ini dilengkapi metode magic Jupyter yang memuatnya secara otomatis:
# Run this anywhere in the notebook to load EVs from .env
%load_ext dotenv
%dotenv
Lalu, Anda dapat menggunakan modul os lagi:
import os
os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'
Praktik Terbaik Menggunakan Variabel Lingkungan di Python
Di bagian ini, kita akan mencantumkan beberapa praktik terbaik untuk memastikan variabel lingkungan tetap aman dan sepenuhnya dapat digunakan.
1. Selalu tambahkan file .env ke .gitignore agar Anda tidak secara tidak sengaja meng-commit-nya ke GitHub.
# Create .gitignore if it doesn't exist
$ touch .gitignore
$ echo ".env" >> .gitignore
2. Saat mendefinisikan variabel gunakan nama yang deskriptif dan seluruhnya HURUF BESAR.
# Good
DEBUG=True
LOGGING_VERBOSITY=3
# Bad
debug=True
LV=3
3. Buat satu file .env untuk menyimpan variabel tingkat sistem yang Anda perlukan di setiap proyek.
$ touch ~/.env
4. Kendalikan cakupan file .env Anda. Buat file terpisah untuk berbagai bagian alur kerja pengembangan seperti di bawah ini:
$ touch development/.env.development
$ touch testing/.env.testing
$ touch production/.env.production
Fungsi load_dotenv akan mengenalinya.
Jika Anda membuat beberapa file .env dengan nama berbeda, ubah file .gitignore Anda agar semuanya dikecualikan dari pengindeksan git:
# Pay attention to the asterisk *
$ echo ".env*" >> .gitignore
Kesimpulan
Dalam artikel ini, kita telah mempelajari seluruh konsep dan teknik penting untuk mengelola variabel lingkungan di Python secara efektif. Kita mengetahui cara mengambil variabel yang ada dengan modul OS Python dan cara membuat nilai kustom dengan pustaka python-dotenv. Kita juga mempelajari cara menulis file .env yang sesuai dengan praktik terbaik.
Jika Anda ingin mempelajari lebih lanjut tentang rekayasa perangkat lunak di Python, lihat kursus kami, Software Engineering Principles in Python.
Anda juga dapat melihat Python Programming Skill Track kami, yang akan membawa Anda dari tingkat pemula hingga mahir dengan latihan dan proyek langsung.
Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn.

