Các phương pháp hay nhất về quản lý cấu hình Python

Khi phát triển mã, một số tham số nhất định cần được xác định với giá trị không tùy ý. Trong khi tối ưu hóa một ứng dụng, chúng thường được tinh chỉnh và điều chỉnh cho nhu cầu cụ thể. Dưới đây là 5 cách để xử lý các thông số cấu hình như vậy

Giá trị mã hóa cứng

...
input, target = split[test_ratio=0.2]
...

Mã hóa cứng một giá trị cho một tham số là cách đơn giản nhất nhưng cũng dễ xảy ra lỗi nhất để quản lý cấu hình. Nó có thể được sử dụng cho các giá trị không đổi vốn được gắn với trường hợp sử dụng cụ thể. e. g. trong trường hợp mô hình phân loại hình ảnh, tham số xác định đầu vào là hình ảnh hoặc âm thanh có thể được mã hóa cứng thành hình ảnh. Tuy nhiên không được sử dụng mã hóa cứng, nếu áp dụng một trong các trường hợp sau

  • Giá trị là bí mật [e. g. Một mật khẩu]
  • Giá trị cần được đặt nhất quán ở nhiều [nhiều] vị trí
  • Có một khả năng nhỏ nhất là giá trị có thể cần phải được thay đổi trong tương lai

hằng số

TEST_RATIO = 0.2
...
input, target = split[test_ratio=TEST_RATIO]
...

Các hằng số vẫn được xác định/mã hóa cứng trong mã nguồn. Sự khác biệt chính là các hằng số được xác định ở vị trí trung tâm, ở đầu/đầu * của bạn. py [Hằng số cục bộ] hoặc trong mô-đun Python hằng số chuyên dụng [Hằng số toàn cầu]. Bạn nên sử dụng hằng số cục bộ bất cứ khi nào giá trị của hằng số chỉ cần thiết trong mô-đun Python hiện tại;

thận trọng. Python không có khái niệm khả năng hiển thị khó thực thi [e. g. privatepublic]. Từ quan điểm của Python, hằng số có thể được thay đổi giống như mọi biến khác. Vì vậy hạn chế bản thân làm điều đó

Hằng số là cách tiếp cận ưa thích cho cấu hình hầu như không bao giờ thay đổi. Tuy nhiên nó không được sử dụng cho bí mật

Tập tin cấu hình

{
...
	"test_fraction": 0.2,
...
}

...
config = json.loads[pkgutil.get_data[__name__, "../config/" + file].decode["utf-8"]]
...
input, target = split[test_ratio=config["test_fraction"]]
...

Đối với cấu hình dễ bay hơi hơn, tệp cấu hình thường tiện dụng. Điều này đặc biệt đúng đối với cấu hình được thực hiện bởi những người không phải là nhà phát triển, chẳng hạn như nhóm vận hành. Do đó, nên sử dụng định dạng không mã hóa, e. g. Tệp .json hoặc

TEST_RATIO = 0.2
...
input, target = split[test_ratio=TEST_RATIO]
...
0. Các tệp cấu hình có thể được sử dụng để xử lý các bí mật, tuy nhiên, nó phải đảm bảo không được cam kết với git

Nói chung, các tệp cấu hình rất phổ biến trong thực hành công nghệ phần mềm, nhưng trong lịch sử gần đây, mức sử dụng giảm đi một chút

Biến môi trường

...
TEST_FRACTION = os.getenv['TEST_FRACTION']
...
input, target = split[test_ratio=TEST_FRACTION]
...

Đối với cấu hình không ổn định, các biến môi trường thường là một lựa chọn tốt. Vì các biến môi trường được quản lý ở cấp hệ điều hành [hệ điều hành], chúng là toàn cầu và phải tránh xung đột đặt tên

quản lý bí mật

Khi các kho bí mật có thể truy cập được, chúng nên được sử dụng để lưu trữ và truy cập thông tin xác thực trong một dự án. Một ví dụ về kho tiền bí mật là HashiCorp Vault. Ngoài ra, nhiều ứng dụng cung cấp các hầm bí mật được tích hợp sẵn có thể được sử dụng,

Tham số CLI

python -m  --test-fraction 0.2

import getopt
...
opts, args = getopt.getopt[argv, "t:",["test-fraction="]]
for opt, arg in opts:
    if opt in ["-t", "--test-fraction"]:
        test_fraction = int[arg]
...
input, target = split[test_ratio=test_fraction]
...

Đối với cấu hình có tính biến động cao và không có tham số CLI mặc định đôi khi là một lựa chọn tốt. Các tham số CLI không phải là một lựa chọn tốt cho các bí mật, vì các lệnh shell thường được ghi lại

Quản lý cấu hình trong môi trường phân tán

Môi trường phân tán có kích thước lớn hơn yêu cầu quản lý cấu hình trong nhiều trường hợp

Apache Zookeeper là một máy chủ nguồn mở cho phép phối hợp phân tán. Đây là một dịch vụ tập trung để duy trì thông tin cấu hình, đặt tên, cung cấp đồng bộ hóa phân tán và cung cấp dịch vụ nhóm. Tất cả các loại dịch vụ này được sử dụng dưới hình thức này hay hình thức khác bởi các ứng dụng phân tán

Cấu hình có đủ hình dạng và kích cỡ. Đôi khi các tham số cấu hình quá kỹ thuật đối với người dùng thông thường nhưng lại thú vị đối với người dùng rất cao cấp hoặc thậm chí đối với các lập trình viên trong quá trình phát triển ứng dụng. Đôi khi, các tham số cấu hình là bí mật [chẳng hạn như mật khẩu] mà bạn không muốn nhập mọi lúc. Nói chung, thông số cấu hình là những thứ có thể khác nhau giữa người dùng với người dùng nhưng hiếm khi thay đổi sau khi chúng được chọn

Python có một thư viện cấu hình tiêu chuẩn gọi là “configparser”, rất tiện lợi và mạnh mẽ, nhưng không giải quyết được nhiều vấn đề phổ biến. Vì vậy, chúng tôi bắt đầu viết thư viện của riêng mình để giúp dễ dàng thực hiện theo các phương pháp hay nhất trong cấu hình ứng dụng. Chúng tôi sẽ trình bày một số vấn đề phổ biến ở đây và giải thích cách PyConfig giải quyết chúng

từ chối trách nhiệm. Có rất nhiều gói cấu hình ứng dụng thú vị ngoài kia và chúng tôi đánh giá cao mọi đóng góp cho cộng đồng mã nguồn mở. Một số người có thể thích các gói khác hơn gói của chúng tôi tùy thuộc vào phong cách lập trình, nhu cầu và suy nghĩ của họ. Tất nhiên, PyConfig là con của chúng tôi và chúng tôi có thể thiên vị, nhưng chúng tôi sẽ cố gắng khách quan nhất có thể

Thực tiễn tốt nhất theo mặc định

Nếu bạn thực sự biết mình đang làm gì, nếu bạn kỷ luật và cẩn thận, bạn có thể làm tốt công việc chỉ bằng cách sử dụng configparser. Nhưng hãy mất cảnh giác trong một phút và có một số sai lầm mà bất kỳ ai cũng có thể mắc phải trong lĩnh vực này. PyConfig có nghĩa là biến “đúng cách” thành “cách duy nhất”. Ở những nơi không thể, chúng tôi cố gắng thực hiện “đúng cách” ít nhất là “cách tự nhiên”. Hãy để chúng tôi bắt đầu phá vỡ

Xác minh cấu hình sớm
Các ứng dụng trên điện thoại của bạn thường có màn hình menu dành riêng cho việc thay đổi “cài đặt”. Tuy nhiên, trong các ứng dụng do các lập trình viên tạo cho các lập trình viên khác hoặc cho các nhà phân tích dữ liệu hoặc làm công cụ nội bộ trong công ty, chúng tôi thường không đầu tư thời gian để tạo một màn hình như vậy và trên thực tế, các ứng dụng này thường không có bất kỳ màn hình nào. . Do đó, các tệp cấu hình chỉ được người dùng chỉnh sửa trực tiếp dưới dạng tài liệu văn bản và là nhà phát triển, chúng tôi phải sẵn sàng cho mọi thứ

Ví dụ: trong ví dụ đơn giản của chúng tôi với ứng dụng hẹn giờ, thông số “rung” phải là “có” hoặc “không”. Nhưng vì người dùng chỉ viết các tệp cấu hình của riêng họ, nên không có gì ngăn cản họ gõ từ “có thể” vào đó

Trong trường hợp cấu hình không hợp lệ, bạn luôn muốn biết về nó càng sớm càng tốt. Nếu bạn đang triển khai một dịch vụ web quan trọng, hoạt động lâu dài và thiếu mật khẩu trong tệp cấu hình, thì thường không có lỗi ngay lập tức, với thông báo lỗi rõ ràng và hữu ích cho biết mật khẩu nào bị thiếu, sau đó sửa cấu hình và khởi chạy . Điều nguy hiểm là khi dịch vụ chạy mặc dù có cấu hình không hợp lệ. Nó có thể chạy trong nhiều ngày mà không cần mật khẩu bị thiếu đó và không ai để ý, cho đến khi cuối cùng nó cần mật khẩu lần đầu tiên và gặp sự cố khủng khiếp. Đúng như Định luật Murphy, điều này luôn xảy ra vào lúc nửa đêm hoặc khi những người có thể giải quyết vấn đề đang đi nghỉ. Sáng hôm sau, bạn thức dậy với một hộp thư đầy những e-mail giận dữ từ khách hàng và một số từ sếp của bạn.

Nếu bạn sử dụng “bộ đếm thời gian” của chúng tôi ở trên để nướng bánh và thông số “tệp âm thanh” bị thiếu, trước tiên, ứng dụng sẽ đợi 25 phút cho đến khi bánh của bạn sẵn sàng và chỉ sau đó thử truy cập vào thông số bị thiếu và gặp sự cố. Thay vào đó, bạn sẽ được thông báo muộn hơn bởi máy dò khói. Mặt khác, tại Next Kraftwerke, loại sự cố không được phát hiện này trong một dịch vụ đang hoạt động lâu dài có thể khiến chúng tôi bỏ lỡ nhiều dữ liệu quan trọng, khiến chúng tôi không thể thực hiện vai trò ổn định lưới điện hoặc chỉ khiến chúng tôi tốn rất nhiều tiền

PyConfig tránh tình huống này bằng cách tự động xác thực cấu hình của ứng dụng ngay khi được tải. Tất cả. Nó sẽ kiểm tra xem mọi tham số đều có giá trị [hoặc ít nhất là giá trị mặc định] và mọi giá trị có thuộc đúng “kiểu dữ liệu” hay không [nghĩa là số, ngày, văn bản, URL, có/không, v.v. ]. Ngoài ra, các nhà phát triển có thể xác định các kiểm tra phức tạp hơn sẽ được thực hiện tự động. Nếu có vấn đề, nó sẽ được thông báo ngay khi ứng dụng khởi động


Giữ bí mật với PyConfig

Một lỗi phổ biến khác là vô tình làm rò rỉ các thông số cấu hình nhạy cảm [chẳng hạn như mật khẩu]. Trong quá trình phát triển, thông thường bao gồm các tham số cấu hình trong thông báo lỗi, để chúng tôi có thể hiểu rõ hơn về ngữ cảnh của lỗi. Một nhà phát triển ghi lại một thông báo lỗi vô tội bao gồm cấu hình của ứng dụng, một nhà phát triển khác thêm riêng một tham số cấu hình mới được cho là bí mật. và đột nhiên bạn gặp một vấn đề nghiêm trọng về bảo mật

PyConfig cung cấp một loại dữ liệu tùy chỉnh có tên là “SecretString” được tạo riêng cho tình huống này. Mọi tham số nhạy cảm phải được đánh dấu bằng loại đặc biệt này. Khi bạn in cấu hình trong một thông báo lỗi hoặc bất kỳ nhật ký nào khác, thay vào đó, PyConfig sẽ tự động ẩn các bí mật thành “*****”. Nó không chỉ giúp bạn không phải kiểm tra xem có bất kỳ bí mật nào cần che giấu hay không mà còn đảm bảo rằng những bí mật mới được thêm vào sau này cũng sẽ được che giấu một cách thích hợp

Thư viện cũng sẽ cấm bạn đặt các tham số bí mật làm giá trị mặc định [một thủ thuật không may vẫn còn phổ biến để thuận tiện trong quá trình phát triển]. Nó sẽ không chạy cho đến khi bạn loại bỏ “sự xấu hổ trong tương lai” đó khỏi mã của mình

Định dạng cấu hình tốt nhất cho Python là gì?

Cân nhắc sử dụng JSON thay vì định dạng INI . Nhìn chung, JSON là lựa chọn tốt hơn cho các tệp cấu hình Python vì nó dễ đọc hơn, dễ làm việc hơn và ít bị lỗi hơn.

Python xử lý các tệp cấu hình như thế nào?

Python có thể có các tệp cấu hình với tất cả các cài đặt mà ứng dụng cần một cách linh hoạt hoặc định kỳ. Các tệp cấu hình Python có phần mở rộng là. ban đầu. Chúng ta sẽ sử dụng Mã VS [Visual Studio Code] để tạo phương thức chính sử dụng tệp cấu hình để đọc cấu hình rồi in trên bảng điều khiển .

Cấu hình trong Python là gì?

Cấu hình Python có thể được sử dụng để xây dựng Python tùy chỉnh hoạt động như Python thông thường . Ví dụ: các biến môi trường và đối số dòng lệnh được sử dụng để định cấu hình Python. Cấu hình biệt lập có thể được sử dụng để nhúng Python vào một ứng dụng. Nó cô lập Python khỏi hệ thống.

Tại sao nên sử dụng tệp cấu hình Python?

Tệp cấu hình được sử dụng để lưu trữ các cặp giá trị khóa hoặc một số thông tin có thể định cấu hình có thể được đọc hoặc truy cập trong mã và tại một số thời điểm.

Chủ Đề