Μεταβλητές περιβάλλοντος Python και πώς να εργαστείτε με αυτές

Θέλετε να διαχειριστείτε καλύτερα τις ρυθμίσεις σας; Μάθετε πώς να εργάζεστε με μεταβλητές περιβάλλοντος στην Python.

Όταν δίδασκα στον εαυτό μου Python, έφτιαχνα έργα για να εφαρμόσω αυτά που μόλις είχα μάθει. Ένα υποσύνολο εκείνων που εμπλέκονται στη σύνδεση σε μια βάση δεδομένων και στην αναζήτηση της χρησιμοποιώντας Python. Αυτό σήμαινε ότι έπρεπε να αποθηκεύσω τη διαμόρφωση της βάσης δεδομένων και ευαίσθητες πληροφορίες, όπως όνομα χρήστη και κωδικό πρόσβασης για έλεγχο ταυτότητας.

Η σκληρή κωδικοποίηση τέτοιων ευαίσθητων πληροφοριών σε ένα σενάριο Python δεν ήταν καλή ιδέα. Και έμαθα πώς να χρησιμοποιώ αρχεία διαμόρφωσης και μεταβλητές περιβάλλοντος—μαζί με τις ενσωματωμένες μονάδες της Python για να δουλεύω μαζί τους.

Έτσι, κάθε φορά που χρειάζεται να χρησιμοποιήσω ευαίσθητες πληροφορίες, όπως κωδικούς πρόσβασης και κλειδιά API στις εφαρμογές μου, τις ορίζω ως μεταβλητές περιβάλλοντος και τις ανακτώ όπως απαιτείται. Σε αυτό το σεμινάριο, θα σας καθοδηγήσω σε μεταβλητές περιβάλλοντος και πώς να εργαστείτε μαζί τους στην Python.

Τι είναι οι μεταβλητές περιβάλλοντος;

Οι μεταβλητές περιβάλλοντος είναι μεταβλητές εξωτερικές της εφαρμογής σας που αποθηκεύουν πληροφορίες διαμόρφωσης, ρυθμίσεις συστήματος και παρόμοια. Συνήθως διαχειρίζεται το λειτουργικό σύστημα ή το περιβάλλον εφαρμογής. Τα βασικά χαρακτηριστικά των μεταβλητών περιβάλλοντος περιλαμβάνουν:

  • Ζεύγη ονόματος-τιμής: Οι μεταβλητές περιβάλλοντος αποτελούνται από ένα όνομα (γνωστό και ως κλειδί) και μια αντίστοιχη τιμή.
  • Εύρος συστήματος: Μπορείτε να ορίσετε μεταβλητές περιβάλλοντος σε επίπεδο συστήματος, καθιστώντας τις προσβάσιμες σε όλες τις διεργασίες που εκτελούνται στο σύστημα. Εάν χρειάζεται, μπορείτε επίσης να τα τροποποιήσετε ή να τα ορίσετε σε επίπεδο εφαρμογής, επηρεάζοντας μόνο τη συγκεκριμένη εφαρμογή.
  • Dynamic and Mutable: Μπορείτε να τροποποιήσετε τις μεταβλητές περιβάλλοντος κατά τη διάρκεια του χρόνου εκτέλεσης, παρέχοντας ευελιξία.

Πώς είναι χρήσιμες οι μεταβλητές περιβάλλοντος

Οι μεταβλητές περιβάλλοντος προσφέρουν πολλά πλεονεκτήματα για τη διαχείριση της διαμόρφωσης και των ευαίσθητων πληροφοριών στις εφαρμογές Python σας:

  • Διαχωρισμός ανησυχιών: Αποθηκεύοντας τη διαμόρφωση εκτός του κώδικά σας, κρατάτε τις ανησυχίες σχετικά με τη διαχείριση της διαμόρφωσης ξεχωριστά από τη λογική της εφαρμογής σας.
  • Ασφάλεια: Μπορείτε να αποθηκεύσετε ευαίσθητα δεδομένα, όπως κλειδιά API και διαπιστευτήρια βάσης δεδομένων, σε μεταβλητές περιβάλλοντος—χωρίς να τις εκθέσετε στον πηγαίο κώδικα—μειώνοντας τον κίνδυνο έκθεσης.
  • Ευελιξία: Με τις μεταβλητές περιβάλλοντος, η ενημέρωση των ρυθμίσεων διαμόρφωσης είναι απλή, καθώς μπορείτε να ενημερώσετε/κάνετε αλλαγές εκτός της βάσης κώδικα. Οι μεταβλητές περιβάλλοντος σάς επιτρέπουν να προσαρμόζετε τις ρυθμίσεις διαμόρφωσης χωρίς να τροποποιείτε τον κώδικά σας. Αυτή η ευελιξία είναι ιδιαίτερα χρήσιμη για την ανάπτυξη εφαρμογών σε διαφορετικά περιβάλλοντα ή κατά την ενημέρωση των διαπιστευτηρίων.
  Διόρθωση Fire TV Δεν είναι δυνατή η σύνδεση με τον διακομιστή αυτήν τη στιγμή

Στις επόμενες ενότητες αυτού του σεμιναρίου, θα διερευνήσουμε τον τρόπο ρύθμισης, πρόσβασης και διαχείρισης μεταβλητών περιβάλλοντος στην Python και πώς βελτιώνουν τη διαχείριση διαμόρφωσης στα έργα σας.

Πώς να ορίσετε μεταβλητές περιβάλλοντος

Μπορείτε να ορίσετε μεταβλητές περιβάλλοντος χρησιμοποιώντας τη γραμμή εντολών. Το εύρος τέτοιων μεταβλητών περιβάλλοντος ισχύει μόνο για την τρέχουσα περίοδο λειτουργίας—και δεν παραμένουν εκτός της τρέχουσας συνεδρίας.

Εάν χρησιμοποιείτε υπολογιστή Mac ή Linux, μπορείτε να ορίσετε μια μεταβλητή περιβάλλοντος στην τρέχουσα περίοδο λειτουργίας του τερματικού σας όπως:

export MY_VARIABLE=my_value

Εάν είστε χρήστης των Windows, μπορείτε να ορίσετε προσωρινά μια μεταβλητή περιβάλλοντος όπως φαίνεται:

set MY_VARIABLE=my_value

Πρόσβαση στις μεταβλητές περιβάλλοντος στην Python

Η Python παρέχει το λειτουργική μονάδα για λειτουργικότητα που σχετίζεται με το λειτουργικό σύστημα. Και το os.environ είναι ένα λεξικό μεταβλητών περιβάλλοντος. Τα ονόματα των μεταβλητών περιβάλλοντος και οι τιμές τους είναι τα κλειδιά και οι τιμές του λεξικού, αντίστοιχα.

Έτσι, μπορείτε να έχετε πρόσβαση στις τιμές των μεταβλητών περιβάλλοντος—χρησιμοποιώντας (τα ονόματά τους ως) τα κλειδιά—όπως ακριβώς θα έχετε πρόσβαση σε στοιχεία ενός λεξικού.

Ακολουθούν μερικά παραδείγματα:

import os
print(os.environ['HOME'])
# Output: /home/balapriya
print(os.environ['USER'])
# Output: balapriya

Μέχρι εδώ καλά. Τι συμβαίνει όμως εάν προσπαθήσετε να αποκτήσετε πρόσβαση στην τιμή μιας μεταβλητής περιβάλλοντος που δεν ορίστηκε ποτέ;

Ας προσπαθήσουμε να αποκτήσουμε πρόσβαση στο API_KEY που δεν έχουμε ορίσει ακόμη:

print(os.environ['API_KEY'])

Όπως αναμενόταν, θα λάβετε ένα KeyError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen os>", line 679, in __getitem__
KeyError: 'API_KEY'

Χειρισμός βασικών σφαλμάτων

Μπορείτε να χειριστείτε το KeyError όπως φαίνεται:

import os

try:
	api_key = os.environ['API_KEY']
	print(f'API_KEY is set to: {api_key}')
except KeyError:
	print('API_KEY is not set. Please configure it.')

Αυτή η προσέγγιση δεν διακόπτει απότομα την εκτέλεση του προγράμματος όταν εγείρεται μια εξαίρεση KeyError. Ωστόσο, παρέχει ένα περιγραφικό μήνυμα σφάλματος:

# Output
API_KEY is not set. Please configure it.

Έτσι, όταν το υπόλοιπο πρόγραμμα δεν εκτελείται όπως αναμένεται, ξέρουμε ότι χάσαμε να ορίσουμε μια απαιτούμενη μεταβλητή περιβάλλοντος.

Πρόσβαση σε μεταβλητές περιβάλλοντος Χρησιμοποιώντας τη μέθοδο get().

Μπορείτε να χρησιμοποιήσετε τη μέθοδο λεξικού get() για να λάβετε την τιμή μιας μεταβλητής περιβάλλοντος. Αντί για ένα KeyError, η μέθοδος get() επιστρέφει None εάν η μεταβλητή δεν βρεθεί.

Η πρόσβαση στη μεταβλητή NOT_SET που δεν έχουμε ορίσει επιστρέφει None:

print(os.environ.get('NOT_SET'))
# Output: None

Προτιμώ να ανεβάσω ένα βασικό σφάλμα όταν η μεταβλητή περιβάλλοντος δεν έχει οριστεί. Στη συνέχεια, αφήστε το να περάσει σιωπηλά ή να υπαχθεί στο None που επιστρέφει η μέθοδος get().

  Όλα όσα πρέπει να γνωρίζετε [2023]

Αλλά η μέθοδος get() είναι χρήσιμη όταν μπορούμε να μεταβιβάσουμε μια προεπιλεγμένη τιμή για μια συγκεκριμένη μεταβλητή περιβάλλοντος εάν δεν έχει οριστεί.

Εδώ είναι ένα παράδειγμα:

print(os.environ.get('HOME','/home/user'))
# Output: /home/balapriya

Πώς να διαχειριστείτε τη διαμόρφωση με μεταβλητές περιβάλλοντος

Ας πάρουμε τώρα μερικά πρακτικά παραδείγματα όπου χρησιμοποιούμε μεταβλητές περιβάλλοντος στην εφαρμογή μας.

Παράδειγμα 1: Διαμόρφωση παραμέτρων σύνδεσης βάσης δεδομένων

Ας υποθέσουμε ότι θέλετε να συνδεθείτε σε μια βάση δεδομένων PostgreSQL από την Python. Για να το κάνετε αυτό, μπορείτε να εγκαταστήσετε και να χρησιμοποιήσετε την υποδοχή psycopg2:

pip install psycopg2

Σε αυτό το παράδειγμα, χρησιμοποιούμε μεταβλητές περιβάλλοντος για να διαμορφώσουμε τις παραμέτρους σύνδεσης της βάσης δεδομένων. Εάν οι μεταβλητές περιβάλλοντος δεν έχουν οριστεί, παρέχουμε προεπιλεγμένες τιμές για χρήση.

import os
import psycopg2  

# Retrieve database configuration from environment variables
db_host = os.environ.get('DB_HOST', 'localhost')
db_port = os.environ.get('DB_PORT', '5432')
db_user = os.environ.get('DB_USER', 'myuser')
db_password = os.environ.get('DB_PASSWORD', 'mypassword')

# Establish a database connection
try:
	connection = psycopg2.connect(
    	host=db_host,
    	port=db_port,
    	user=db_user,
    	password=db_password,
    	database="mydb"
	)
	print('Connected to the database!')
except Exception as e:
	print(f'Error connecting to the database: {e}')

Παράδειγμα 2: Διαχείριση κλειδιών API

Ας πάρουμε ένα άλλο παράδειγμα που περιλαμβάνει τη χρήση κλειδιών API.

Εκτός από τη διεπαφή ChatGPT, μπορείτε επίσης να χρησιμοποιήσετε το OpenAI API για την υποστήριξη OpenAI LLM στις εφαρμογές σας.

Όταν εγγράφεστε για έναν λογαριασμό OpenAI, θα βλέπετε (συνήθως) μερικές δωρεάν πιστώσεις API περιορισμένου χρόνου. Πιάστε το κλειδί API σας μεταβαίνοντας στις Ρυθμίσεις > Προβολή κλειδιών API.

Μπορείτε να χρησιμοποιήσετε το Open AI Python SDK και ένα πλαίσιο όπως το LangChain για τη δημιουργία εφαρμογών. Για να το κάνετε αυτό, πρέπει να εγκαταστήσετε τις βιβλιοθήκες (σε εικονικό περιβάλλον) χρησιμοποιώντας το pip:

pip install openai
pip install langchain 

Δείτε πώς μπορείτε να ορίσετε το OPENAI_API_KEY ως μεταβλητή περιβάλλοντος:

import os
os.environ["OPENAI_API_KEY"]='your-api-key'

Τώρα μπορείτε να αποκτήσετε πρόσβαση στα Open AI LLM στο σενάριό σας ως εξής:

from langchain.llms import OpenAI
model=OpenAI(model_name="gpt-3.5-turbo")

Πώς να τροποποιήσετε τις μεταβλητές περιβάλλοντος στην Python

Μπορείτε να πατήσετε στο λεξικό os.environ από τη λειτουργική μονάδα os για να τροποποιήσετε μεταβλητές περιβάλλοντος στην τρέχουσα διαδικασία Python:

import os

# Modify an existing environment variable or create a new one
os.environ['MY_VARIABLE'] = 'new_value'

Στην Python, μπορείτε να χρησιμοποιήσετε το ενότητα υποδιεργασίας για δημιουργία υποδιεργασιών από υπάρχον σενάριο Python. Κάτι που είναι χρήσιμο όταν θέλετε να εκτελέσετε προγράμματα συστήματος στην Python.

Στο παρακάτω παράδειγμα, τροποποιούμε τη μεταβλητή περιβάλλοντος PATH πατώντας στο λεξικό os.environ. Στη συνέχεια, εκτελούμε το echo $PATH ως υποδιεργασία:

import os
import subprocess

# Set a custom environment variable for the subprocess
os.environ['PATH'] = '/custom/path'

# Run a subprocess that accesses the PATH environment variable
result = subprocess.run("echo $PATH", shell=True, stdout=subprocess.PIPE)
output = result.stdout.decode()
print(output)
print(f'Subprocess output: {output}')

Βλέπουμε ότι το PATH παίρνει την τιμή του /custom/path:

# Output
/custom/path

Πεδίο εφαρμογής των μεταβλητών τροποποιημένου περιβάλλοντος

Είναι σημαντικό να σημειωθεί ότι αυτές οι ενημερώσεις μεταβλητών περιβάλλοντος είναι προσωρινές και ισχύουν μόνο για την τρέχουσα διαδικασία Python. Μόλις τερματιστεί το σενάριο, οι αλλαγές απορρίπτονται:

  • Τρέχουσα διεργασία Python: Όταν τροποποιείτε μια μεταβλητή περιβάλλοντος χρησιμοποιώντας το os.environ στο σενάριο Python, η αλλαγή είναι τοπική στην τρέχουσα διεργασία Python. Δεν θα επηρεάσει άλλες διεργασίες που εκτελούνται ή μελλοντικές συνεδρίες Python.
  • Θυγατρικές διεργασίες: Οι αλλαγές μεταβλητής περιβάλλοντος που πραγματοποιούνται στην τρέχουσα διεργασία Python κληρονομούνται από θυγατρικές διεργασίες που δημιουργούνται από το σενάριό σας. Για παράδειγμα, εάν δημιουργήσετε μια υποδιεργασία από το σενάριο Python (γονική διαδικασία), η θυγατρική διαδικασία θα έχει πρόσβαση στις τροποποιημένες μεταβλητές περιβάλλοντος (όπως φαίνεται στο παράδειγμα).
  • Όχι σε επίπεδο συστήματος: Οι μεταβλητές περιβάλλοντος που ορίζονται σε ένα σενάριο Python δεν θα διατηρηθούν εκτός της εκτέλεσης αυτού του σεναρίου.
  4 καλύτερα εργαλεία παράκαμψης FRP της Samsung για να δοκιμάσετε

Εάν χρειάζεται να κάνετε επίμονες αλλαγές στις μεταβλητές περιβάλλοντος σε επίπεδο συστήματος, συνήθως πρέπει να το κάνετε χρησιμοποιώντας μεθόδους που σχετίζονται με το λειτουργικό σύστημα.

Πώς να φορτώσετε αρχεία .env με το python-dotenv

ο βιβλιοθήκη python-dotenv είναι ένα δημοφιλές πακέτο Python που απλοποιεί τη διαδικασία φόρτωσης μεταβλητών περιβάλλοντος από ένα αρχείο .env στο έργο Python σας. Είναι ιδιαίτερα χρήσιμο όταν έχετε πολλά περιβάλλοντα (π.χ. ανάπτυξη, παραγωγή) με διαφορετικές διαμορφώσεις και θέλετε να διατηρήσετε αυτές τις ρυθμίσεις ξεχωριστές από τον πηγαίο κώδικα.

Εγκατάσταση python-dotenv

Για να χρησιμοποιήσετε το python-dotenv, πρέπει πρώτα να το εγκαταστήσετε. Μπορείτε να το εγκαταστήσετε—σε ένα εικονικό περιβάλλον—χρησιμοποιώντας το pip, τον διαχειριστή πακέτων Python:

pip install python-dotenv

Φόρτωση μεταβλητών περιβάλλοντος από αρχείο .env

Τώρα μπορείτε να δημιουργήσετε ένα αρχείο .env στον ριζικό κατάλογο του έργου σας και να το συμπληρώσετε με ζεύγη κλειδιών-τιμών, όπως ακριβώς οι κανονικές μεταβλητές περιβάλλοντος. Ας δημιουργήσουμε το ακόλουθο αρχείο .env με τιμές κράτησης θέσης:

API_KEY=your_api_key_here
DB_PASSWORD=your_database_password_here

Τώρα μπορείτε να φορτώσετε τις μεταβλητές περιβάλλοντος από το αρχείο .env χρησιμοποιώντας python-dotenv όπως:

import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Access the environment variables
api_key = os.getenv("API_KEY")
database_password = os.getenv("DB_PASSWORD")

# Print out the env variables
print(f"API Key: {api_key}")
print(f"Database Password: {database_password}")

Παρατηρήστε ότι χρησιμοποιήσαμε το os.getenv(VARIABLE_NAME) για να λάβουμε τις τιμές των μεταβλητών περιβάλλοντος. Αυτός είναι επίσης ένας έγκυρος (και λιγότερο συχνά χρησιμοποιούμενος) τρόπος πρόσβασης σε μεταβλητές περιβάλλοντος.

Εδώ είναι η έξοδος:

API Key: your-api-key-here
Database Password: your-database-url-here

Σε αυτό το παράδειγμα:

  • Χρησιμοποιούμε τη load_dotenv() για να φορτώσουμε τις μεταβλητές περιβάλλοντος που ορίζονται στο αρχείο .env στο τρέχον περιβάλλον.
  • Στη συνέχεια χρησιμοποιούμε την os.getenv() για πρόσβαση στις μεταβλητές περιβάλλοντος: API_KEY και DB_PASSWORD.

συμπέρασμα

Και αυτό είναι ένα περιτύλιγμα! Ελπίζω να έχετε μάθει πώς να διαχειρίζεστε τη διαμόρφωση και τις ευαίσθητες πληροφορίες χρησιμοποιώντας μεταβλητές περιβάλλοντος σε εφαρμογές Python. Καλύψαμε τα βασικά στοιχεία της ρύθμισης και της πρόσβασης σε μεταβλητές περιβάλλοντος, καθώς και την πρακτική χρήση τους στη διαμόρφωση εφαρμογών.

Ενώ οι μεταβλητές περιβάλλοντος είναι σίγουρα χρήσιμες για τον διαχωρισμό των παραμέτρων από τον πηγαίο κώδικα, θα πρέπει να αποθηκεύετε ευαίσθητες μεταβλητές ως μυστικά σε περιπτώσεις χρήσης παραγωγής. Για τη διαχείριση μυστικών, προτείνω να εξερευνήσετε εργαλεία όπως HashiCorp Vault ή AWS Secrets Manager.