Python - PyCharm’da Çoklu Ortam Kullanımı
PyCharm ile yeni bir proje oluşturacağız. Projenin ilk dosyasının adı main.py olsun. Daha sonra ana dizinde environment adında bir klasör oluşturalım.
Bu klasörün içine production adında bir dosya ekleyelim. Bu dosyanın içeriği aşağıdaki gibi olabilir.
server_address=10.100.0.100:1433
db_name=prod_db
db_user=merter_prod
db_pass=pass_prod
Aynı şekilde environment dosyasınına test adında bir dosya daha ekleyelim. Bu dosyanın da içeriği aşağıdaki gibi olabilir.
server_address=194.100.0.100:1433
db_name=test_db
db_user=merter_test
db_pass=pass_test
Bu dosyaların uzantısı olmadığını dikkat edelim.
Daha sonra PyCharm’daki konfigurasyon penceresini açalım.
Açılan penceredeki ilk inputta main olan ismi production olarak değiştirelim. Environment variables inputunun değerine de aralarına noktalı virgül gelecek şekilde env_file=production ekleyelim.
Son durum aşağıdaki gibi olmalıdır.
Aynısını test konfigurasyonu için de yapmalıyız. Konfigurasyon penceresinde sol üsteki + butonuna basalım ve yeni bir çalıştırma konfigurasyonu ekleyelim. Son durum aşağıdaki gibi olmalıdır.
Sonraki adımda main.py dosyasını açıyoruz. Terminalden dotenv ve os paketlerini yüklüyoruz.
$ pip install dotenv os
main.py dosyasına aşağıdaki kodu ekleyelim.
from dotenv import load_dotenv
import os
Daha sonra load_env adında bir fonksiyon tanımlayalım. Bu fonksiyon bize seçtiğimiz ortama ait dosyanın bilgilerini dönsün.
def load_env():
#env_file degiskenini oku
env_name = os.getenv("env_file")
home_dir = "environments/"
if env_name == 'test':
# gecerli environment'i yukle
load_dotenv(home_dir + 'test')
elif env_name == 'production':
# gecerli environment'i yukle
load_dotenv(home_dir + 'production')
#dosya icerigini obje olarak don.
return {
'server_address': os.getenv("server_address"),
'db_name': os.getenv("db_name"),
'db_user': os.getenv("db_user"),
'db_pass': os.getenv("db_pass"),
}
main.py dosyanın son hali aşağıdaki gibidir.
from dotenv import load_dotenv
import os
def load_env():
#env_file degiskenini oku
env_name = os.getenv("env_file")
home_dir = "environments/"
if env_name == 'test':
# gecerli environment'i yukle
load_dotenv(home_dir + 'test')
elif env_name == 'production':
# gecerli environment'i yukle
load_dotenv(home_dir + 'production')
#dosya icerigini obje olarak don.
return {
'server_address': os.getenv("server_address"),
'db_name': os.getenv("db_name"),
'db_user': os.getenv("db_user"),
'db_pass': os.getenv("db_pass"),
}
if __name__ == '__main__':
env = load_env()
print("server_addr -> " + env['server_address']) # objenin bir elemanina erisim
print('-------')
print(env) #objeyi yazdir
pass
Sonuç
Test ve production ortamlarında çalıştırma sonuçları
Test
server_addr -> 194.100.0.100:1433
-------
{'server_address': '194.100.0.100:1433', 'db_name': 'test_db', 'db_user': 'merter_test', 'db_pass': 'pass_test'}
Production
server_addr -> 10.100.0.100:1433
-------
{'server_address': '10.100.0.100:1433', 'db_name': 'prod_db', 'db_user': 'merter_prod', 'db_pass': 'pass_prod'}
İyi Çalışmalar!