Variabel Lingkungan untuk Proyek Python

Variabel Lingkungan untuk Proyek Python


Saat mengembangkan aplikasi web atau bot, kami sering berurusan dengan informasi rahasia, berbagai token dan kata sandi (kunci API, rahasia formulir web). Hardcoding informasi ini, apalagi menyimpannya dalam sistem kontrol versi yang tersedia untuk umum, adalah ide yang sangat buruk.


#  .   . API_KEY = 'very_secret_password' 

File konfigurasi


Cara termudah untuk menyelesaikan masalah ini adalah dengan membuat file konfigurasi terpisah dengan semua informasi sensitif dan menambahkannya ke .gitignore . Kerugian dari pendekatan ini adalah bahwa di git Anda juga perlu menyimpan template file konfigurasi dan jangan lupa untuk memperbaruinya secara berkala.


 #  . from config import API_KEY app = Flask(__name__) app.config['API_KEY'] = API_KEY 

Variabel lingkungan


Pendekatan yang lebih maju adalah dengan menggunakan variabel lingkungan. Variabel lingkungan adalah variabel bernama yang berisi informasi tekstual yang menjalankan program dapat digunakan. Misalnya, untuk memulai aplikasi labu, pertama-tama Anda harus menentukan nama aplikasi kami di variabel lingkungan FLASK_APP :


 $ export FLASK_APP=hello.py $ flask run * Running on http://127.0.0.1:5000/ 

Menggunakan variabel lingkungan, Anda bisa mendapatkan berbagai parameter aplikasi dan kunci rahasia:


 import os app.config['API_KEY'] = os.environ.get('API_KEY') 

Pustaka python-dotenv


Agar tidak secara manual mengatur variabel lingkungan setiap kali terminal dihidupkan ulang, Anda dapat menggunakan paket python-dotenv . Ini memungkinkan Anda untuk memuat variabel lingkungan dari file .env di direktori root aplikasi.
Instal paket:


 pip install python-dotenv 

Sekarang Anda dapat membuat file .env dengan semua variabel lingkungan yang dibutuhkan aplikasi Anda. Penting, tambahkan file .env ke .gitignore , jangan menyimpannya dalam sistem kontrol versi.


 import os from dotenv import load_dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path) 

File .env ini dapat digunakan untuk semua variabel konfigurasi, tetapi tidak dapat digunakan untuk variabel lingkungan FLASK_DEBUG dan FLASK_DEBUG , karena mereka sudah diperlukan selama pemuatan awal aplikasi.


Utilitas Direnv


Variabel lingkungan dapat secara otomatis dimuat ketika memasuki folder proyek, ini sangat nyaman ketika bekerja dengan beberapa proyek pada saat yang sama. Utilitas direnv memungkinkan Anda melakukan ini. Direnv adalah manajer variabel lingkungan terminal yang mendukung bash, zsh, tcsh dan shell lainnya. Memungkinkan Anda memuat dan membongkar variabel lingkungan secara otomatis tergantung pada direktori Anda saat ini. Ini memungkinkan Anda untuk memiliki variabel lingkungan yang spesifik untuk setiap proyek. Sebelum setiap undangan, keberadaan file .envrc di direktori saat ini dan induk diperiksa. Jika file ada, itu dimuat ke dalam subpastern bash, dan semua variabel yang diekspor kemudian ditangkap oleh direnv dan kemudian dibuat tersedia untuk shell.


Instal direnv


 sudo apt-get install direnv 

Selanjutnya, Anda perlu melakukan perubahan untuk mengonfigurasi shell kami; untuk bash, tambahkan berikut ini di akhir file ~/.bashrc dan restart konsol:


 eval "$(direnv hook bash)" 

Contoh Direnv

Buat folder baru untuk proyek:


 $ mkdir ~/my-project $ cd ~/my-project 

Kami menunjukkan bahwa variabel lingkungan FLASK_APP tidak dimuat:


 $ echo $FLASK_APP nope 

Tulis variabel lingkungan ke file .envrc :


 $ echo export FLASK_APP=hello.py > .envrc .envrc is not allowed 

Untuk memastikan keamanan, setelah membuat atau memodifikasi file .envrc , Anda perlu mengonfirmasi dengan direnv allow command:


 $ direnv allow . direnv: reloading direnv: loading .envrc direnv export: +FLASK_APP 

Kami menunjukkan bahwa variabel lingkungan dimuat:


 $ echo $FLASK_APP hello.py 

Ketika Anda keluar dari folder proyek, variabel lingkungan diturunkan


 $ cd .. direnv: unloading 

dan menjadi tidak disetel lagi


 $ echo $FLASK_APP nope 

Bekerja dengan lingkungan virtual dalam direnv


Selain memuat variabel lingkungan, direnv juga memungkinkan Anda untuk bekerja dengan lingkungan virtual untuk Python.
Lingkungan virtual memungkinkan Anda untuk menggunakan versi berbeda dari penerjemah python dan paket pustaka untuk masing-masing proyek. Ada beberapa cara untuk membuat lingkungan virtual untuk python, di sini kita melihat modul venv, untuk opsi lain dijelaskan dalam dokumentasi direnv .


Untuk menggunakan venv untuk secara otomatis membuat dan mengaktifkan lingkungan virtual, Anda perlu menambahkan kode berikut ke file ~/.config/direnv/direnvrc (lihat dokumentasi) .


Menciptakan lingkungan virtual

Jika Anda menambahkan baris ke file .envrc


 layout python-venv 

maka ketika masuk ke folder direnv akan membuat lingkungan virtual di folder direnv, misalnya .direnv/python-venv-3.7.3 .
Untuk membuat lingkungan virtual dengan jalur yang berbeda, misalnya, di folder venv yang lebih akrab, Anda perlu mengatur variabel VIRTUAL_ENV :


 export VIRTUAL_ENV=.venv 

Dengan cara yang sama, Anda dapat menghubungkan lingkungan virtual yang sudah dibuat.


Bekerja dengan berbagai versi Python

Untuk menginstal selain versi sistem python, Anda perlu menggunakan perintah:


 layout python-venv python3.6 

Buat string bash prompt (PS1)

Tidak seperti aktivasi manual dari lingkungan virtual, dalam kasus kami bash prompt (PS1) tidak akan berubah (biasanya seperti (venv) user@comp:~$ ). Untuk mengembalikan tampilan aktivasi lingkungan virtual ke konsol, tambahkan kode berikut ke file ~/.bashrc :


 show_virtual_env() { if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then echo "($(basename $VIRTUAL_ENV))" fi } export -f show_virtual_env PS1='$(show_virtual_env)'$PS1 

Contoh file konfigurasi file .envrc

Ini adalah .envrc file .envrc dikonfigurasi untuk mengembangkan aplikasi labu:


 export VIRTUAL_ENV=venv layout python-venv export FLASK_APP=app.py export FLASK_DEBUG=1 

Ini memungkinkan Anda untuk secara otomatis mengaktifkan lingkungan virtual dan memuat variabel lingkungan saat memasuki folder proyek.


terminal_direnv

Source: https://habr.com/ru/post/id472674/


All Articles