2010-07-12 31 views
9

trường hợp đơn giảnCross-nền tảng giải quyết của tập tin cấu hình

tôi có một chương trình Python mà tôi có ý định hỗ trợ trên cả hai hệ thống * nix và Windows. Chương trình phải được cấu hình, ít nhất là trên toàn cầu. Có một cách đa nền tảng để giải quyết các tập tin cấu hình?

I.e. Tôi muốn viết thay vì

import platform 
if platform.system() == "Windows": 
    configFilePath = "C:\MyProgram\mainconfig.ini" 
else: 
    configFilePath = "/etc/myprogram/mainconfig.ini" 

một cái gì đó dọc theo dòng của

import configmagic 
configFile = configmagic("myprogram", "mainconfig") 


Một hơi tiên tiến hơn trường hợp

cùng có thể được áp dụng cho người sử dụng cụ thể cấu hình? I E. thế nào để giữ cấu hình trong ~user/.myprogram/ trong Unix, và trong HKEY_LOCAL_USER phần đăng ký trong Windows?

+0

Có thể có bản dupe của http://stackoverflow.com/questions/200599/whats-the-best-way-to-store-simple-user-settings-in-python và http://stackoverflow.com/questions/965694/ whats-the-official-way-of-lưu-cài đặt-cho-python-chương trình – rubenvb

+1

Cảm ơn cho tip, nhưng nó không thực sự là một dupe. Hai câu hỏi đó là về định dạng của tệp cấu hình, trong khi câu hỏi của tôi là về vị trí của nó. – dpq

+1

Không sử dụng ~/.myprogram, sử dụng XDG BaseDir Spec, xác định nơi bạn * nên * lưu trữ/đọc cấu hình của bạn. (theo mặc định, ~/.config/myprogram). – WhyNotHugo

Trả lời

4

Python sẽ cho phép forward-slash đường dẫn trên Windows, và os.path.expanduser công trình trên Windows cũng có, vì vậy bạn có thể nhận được một đường dẫn tập tin người dùng cụ thể sử dụng:

config_file = os.path.expanduser("~/foo.ini") 

nếu bạn muốn tìm một .ini trong thư mục chính của người dùng. Tôi không chắc làm cách nào để hợp nhất các cài đặt .ini và đăng ký dựa trên tệp.

+0

Tuyệt vời và có cách nào để giải quyết trường hợp đầu tiên (đường dẫn tệp cấu hình toàn cục) không? – dpq

2

Bạn có thể muốn sử dụng dirspec. Nó hoạt động trong GNU/Linux, Mac OS và Windows.

Bạn có thể lấy nó từ: Launchpad

Hoặc cài đặt nó từ PyPI

pip install dirspec 

và trong một cái gì đó sử dụng mã của bạn như:

from dirspec.basedir import get_xdg_config_home 
config_path = get_xdg_config_home() 

Nó được sử dụng bởi Ubuntu One, nhìn vào ví dụ về mã này từ tài liệu của họ: https://one.ubuntu.com/developer/data/u1db/tutorial#storing-and-retrieving-tasks

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