2012-01-11 23 views
5

Tôi muốn tự động nhập các cài đặt và cấu hình khác nhau vào chương trình python của tôi - những gì bạn thường làm với tệp .ini hoặc một cái gì đó tương tự.Sử dụng Python làm ngôn ngữ cấu hình cho chương trình Python

Tôi bắt đầu với JSON cho cú pháp tệp cấu hình, sau đó được chuyển đến YAML, nhưng thực sự tôi muốn sử dụng Python. Nó sẽ giảm thiểu số lượng định dạng và cho phép tôi sử dụng mã trong tệp cấu hình, điều này có thể thuận tiện.

tôi bị hack lên một __import__ hệ thống dựa để cho phép sử dụng mã này trông giống như:

account_config = __import__(settings.CONFIG_DIR + '.account_name', fromlist=[settings.CONFIG_DIR]) 

Nó về cơ bản hoạt động, nhưng tôi chạy vào tất cả các loại của các vấn đề bí truyền - ví dụ. nếu tôi cố gắng để nhập khẩu "thử nghiệm" nó chọn lên một số thư viện python nội bộ đó là trong con đường python thay vì thử nghiệm của tôi.

Vì vậy, tôi tự hỏi: đang sử dụng python làm ngôn ngữ cấu hình cho chương trình python khả thi hoặc tôi đang gặp sự cố? Có những ví dụ tôi có thể ăn cắp không?

+3

Dự án Django gần như chính xác điều này. Nó phổ biến. Đó là một ý tưởng hay. Chỉ cần chọn một tên tốt hơn. Thư viện có đầy đủ các tên mà bạn không thể sử dụng. Tuy nhiên, có một số lượng gần như vô hạn các tên ** không ** trong thư viện. –

+0

Cảm ơn S.Lott. Tôi chạy vào vấn đề "thử nghiệm" gần như ngay lập tức để nó làm tôi sợ - tôi lo ngại sẽ có những xung đột tên ngẫu nhiên sẽ gây ra những cơn ác mộng trong sản xuất. – Parand

+0

Chúng không phải là "ngẫu nhiên". Chúng được ghi lại trong tài liệu thư viện. –

Trả lời

6

Một cách dễ dàng là điều này.

Tệp cấu hình của bạn gán một loạt các biến toàn cầu.

CONFIG = "some string" 
ANOTHER = [ "some", "list" ] 
MORE = "another value" 

Bạn sử dụng nhập khẩu tất cả các thiết lập như thế này

settings = {} 
execfile('the_config.py', settings) 
settings['CONFIG'] == "some string" 

Bây giờ từ điển các thiết lập của bạn có tất cả các biến toàn cầu thiết lập.

+0

Nhận xét của bạn thực sự là câu trả lời tôi muốn chấp nhận; Tôi đã kết thúc với mô hình nhập khẩu ở trên. – Parand

5

đang sử dụng python làm ngôn ngữ cấu hình cho chương trình python khả thi hoặc tôi đang gặp sự cố?

Phụ thuộc; nhận ra rằng bạn đang có định dạng tệp cấu hình Turing hoàn chỉnh với giao diện OS. Điều đó có thể làm tăng các vấn đề bảo mật, vì vậy đừng làm điều này với các tệp cấu hình từ một nguồn không tin cậy.

OTOH, thiết lập này có thể là rất thuận tiện.

Có ví dụ nào tôi có thể lấy cắp không?

Django.

+0

IPython cũng thực hiện việc này. –

Các vấn đề liên quan