मुख्य सामग्री पर जाएँ

Python एनवायरनमेंट वेरिएबल्स: आपको क्या जानना चाहिए

os और python-dotenv लाइब्रेरी के साथ Python एनवायरनमेंट वेरिएबल्स को मैनेज करने के सारे पहलू सीखें।
· 9 मि॰ पढ़ें

AI के साथ खोजें

एनवायरनमेंट वेरिएबल्स आपके डेवलपमेंट प्रोजेक्ट की कॉन्फ़िगरेशन जानकारी को लचीले और सुरक्षित तरीके से रखने का एक प्रभावी तरीका हैं। इनमें डेटा के key-value जोड़े होते हैं जिन्हें Python जैसी प्रोग्रामिंग भाषाएँ एक्सेस कर सकती हैं, और यह जानकारी अनचाही नज़रों से छिपी रहती है। इस ट्यूटोरियल में, आप Python में एनवायरनमेंट वेरिएबल्स बनाने और मैनेज करने के लिए ज़रूरी अवधारणाएँ और तकनीकें सीखेंगे।

एनवायरनमेंट वेरिएबल्स क्या हैं?

एनवायरनमेंट वेरिएबल्स नाम-मूल्य (name-value) जोड़े होते हैं जो आपके ऑपरेटिंग सिस्टम में सुरक्षित रूप से कहीं संग्रहीत रहते हैं। आम तौर पर, वे कुछ इस तरह दिखते हैं:

API_KEY=1akn4nka-aqwej3

Python में, आप ऐसे वेरिएबल्स का उपयोग अपने डेवलपमेंट प्रोजेक्ट से जुड़ी संवेदनशील जानकारी रखने के लिए कर सकते हैं। संवेदनशील जानकारी हो सकती है:

  • दूसरों के अनुप्रयोगों तक पहुँचने के लिए API keys
  • स्क्रिप्ट्स के माध्यम से अनुप्रयोगों में लॉग इन करने के लिए उपयोगकर्ता नाम और पासवर्ड
  • डेटाबेस क्रेडेंशियल्स
  • ऐसी कोई भी चीज़ जो गलती से उजागर होने पर सुरक्षा समस्या पैदा कर सकती है।

उदाहरण के लिए, यदि आप एक Python स्क्रिप्ट लिखते हैं जो खुलकर आपके AWS क्रेडेंशियल्स का उपयोग करती है और आप गलती से वह स्क्रिप्ट GitHub पर कमिट कर देते हैं, तो यह संभव है कि कोई दुर्भावनापूर्ण पक्ष उसे ढूंढ ले और आपके AWS बिल में भारी वृद्धि कर दे (ऐसा होना जाना-पहचाना है)।

एनवायरनमेंट वेरिएबल्स का एक और लाभ है कॉन्फ़िगरेबिलिटी। आप केवल एनवायरनमेंट वेरिएबल्स में बदलाव करके सेटिंग्स (जैसे डेटाबेस URLs, फाइल पाथ्स) आसानी से समायोजित कर सकते हैं, बिना अपना कोड बदले। यह सुविधा खास तौर पर तब उपयोगी होती है जब आप अपने प्रोजेक्ट के कई हिस्सों में एक ही सेटिंग का इस्तेमाल करते हैं।

तो, आइए देखें कि Python में इनके साथ कैसे काम करें।

Python के os मॉड्यूल में एनवायरनमेंट वेरिएबल्स कैसे प्राप्त करें

अपने सिस्टम में मौज़ूद एनवायरनमेंट वेरिएबल्स प्राप्त करने के लिए आप os मॉड्यूल का उपयोग कर सकते हैं। इसमें वेरिएबल्स प्राप्त करने के लिए .getenv फ़ंक्शन होता है:

import os
os.getenv("USER")
'bexgboost'

ऊपर, मैं सिस्टम उपयोगकर्ता नाम प्राप्त कर रहा हूँ, जो सभी सिस्टम्स में अंतर्निहित होता है। ऐसे और भी कई हैं, जैसे होम पाथ:

os.getenv("HOME")
'/home/bexgboost'

या आपके Conda executable का पाथ:

os.getenv("CONDA_EXE")
'/home/bexgboost/anaconda3/bin/conda'

तो जब आप conda कमांड्स चलाते हैं, आपका टर्मिनल इसी तरह जानता है कि कौन-सा एप्लिकेशन चलाना है।

लेकिन अगर आप कोई ऐसा वेरिएबल प्राप्त करने की कोशिश करें जो मौजूद नहीं है, तो क्या होगा:

os.getenv("MYDATABASE")

.getenv() फ़ंक्शन कुछ भी वापस नहीं करता, लेकिन हम इस व्यवहार को बदल सकते हैं। आप इसका default पैरामीटर इस्तेमाल कर सकते हैं ताकि वेरिएबल न होने पर एक कस्टम वैल्यू वापस मिले:

os.getenv("COMPUTER_PASSWORD", default="Nope!")
'Nope!'

.getenv() फ़ंक्शन मौज़ूदा वेरिएबल्स प्राप्त करने का सबसे अच्छा तरीका है।

हालाँकि, अन्य स्रोतों में, आप अलग तरीके भी देख सकते हैं जैसे .environ एट्रिब्यूट, जो सभी एनवायरनमेंट वेरिएबल्स वाला एक dictionary लौटाता है:

current_directory = os.environ.get("PWD", None)
current_directory
'/home/bexgboost/articles/2024/4_april'

चूँकि यह एक dictionary है, आप ब्रैकेट नोटेशन (अनुशंसित नहीं) या .get() फ़ंक्शन से वैल्यू प्राप्त कर सकते हैं।

os को शायद सबसे महत्वपूर्ण सिस्टम वेरिएबल PATH तक भी पहुँच है। PATH आपके सिस्टम पर इंस्टॉल सभी executables के absolute paths रखता है, इसलिए यह काफ़ी लंबा होता है:

os.getenv("PATH")[:46]
'/home/bexgboost/.local/bin:/home/bexgboost/bin'

PATH में हर path को कॉलन से अलग किया जाता है। आइए मेरे सिस्टम पर PATH की लंबाई गिनें:

def count_path_items():
   items = os.getenv("PATH").split(":")

   return len(items)

count_path_items()
79

79! बुरा नहीं है।

python-dotenv लाइब्रेरी का उपयोग करके Python में एनवायरनमेंट वेरिएबल्स को प्रभावी ढंग से मैनेज करना

कस्टम एनवायरनमेंट वेरिएबल्स सेट करना

अब जब हमें मौज़ूदा वेरिएबल्स निकालना आ गया है, तो देखते हैं कस्टम वेरिएबल्स कैसे सेट करें। पहला तरीका है os.environ dictionary का उपयोग करना:

# Create a new environment variable
os.environ["NEW_VARIABLE"] = "42"  # Always expects a string value

os.getenv("NEW_VARIABLE")
'42'

हालाँकि, यह तरीका बहुत उपयोगी नहीं है क्योंकि नई वैल्यूज़ मौजूदा सेशन खत्म होते ही खो जाएँगी।

सौभाग्य से, .env फाइलों (उच्चारण: डॉट-एन्व) का उपयोग करके एनवायरनमेंट वेरिएबल्स को अधिक स्थायी रूप से स्टोर करने का एक तरीका है। इन फाइलों का सिंटैक्स एक जैसा होता है, यानी वे किसी भी ऑपरेटिंग सिस्टम पर काम करेंगी। एक नमूना .env फाइल कुछ इस तरह दिखती है:

CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03

अभी के लिए, यह केवल तीन वेरिएबल्स परिभाषित करती है। इस फाइल को पढ़ने और इसकी सामग्री निकालने के लिए, हम python-dotenv नामक लाइब्रेरी का उपयोग करेंगे:

$ pip install python-dotenv

फिर, किसी Python स्क्रिप्ट या Jupyter Notebook में हम इसका load_dotenv फ़ंक्शन इम्पोर्ट करेंगे और कॉल करेंगे:

from dotenv import load_dotenv

load_dotenv()
True

यदि यह मौजूदा डायरेक्टरी के भीतर .env फाइल नहीं ढूँढ पाता, तो यह सभी पैरेंट डायरेक्टरीज़ में खोजेगा और मिल जाने पर True लौटाएगा।

मैंने ऊपर वाली .env फाइल अपने होम डायरेक्टरी ~/.env में रखी है; इसलिए load_dotenv उसे ढूँढ सका।

अपनी खुद की फाइलें बनाने के लिए, आप टर्मिनल में touch कमांड का उपयोग कर सकते हैं या VSCode जैसे किसी टेक्स्ट एडिटर का:

$ touch ~/.env

.env फाइलों का सिंटैक्स काफ़ी लचीला है। उदाहरण के लिए, आप multi-line वैल्यूज़ (कोट्स अनिवार्य) वाले वेरिएबल्स सेट कर सकते हैं:

LONG_ENV="This is an environment
variable with a long message"

एस्केप कैरेक्टर्स का उपयोग करें:

LONG_ENV="This value uses an \"escape character"

आप भविष्य के संदर्भ के लिए फाइल में टिप्पणियाँ (comments) भी जोड़ सकते हैं:

# You can also add comments anywhere with a hashtag
CUSTOM_API_LINK=https://myapi.com/v1/api
SNOWFLAKE_USERNAME=bexgboost
MYSQL_DATABASE_PASSWORD=as3ndf03

आप ${VAR_NAME} सिंटैक्स का उपयोग करके एक वेरिएबल की वैल्यू दूसरे के अंदर भी उपयोग कर सकते हैं:

FIRST_NAME=John
LAST_NAME=Doe
FULL_NAME="I am ${FIRST_NAME} ${LAST_NAME}"

python-dotenv के साथ कस्टम एनवायरनमेंट वेरिएबल्स प्राप्त करना

कस्टम वेरिएबल्स प्राप्त करना पहले जैसा ही है — बस os मॉड्यूल का उपयोग करें:

import os

os.getenv("CUSTOM_API_LINK")
'https://myapi.com/v1/api'
os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

सुनिश्चित करें कि आप पहले load_dotenv कॉल करें।

अगर आपकी .env फाइल ऐसी जगह पर है जहाँ load_dotenv नहीं पहुँच सकता, तो आप उसका सीधा path इस तरह दे सकते हैं:

load_dotenv("/home/bexgboost/somewhere/unreachable/.env")
True

Jupyter में .env फाइलों के साथ काम करना

Python-dotenv इंस्टॉल करने के बाद, यदि आप Jupyter का उपयोग कर रहे हैं तो आपको इसे Python में इम्पोर्ट करने की ज़रूरत नहीं है। यह लाइब्रेरी एक Jupyter मैजिक मेथड के साथ आती है जो इसे स्वतः लोड कर देती है:

# Run this anywhere in the notebook to load EVs from .env
%load_ext dotenv
%dotenv

फिर, आप दोबारा os मॉड्यूल का उपयोग कर सकते हैं:

import os

os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

Python में एनवायरनमेंट वेरिएबल्स के उपयोग के श्रेष्ठ तरीके

इस अनुभाग में, हम कुछ श्रेष्ठ तरीकों की सूची देंगे ताकि एनवायरनमेंट वेरिएबल्स सुरक्षित और पूरी तरह उपयोगी बने रहें।

1. हमेशा .env फाइलों को .gitignore में जोड़ें ताकि वे गलती से GitHub पर कमिट न हो जाएँ।

# Create .gitignore if it doesn't exist
$ touch .gitignore
$ echo ".env" >> .gitignore

2. वेरिएबल्स परिभाषित करते समय वर्णनात्मक, पूरी तरह UPPERCASE नामों का उपयोग करें।

# Good
DEBUG=True
LOGGING_VERBOSITY=3

# Bad
debug=True
LV=3

3. सिस्टम-व्यापी वेरिएबल्स के लिए एक एकल .env फाइल बनाएँ जिन्हें आपको हर प्रोजेक्ट में चाहिए।

$ touch ~/.env

4. अपनी .env फाइलों का स्कोप नियंत्रित करें। अपने डेवलपमेंट वर्कफ़्लो के अलग-अलग हिस्सों के लिए अलग-अलग फाइलें इस प्रकार बनाएँ:

$ touch development/.env.development
$ touch testing/.env.testing
$ touch production/.env.production

load_dotenv फ़ंक्शन इन्हें पहचान लेगा।

यदि आप अलग-अलग नामों के साथ कई .env फाइलें बनाते हैं, तो अपनी .gitignore फाइल बदलें ताकि वे सभी git इंडेक्सिंग से बाहर रहें:

# Pay attention to the asterisk *
$ echo ".env*" >> .gitignore

निष्कर्ष

इस लेख में, हमने Python में एनवायरनमेंट वेरिएबल्स को प्रभावी ढंग से मैनेज करने के लिए सभी आवश्यक अवधारणाएँ और तकनीकें सीखीं। हमने देखा कि Python OS मॉड्यूल से मौज़ूदा वेरिएबल्स कैसे प्राप्त करें और python-dotenv लाइब्रेरी से कस्टम वैल्यूज़ कैसे बनाएँ। हमने यह भी सीखा कि सर्वोत्तम प्रथाओं के अनुरूप .env फाइलें कैसे लिखें।

यदि आप Python सॉफ्टवेयर इंजीनियरिंग के बारे में और सीखना चाहते हैं, तो हमारा कोर्स देखें, Software Engineering Principles in Python।

आप हमारा Python Programming Skill Track भी देख सकते हैं, जो आपको शुरुआती से उन्नत Pythonista बनने तक व्यावहारिक अभ्यास और प्रोजेक्ट्स के माध्यम से ले जाएगा।

Bexruz (Bex) Tuychiev

लेखक

Bexruz (Bex) Tuychiev

मैं 2 से अधिक वर्षों के अनुभव वाला डेटा साइंस कंटेंट क्रिएटर हूँ और Medium पर सबसे बड़े फॉलोइंग्स में से एक रखता हूँ। मुझे एआई और एमएल पर विस्तार से लेख लिखना पसंद है, जिसमें हल्का-सा व्यंग्यात्मक अंदाज रहता है—क्योंकि कुछ तो करना पड़ता है ताकि वे कम उबाऊ लगें। मैंने 130 से अधिक लेख और एक DataCamp कोर्स तैयार किया है, और एक और बन रहा है। मेरा कंटेंट 50 लाख से अधिक लोगों ने देखा है, जिनमें से 20 हज़ार लोग Medium और LinkedIn पर फॉलोअर्स बन गए। 

विषय