Rehber - Yapılandırma dosyası Nasıl Yazılır?

Fivem.com.tr

Fivem.com.tr
Katılım
1 Eki 2022
Mesajlar
5,891
Tepki
80
PYTHON YAPILANDIRMA DOSYASI NASIL YAZILIR?



DİSCORD ADRESİM SLEEP?#4478



Herhangi bir yapılandırma dosyası yazmadan önce, neden harici bir dosyaya ihtiyacımız olduğunu kendimize sormalıyız. Bunları kodda sabit yapamaz mıyız? Aslında ünlü bu soruyu bizim için cevapladı:




Bir uygulamanın tüm yapılandırmasının koddan doğru bir şekilde çıkarılıp çıkarılmadığına dair bir turnusol testi, kod tabanının herhangi bir kimlik bilgisinden ödün vermeden herhangi bir anda açık kaynak yapılıp yapılamayacağıdır. “Yapılandırma” Bu tanım olmadığını Not değil iç uygulama gibi yapılandırma içerir config/routes.rbRails, ya da nasıl içinde . Bu tür bir yapılandırma, dağıtımlar arasında değişiklik göstermez ve bu nedenle en iyi şekilde kodda yapılır.

nedeniyle , yapılandırma dosyasında kod enjeksiyonunu önlemek yaml.safe_load()yerine kullanılması önerilir yaml.load().



Doğrulama

Her iki paket de var olmayan bir dosya için FileNotFoundError oluşturacaktır. YAML, YAML olmayan bir dosya ve geçersiz bir YAML dosyası için farklı istisnalar atarken, JSON JSONDecoderErrorher iki hatayı da atar .





Seçenek2: Cofigureparser - Python yerleşik paketi

Bundan sonra, konfigürasyon yönetimi için tasarlanmış paketleri tanıtacağım. Python yerleşik ile paketin Biz başlatın: .

Configureparser, öncelikle INI dosyalarını okumak ve yazmak için kullanılır, ancak aynı zamanda bir girdi olarak sözlüğü ve yinelenebilir dosya nesnesini de destekler. Her INI dosyası, birden çok anahtar, değer çiftinin bulunduğu birden çok bölümden oluşur. Alanlara erişimin bir örneği aşağıda verilmiştir.

Okuyun



Configureparser, yapılandırma dosyasındaki veri türlerini tahmin etmez, bu nedenle her yapılandırma bir dize olarak saklanır. Ancak dizeyi doğru veri türüne dönüştürmek için birkaç yöntem sağlar. En ilginç olanı Boolean tipidir çünkü Boolean değerlerini den tanıyabilir .

Daha önce de belirtildiği gibi, kullanarak bir sözlükten read_dict()veya kullanan bir dizeden read_string()veya kullanarak yinelenebilir bir dosya nesnesi okuyabilir read_file().



Doğrulama

Configureparser'ın doğrulanması YAML ve JSON kadar kolay değildir. İlk olarak, dosya yoksa bir FileNotFoundError oluşturmaz, bunun yerine, bir anahtara erişmeye çalıştığında bir KeyError oluşturur.

Ayrıca, paket girinti hatasını "yok sayar". Aşağıdaki örnekte olduğu gibi, "DEBUG" dan önce fazladan bir sekmeniz veya boşluk varsa, hem ÇEVRE hem de DEBUG için yanlış bir değer alırsınız.

Yine de, Configureparser birden çok hata için ParserError döndürebilir (son test senaryosuna bakın). Bu, sorunları tek seferde çözmemize yardımcı olur.





Seçenek3: python-dotenv - Yapılandırmaları ortam değişkenleri olarak yapın

Şimdi üçüncü taraf kitaplıklara geçiyoruz. Şimdiye kadar, aslında bir tür yapılandırma dosyasını kaçırdım .env. .envDosya içindeki değişkenler, tarafından ortam değişkenleri olarak yüklenecek ve bunlara erişilebilecektir os.getenv.

Bir .envdosya temelde buna benzer. Varsayılan yol, projenizin kök klasörüdür.

ORTAM = test

DEBUG = doğru

KULLANICIADI = xiaoxu

ŞİFRE = xiaoxu

HOST = 127.0.0.1

PORT = 5432

Okuyun

Kullanımı son derece kolaydır. Parametre ile ortamdaki mevcut değişkeni geçersiz kılmak isteyip istemediğinize karar verebilirsiniz override.



Doğrulama

Ancak, dosyayı python-dotenvdoğrulamaz .env. Bunun .envgibi bir dosyanız varsa ve DEBUG'a erişmek istiyorsanız, dönüş olarak istisnasız olarak Hiçbiri alacaksınız.

# .Env

ÇEVRE = test

DEBUG# load.py

load_dotenv ()

print (os.environ.keys () 'de' DEBUG ')

# False



Seçenek4: Dynaconf - Python için güçlü ayar yapılandırması

, çoklu dosya formatlarını destekleyen Python için çok güçlü bir ayar yapılandırmasıdır: yaml, json, ini, toml ve python. .envDosyayı otomatik olarak yükleyebilir ve özel doğrulama kurallarını destekler. Kısacası, önceki 3 seçenekten hemen hemen tüm işlevleri kapsar ve hatta bunun ötesine geçer. Örneğin, şifrelenmiş bir parola saklayabilir ve parolanın şifresini çözmek için kullanabilirsiniz. Ayrıca Flask, Django ve Pytest ile güzel bir şekilde entegre edilmiştir. Bu makaledeki tüm işlevlerden bahsetmeyeceğim, daha fazla ayrıntı için lütfen bakın .

Okuyun



2595-efdc575bc371946749126e3cbfe5c341.jpg





Dynaconf, .envtüm ayarlar dosyasını bulmak ve settingsnesneyi alanlarla doldurmak için kullanır . 2 ayar dosyası aynı değişkene sahipse, değer en son ayarlar dosyası tarafından geçersiz kılınır.



Doğrulama

Benim için ilginç özelliklerden biri de özel . Daha önce de belirtildiği gibi, Configureparser INI dosyasını yeterince doğrulamaz, ancak bu dynaconf içinde sağlanabilir. Bu örnekte, dosyada belirli anahtarların olup olmadığını ve belirli anahtarların doğru değere sahip olup olmadığını kontrol ediyorum. Çoklu veri tiplerini destekleyen YAML veya TOML dosyasından okursanız, bir sayının belirli bir aralıkta olup olmadığını bile kontrol edebilirsiniz.



Pytest ile entegrasyon

Bir başka ilginç özellik de pytest ile entegrasyon. Ünite testi ayarları normalde diğer ortamlardan farklıdır. Sen kullanabilirsiniz FORCE_ENV_FOR_DYNACONFuygulama ayarlarınız dosyasında farklı bir bölüm okuyalım veya kullanmak üzere monkeypatchayarlar dosyasında bir speific anahtar ve değer çiftini değiştirin.



Çalışma zamanı sırasında yapılandırmayı yenileyin

Dynaconf ayrıca reload()tüm yükleyicileri temizleyen ve çalıştıran destekler . Bu, uygulamanın çalışma süresi sırasında ayarlar dosyasını yeniden yüklemesini istiyorsanız yararlıdır. Örneğin, uygulama, yapılandırma dosyası açıldığında ve değiştirildiğinde ayarları otomatik olarak yeniden yüklemelidir.



Seçenek5: Hydra - Dinamik olarak hiyerarşik bir konfigürasyon oluşturarak geliştirmeyi basitleştirin

Son seçenek, bir dosya yükleyiciden çok daha fazlasıdır. , karmaşık uygulamaları zarif bir şekilde yapılandırmak için Facebook tarafından geliştirilmiş bir çerçevedir.

Hydra, yapılandırma dosyalarını okumanın, yazmanın ve doğrulamanın yanı sıra, çoklu yapılandırma dosyalarının yönetimini basitleştirmek, komut satırı arabirimi aracılığıyla geçersiz kılmak, her çalışmanın anlık görüntüsünü oluşturmak vb. İçin bir strateji geliştirir.

Okuyun

İşte hidranın temel kullanımı. +APP.NAMEyapılandırmaya yeni bir alan eklemek veya APP.NAME=hydra1.1mevcut bir alanı geçersiz kılmak anlamına gelir .



Doğrulama

Hydra, tür denetimi ve salt okunur alanlar gibi temel doğrulamaları gerçekleştirmek için @dataclass ile güzel bir şekilde entegre olur. Ancak, __post_init__ anlatıldığı gibi gelişmiş değer kontrolü yöntemini desteklemiyor .



Yapılandırma grubu

Hydra, adı verilen bir kavram sunar . Fikir, yapılandırmaları aynı türden gruplamak ve yürütme sırasında bunlardan birini seçmektir. Örneğin, Postgres için bir yapılandırmaya ve MySQL için başka bir yapılandırmaya sahip bir grup "veritabanınız" olabilir.

Daha karmaşık hale geldiğinde, programınızda buna benzer bir düzen olabilir (Hydra belgelerinden bir örnek)



ve karşılaştırmaya farklı kombinasyonları ile başvurunuzu istiyorum db, schemave uio zaman çalıştırabilir:

python my_app.py db = postgresql schema = school.yaml

Daha …

Hydra destekleyen ile --multirunfarklı yapılandırma dosyaları ile aynı anda birden fazla işi çalıştırır. Örneğin, önceki örnek için şunu çalıştırabiliriz:

python my_app.py schema = depo, destek, okul db = mysql, postgresql -m

Ardından temelde aynı anda 6 işe başlarsınız

[2019-10-01 14: 44: 16,254] - Yerel olarak 6 iş başlatılıyor

[2019-10-01 14: 44: 16,254] - Süpürme çıktısı dir: multirun / 2019-10-01 / 14-44-16

[2019- 10-01 14: 44: 16,254] - # 0: şema = depo db = mysql

[2019-10-01 14: 44: 16,321] - # 1: şema = depo db = postgresql

[2019-10-01 14:44 : 16,390] - # 2: şema = destek db = mysql

[2019-10-01 14: 44: 16,458] - # 3: şema = destek db = postgresql

[2019-10-01 14: 44: 16,527] - # 4 : şema = okul db = mysql

[2019-10-01 14: 44: 16,602] - # 5: şema = okul db = postgresql



EKSTRA;



Yazılım Geliştirici Neden BLOG TUTMALIDIR



Yazılım geliştiren kimseler oldukça fazla teknik bilgiye sahip, çok karmaşık sistemleri öğrenmiş çoğunluğu mühendis kişilerdir. Blog tutmak biz yazılım geliştiricilere iş başvuruları sırasında önemli bir referanstır. Bir insan hem kendini geliştiriyor hem işini yapıyor hemde bunu insanlarla paylaşıyorsa gerçekten bu durum dikkate değerdir. Diğer bir açıdan; blog tutan yazılım geliştirici diğer insanlara faydalı olur, sonuçta hepimiz teknik blogları takip ederek, kitap okuyarak, açık kaynak projeleri inceleyerek kendimizi ilerletiyoruz ve tüm bu değerleri üreten insanlara vefa borcumuz var.



İş fırsatları, üzerinde önemle durulması gereken bir nokta. Benim birkaç tanıdığım blog tutmaları sayesinde yabancı şirketler tarafından keşfedilip iş teklifleri aldılar. Şuan birisi Sony Avrupa’da önemli bir noktada çalışıyor, bir diğeri Mountain View, California’da Mozilla’da çalışıyor. Örnekleri çok. Tabi ki bu arkaşlar İngilizce blog tutuyorlardı. Neden İngilizce bu kadar önemli, bu bir sonraki yazının konusu ama eğer bütün dünyaya hitap etmek istiyorsanız İngilizce yazmalısınız.



Düşünün, Dubai’li bir şirket. Nasıl Türkiye’de işinde çok iyi bir mühendis olduğunu keşfeder ve ona iş teklifi yaparak transfer etmeye çalışır ? Tabi ki aynı dili konuşurlarsa. İngilizce iş dünyasının ortak dili olarak tam da bu işi yapar, size prestij kazandırır.



Blog tutmak bilgilerinizin taze kalması ve tekrar yapmanız açısından önemlidir. Hatta hiç bilmediğiniz bir dili veya frameworkü öğrenip sonra bununla ilgili blog yazmanın size büyük katkısı olacaktır.



Neden İngilizce blog tutmak daha iyidir ?



Çünkü Türkiye’de belli bir sayıda geliştirici var ama dünyada milyonlarca geliştirici var. Türkiye’deki teknoloji şirketlerinin yüzlerce kat daha büyükleri diğer ülkelerde çalışıyorlar. Örneğin Yook Mook Kim tarafından tutulan İngilizce Java blogu(mkyong.com) 2015’de 1.5 milyon ziyaret almış. Bir gün Ankara Üniversitesi’nde Richard Stallman ile sohbet etme fırsatı buldum, kendisine çok yazarlı Türkçe bir özgür yazılım blogu projem olduğunu ilettim. Bana cevabı aynen şuydu; “Yazılım geliştiriciler zaten İngilizce biliyorlar, bilmek zorundalar, Türkçe olması için bir sebep yok.”. Evet, o gün Türkiye’de gerçekten iyi İngilizce bilen yazılımcı oranını kendisiyle paylaşmaya utanmıştım. Keza bizim halen Türkçe mühendislik eğitimi veren üniversitelerimiz olduğu gerçeğini de.



Eğer imkanınız varsa iki dilli blog tutmak en güzelidir. İyi günler!


Her düştüğünde, yerden bir şeyi kaldır. -Oswald Avery

Konu alıntıdır, yanlış veya hatalı bir bilgi/paylaşım var ise yanıtlayabilir veya bizimle iletişime geçebilirsiniz.
 

Şu anda bu konu'yu okuyan kullanıcılar

Benzer konular

Üst