Chuyển đến nội dung chính

Biến môi trường trong Python: Những điều bạn cần biết

Tìm hiểu tường tận cách quản lý biến môi trường Python với các thư viện os và python-dotenv.
Đã cập nhật 5 thg 10, 2026  · 9 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Biến môi trường là cơ chế mạnh mẽ để lưu trữ cấu hình dự án phát triển của bạn một cách linh hoạt và an toàn. Chúng lưu các cặp khóa-giá trị có thể được ngôn ngữ lập trình như Python truy cập và giữ thông tin đó tránh xa con mắt tò mò. Trong hướng dẫn này, bạn sẽ học những khái niệm và kỹ thuật cần biết để tạo và quản lý biến môi trường trong Python.

Biến môi trường là gì?

Biến môi trường là các cặp tên-giá trị được lưu trữ an toàn ở đâu đó trong hệ điều hành của bạn. Thông thường, chúng trông như thế này:

API_KEY=1akn4nka-aqwej3

Trong Python, bạn có thể dùng những biến như vậy để lưu thông tin nhạy cảm liên quan đến dự án phát triển của mình. Thông tin nhạy cảm có thể là:

  • Khóa API để truy cập ứng dụng của người khác
  • Tên người dùng và mật khẩu để đăng nhập ứng dụng qua script
  • Thông tin xác thực cơ sở dữ liệu
  • bất kỳ thứ gì có thể gây rủi ro bảo mật nếu vô tình bị lộ.

Ví dụ, nếu bạn viết một script Python sử dụng công khai thông tin xác thực AWS và vô tình commit script đó lên GitHub, có khả năng kẻ xấu phát hiện ra và làm hóa đơn AWS của bạn tăng vọt (điều này đã từng xảy ra).

Một lợi ích khác của biến môi trường là khả năng cấu hình. Bạn có thể dễ dàng điều chỉnh các cài đặt (URL cơ sở dữ liệu, đường dẫn tệp) bằng cách sửa biến môi trường mà không cần thay đổi mã. Tính năng này đặc biệt hữu ích nếu bạn dùng cùng một cài đặt ở nhiều phần trong dự án.

Vậy hãy cùng học cách làm việc với chúng trong Python.

Cách truy xuất biến môi trường bằng mô-đun os của Python

Để truy xuất các biến môi trường hiện có trong hệ thống, bạn có thể dùng mô-đun os. Nó có hàm .getenv để lấy biến:

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

Ở trên, tôi đang lấy tên người dùng hệ thống, vốn có sẵn trên mọi hệ thống. Còn nhiều biến khác như đường dẫn thư mục home:

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

Hoặc đường dẫn đến trình thực thi Conda của bạn:

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

Vì vậy, khi bạn chạy các lệnh conda, đó là cách terminal biết nên chạy ứng dụng nào.

Nhưng điều gì xảy ra nếu bạn cố lấy một biến không tồn tại:

os.getenv("MYDATABASE")

Hàm .getenv() không trả về gì, nhưng chúng ta có thể thay đổi hành vi đó. Bạn có thể dùng tham số default của nó để trả về giá trị tùy chỉnh nếu biến không tồn tại:

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

Hàm .getenv() là phương pháp tốt nhất để truy xuất các biến hiện có.

Tuy vậy, ở những nguồn khác, bạn có thể thấy các cách khác như thuộc tính .environ, thuộc tính này trả về một từ điển chứa tất cả biến môi trường:

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

Vì nó là một từ điển, bạn có thể dùng cú pháp ngoặc vuông (không khuyến nghị) hoặc hàm .get() để lấy giá trị.

os cũng có quyền truy cập tới có lẽ biến hệ thống quan trọng nhất gọi là PATH. PATH chứa các đường dẫn tuyệt đối đến tất cả các trình thực thi được cài trên hệ thống của bạn, nên nó khá dài:

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

Mỗi đường dẫn trong PATH được phân tách bằng dấu hai chấm. Hãy đếm độ dài của PATH trên hệ thống của tôi:

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

   return len(items)

count_path_items()
79

79! Không tệ.

Sử dụng thư viện python-dotenv để quản lý biến môi trường trong Python hiệu quả

Thiết lập biến môi trường tùy chỉnh

Bây giờ chúng ta đã biết cách trích xuất các biến hiện có, hãy xem cách đặt các biến tùy chỉnh. Cách đầu tiên là dùng từ điển os.environ:

# Tạo một biến môi trường mới
os.environ["NEW_VARIABLE"] = "42"  # Luôn yêu cầu giá trị kiểu chuỗi

os.getenv("NEW_VARIABLE")
'42'

Tuy nhiên, cách này không hữu ích lắm vì tất cả biến mới sẽ mất khi phiên làm việc hiện tại kết thúc.

May mắn là có một cách lưu trữ biến môi trường bền vững hơn bằng cách sử dụng tệp .env (đọc là dot-env). Các tệp này có cùng cú pháp, nghĩa là chúng sẽ hoạt động trên mọi hệ điều hành. Đây là ví dụ một tệp .env:

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

Hiện tại, nó chỉ định nghĩa ba biến. Để đọc tệp này và trích xuất nội dung, chúng ta sẽ dùng một thư viện gọi là python-dotenv:

$ pip install python-dotenv

Sau đó, trong một script Python hoặc Jupyter Notebook, chúng ta sẽ import hàm load_dotenv và gọi nó:

from dotenv import load_dotenv

load_dotenv()
True

Nếu không tìm thấy tệp .env trong thư mục hiện tại, nó sẽ tìm trong tất cả thư mục cha và trả về True nếu tìm thấy.

Tôi đã lưu tệp .env ở thư mục home của mình ~/.env; đó là lý do load_dotenv có thể tìm thấy nó.

Để tự tạo tệp, bạn có thể dùng lệnh touch trong terminal hoặc một trình soạn thảo như VSCode:

$ touch ~/.env

Cú pháp của tệp .env khá linh hoạt. Ví dụ, bạn có thể đặt biến với giá trị nhiều dòng (phải có dấu ngoặc kép):

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

Dùng ký tự thoát:

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

Bạn cũng có thể thêm chú thích vào tệp để tham khảo sau này:

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

Bạn cũng có thể dùng giá trị của một biến bên trong biến khác bằng cú pháp ${VAR_NAME}:

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

Truy xuất biến môi trường tùy chỉnh với python-dotenv

Truy xuất biến tùy chỉnh cũng giống như trước đây - chỉ cần dùng mô-đun os:

import os

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

Hãy đảm bảo bạn gọi load_dotenv trước.

Nếu tệp .env của bạn nằm ở nơi mà load_dotenv không thể truy cập, bạn có thể truyền đường dẫn trực tiếp như dưới đây:

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

Làm việc với tệp .env trong Jupyter

Khi đã cài đặt Python-dotenv, bạn không cần import nó vào Python nếu đang dùng Jupyter. Thư viện đi kèm một magic method của Jupyter tự động tải nó:

# Chạy ở bất kỳ đâu trong notebook để tải EV từ .env
%load_ext dotenv
%dotenv

Sau đó, bạn có thể lại dùng mô-đun os:

import os

os.getenv("SNOWFLAKE_USERNAME")
'bexgboost'

Thực hành tốt nhất khi dùng biến môi trường trong Python

Trong phần này, chúng ta sẽ liệt kê một số thực hành tốt nhất để đảm bảo biến môi trường an toàn và sử dụng hiệu quả.

1. Luôn thêm tệp .env vào .gitignore để bạn không vô tình commit chúng lên GitHub.

# Tạo .gitignore nếu chưa tồn tại
$ touch .gitignore
$ echo ".env" >> .gitignore

2. Khi định nghĩa biến, hãy dùng tên mô tả, viết HOA toàn bộ.

# Tốt
DEBUG=True
LOGGING_VERBOSITY=3

# Không tốt
debug=True
LV=3

3. Tạo một tệp .env duy nhất để lưu các biến dùng trên toàn hệ thống mà bạn cần trong mọi dự án.

$ touch ~/.env

4. Kiểm soát phạm vi các tệp .env của bạn. Tạo các tệp riêng cho những phần khác nhau trong quy trình phát triển như dưới đây:

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

Hàm load_dotenv sẽ nhận diện chúng.

Nếu bạn tạo nhiều tệp .env với tên khác nhau, hãy thay đổi tệp .gitignore để tất cả đều bị loại khỏi lập chỉ mục của git:

# Chú ý dấu hoa thị *
$ echo ".env*" >> .gitignore

Kết luận

Trong bài viết này, chúng ta đã học tất cả khái niệm và kỹ thuật thiết yếu để quản lý hiệu quả biến môi trường trong Python. Chúng ta đã khám phá cách truy xuất các biến hiện có với mô-đun OS của Python và cách tạo giá trị tùy chỉnh với thư viện python-dotenv. Chúng ta cũng đã học cách viết tệp .env tuân theo các thực hành tốt nhất.

Nếu bạn muốn tìm hiểu thêm về kỹ nghệ phần mềm trong Python, hãy xem khóa học Software Engineering Principles in Python của chúng tôi.

Bạn cũng có thể xem Lộ trình Kỹ năng Lập trình Python, lộ trình này sẽ đưa bạn từ người mới bắt đầu đến Pythonista nâng cao với các bài tập và dự án thực hành.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Tôi là người sáng tạo nội dung về khoa học dữ liệu với hơn 2 năm kinh nghiệm và là một trong những tài khoản có lượng người theo dõi lớn nhất trên Medium. Tôi thích viết các bài chuyên sâu về AI và ML với chút giọng điệu mỉa mai, vì bạn cũng phải làm gì đó để chúng bớt khô khan. Tôi đã xuất bản hơn 130 bài viết và một khóa học trên DataCamp, cùng với một khóa nữa đang được thực hiện. Nội dung của tôi đã được hơn 5 triệu lượt xem, trong đó 20 nghìn người đã trở thành người theo dõi trên cả Medium và LinkedIn. 

Chủ đề
Python

Tiếp tục hành trình Python của bạn ngay hôm nay!

Khóa học

Nguyên tắc Kỹ thuật Phần mềm với Python

4 giờ
71K
Tìm hiểu về tính mô-đun, tài liệu hóa và kiểm thử tự động để giải quyết các vấn đề Khoa học dữ liệu nhanh chóng và đáng tin cậy hơn.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm