Θέλετε να διαχειριστείτε καλύτερα τις ρυθμίσεις σας; Μάθετε πώς να εργάζεστε με μεταβλητές περιβάλλοντος στην Python.
Όταν δίδασκα στον εαυτό μου Python, έφτιαχνα έργα για να εφαρμόσω αυτά που μόλις είχα μάθει. Ένα υποσύνολο εκείνων που εμπλέκονται στη σύνδεση σε μια βάση δεδομένων και στην αναζήτηση της χρησιμοποιώντας Python. Αυτό σήμαινε ότι έπρεπε να αποθηκεύσω τη διαμόρφωση της βάσης δεδομένων και ευαίσθητες πληροφορίες, όπως όνομα χρήστη και κωδικό πρόσβασης για έλεγχο ταυτότητας.
Η σκληρή κωδικοποίηση τέτοιων ευαίσθητων πληροφοριών σε ένα σενάριο Python δεν ήταν καλή ιδέα. Και έμαθα πώς να χρησιμοποιώ αρχεία διαμόρφωσης και μεταβλητές περιβάλλοντος—μαζί με τις ενσωματωμένες μονάδες της Python για να δουλεύω μαζί τους.
Έτσι, κάθε φορά που χρειάζεται να χρησιμοποιήσω ευαίσθητες πληροφορίες, όπως κωδικούς πρόσβασης και κλειδιά API στις εφαρμογές μου, τις ορίζω ως μεταβλητές περιβάλλοντος και τις ανακτώ όπως απαιτείται. Σε αυτό το σεμινάριο, θα σας καθοδηγήσω σε μεταβλητές περιβάλλοντος και πώς να εργαστείτε μαζί τους στην Python.
Πίνακας περιεχομένων
Τι είναι οι μεταβλητές περιβάλλοντος;
Οι μεταβλητές περιβάλλοντος είναι μεταβλητές εξωτερικές της εφαρμογής σας που αποθηκεύουν πληροφορίες διαμόρφωσης, ρυθμίσεις συστήματος και παρόμοια. Συνήθως διαχειρίζεται το λειτουργικό σύστημα ή το περιβάλλον εφαρμογής. Τα βασικά χαρακτηριστικά των μεταβλητών περιβάλλοντος περιλαμβάνουν:
- Ζεύγη ονόματος-τιμής: Οι μεταβλητές περιβάλλοντος αποτελούνται από ένα όνομα (γνωστό και ως κλειδί) και μια αντίστοιχη τιμή.
- Εύρος συστήματος: Μπορείτε να ορίσετε μεταβλητές περιβάλλοντος σε επίπεδο συστήματος, καθιστώντας τις προσβάσιμες σε όλες τις διεργασίες που εκτελούνται στο σύστημα. Εάν χρειάζεται, μπορείτε επίσης να τα τροποποιήσετε ή να τα ορίσετε σε επίπεδο εφαρμογής, επηρεάζοντας μόνο τη συγκεκριμένη εφαρμογή.
- Dynamic and Mutable: Μπορείτε να τροποποιήσετε τις μεταβλητές περιβάλλοντος κατά τη διάρκεια του χρόνου εκτέλεσης, παρέχοντας ευελιξία.
Πώς είναι χρήσιμες οι μεταβλητές περιβάλλοντος
Οι μεταβλητές περιβάλλοντος προσφέρουν πολλά πλεονεκτήματα για τη διαχείριση της διαμόρφωσης και των ευαίσθητων πληροφοριών στις εφαρμογές Python σας:
- Διαχωρισμός ανησυχιών: Αποθηκεύοντας τη διαμόρφωση εκτός του κώδικά σας, κρατάτε τις ανησυχίες σχετικά με τη διαχείριση της διαμόρφωσης ξεχωριστά από τη λογική της εφαρμογής σας.
- Ασφάλεια: Μπορείτε να αποθηκεύσετε ευαίσθητα δεδομένα, όπως κλειδιά API και διαπιστευτήρια βάσης δεδομένων, σε μεταβλητές περιβάλλοντος—χωρίς να τις εκθέσετε στον πηγαίο κώδικα—μειώνοντας τον κίνδυνο έκθεσης.
- Ευελιξία: Με τις μεταβλητές περιβάλλοντος, η ενημέρωση των ρυθμίσεων διαμόρφωσης είναι απλή, καθώς μπορείτε να ενημερώσετε/κάνετε αλλαγές εκτός της βάσης κώδικα. Οι μεταβλητές περιβάλλοντος σάς επιτρέπουν να προσαρμόζετε τις ρυθμίσεις διαμόρφωσης χωρίς να τροποποιείτε τον κώδικά σας. Αυτή η ευελιξία είναι ιδιαίτερα χρήσιμη για την ανάπτυξη εφαρμογών σε διαφορετικά περιβάλλοντα ή κατά την ενημέρωση των διαπιστευτηρίων.
Στις επόμενες ενότητες αυτού του σεμιναρίου, θα διερευνήσουμε τον τρόπο ρύθμισης, πρόσβασης και διαχείρισης μεταβλητών περιβάλλοντος στην 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().
Αλλά η μέθοδος 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 δεν θα διατηρηθούν εκτός της εκτέλεσης αυτού του σεναρίου.
Εάν χρειάζεται να κάνετε επίμονες αλλαγές στις μεταβλητές περιβάλλοντος σε επίπεδο συστήματος, συνήθως πρέπει να το κάνετε χρησιμοποιώντας μεθόδους που σχετίζονται με το λειτουργικό σύστημα.
Πώς να φορτώσετε αρχεία .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.