Kami menulis banyak aplikasi Python yang memerlukan penyesuaian melalui sifat luaran atau aplikasi yang ingin kami sesuaikan atau mempengaruhi tingkah laku dengan sifat tidak berkod keras dan/atau sifat konfigurasi masa jalan. Pelbagai carian Google untuk penyelesaian menghasilkan tutorial yang menunjukkan kita kepada sampel kod yang walaupun praktikalnya berfungsi, tetapi tidak skala yang sesuai untuk aplikasi dunia sebenar.
Set artikel ini mendokumentasikan perjalanan saya melalui pelbagai pelaksanaan sambil saya berulang kali memfaktorkan semula dan melaksanakan semula perjalanan saya ke mekanisme yang ringkas, boleh diselenggara dan mudah diperluas untuk mengurus sifat konfigurasi aplikasi.
Versi tutorial yang saya temui hanyalah pengembangan coretan kod yang disediakan oleh pembangun perpustakaan untuk membuktikan bahawa pelaksanaannya berfungsi. Walaupun ini sudah memadai untuk memberikan bukti konsep, coretan ini tidak berskala dalam dunia nyata aplikasi.
Contohnya ialah coretan kod berikut.
import configparser def create_config(): config = configparser.ConfigParser() # Add sections and key-value pairs config['General'] = { 'debug': 'True', 'log_level': 'info' } config['Database'] = { 'db_name': 'example_db', 'db_host': 'localhost', 'db_port': '5432' } with open('config.ini', 'w') as configfile: config.write(configfile) if __name__ == "__main__": create_config()
Walaupun coretan kod ini sudah tentu membolehkan kami mengekalkan nilai konfigurasi kami, ia menyebabkan kami menghadapi masalah membaca nilai berterusan ini. Sekali lagi, coretan pembangun pelaksanaan memberikan kami contoh kod tentang cara mendapatkan semula nilai ini seperti yang digambarkan dalam coretan kod berikut.
import configparser def read_config(): config = configparser.ConfigParser() config.read('config.ini') # Access values from the configuration file debug_mode = config.getboolean('General', 'debug') log_level = config.get('General', 'log_level') db_name = config.get('Database', 'db_name') db_host = config.get('Database', 'db_host') db_port = config.get('Database', 'db_port') # Return a dictionary with the retrieved values config_values = { 'debug_mode': debug_mode, 'log_level': log_level, 'db_name': db_name, 'db_host': db_host, 'db_port': db_port } return config_values if __name__ == "__main__": # Call the function to read the configuration file config_data = read_config() # Print the retrieved values print('Debug Mode', config_data['debug_mode']) print('Log Level', config_data['log_level']) print('Database Name', config_data['db_name']) print('Database Host', config_data['db_host']) print('Database Port', config_data['db_port'])
Saya melihat banyak isu dalam kod di atas. Walaupun ia boleh diterima dengan sempurna untuk skrip kecil, kod tersebut mengalami penggunaan nilai rentetan, berkaitan dengan nama pembolehubah Python sebenar dan potensi percambahannya merentasi pangkalan kod yang besar. Walaupun ini berpotensi dikurangkan oleh penggunaan pemalar global, pendapat saya ialah ini tidak boleh skala kerana ia tidak mengikut prinsip reka bentuk perisian asas yang dianuti oleh Andrew Hunt dan David Thomas, dalam buku mani mereka, The Pragmatic Programmer dan gagal DRY prinsip, aka Jangan Ulangi Sendiri.
Kod sumber untuk artikel ini ada di sini.
Lihat siaran seterusnya saya yang mendokumenkan pelaksanaan awal untuk menyelesaikan beberapa isu yang saya gariskan.
Atas ialah kandungan terperinci Ke Arah Fail Konfigurasi Python yang Mudah Versi Ø. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!