Plik konfiguracyjny

0

Pierwszy raz potrzebuje stworzyć plik konfiguracyjny który będzie zawierał ścieżki do plików, hasła, adresy IP itp. Do tej pory każdy z plików na początku skryptu miał podane wszystkie dane które potrzebował do działania. Czas to zrobić jak należy i znalazłem coś takiego jak configParser ale czy to jest to czego ja potrzebuje? Jak wy rozwiązujecie ten problem, jak powinno się to robić?

1

To python. Możesz zrobić po prostu plik .py z tymi danymi i go zaimportować ;]

0

Możesz mieć mega prosty mechanizm i konfigurację przechowywać jako skrypt pythonowy i importować tam, gdzie konfiguracja jest potrzebna.

Plik z konfiguracją (konfiguracja.py):

#!/usr/bin/evn python

MY_USER='fooo'
MY_PWD='BAR'
MY_IP='127.0.0.1'

Użycie:

#!/usr/bin/env python

from konfiguracja import MY_USER, MY_PWD

print("User={} pwd={}".format(MY_USER,MY_PWD))

Zapewne hasła nie chcesz przechowywać tekstem otwartym, więc potrzebujesz jakiegoś bezpieczniejszego mechanizmu.
O ile wiem, Python nie posiada czegoś podobnego do Java Key Store, ale może interfejsować z JKS czy Keyringiem (https://pypi.org/project/keyring/)

0

Jeżeli chcesz mieć jakiś plik konfiguracyjny, niż plik .py to możesz skorzystać z yamli, biblioteka PyYAML https://pyyaml.org/ lub jako plik konfiguracyjny użyć jsona https://docs.python.org/3/library/json.html

0

stałe parametry, których nikt poza developerami nie będzie modyfikował, albo jakieś automagicznie inicjalizowane przy uruchomieniu -> config.py i importowanie
parametry konfigurowalne -> configparser i jakiś plik config.ini

:)

0

I pamiętaj, że czasem warto haseł nie trzymać w systemie kontroli wersji. Zależy to oczywiście do czego jest to hasło itd.

0

Importowanie pliku to pierwsze co przyszło mi do głowy ale pomimo, że działa to wydało mi się za proste. Spodziewałem się bardziej wyszukanych metod :P
superdurszlak - co prawda operuję w pliku konfiguracyjnym na stałych ale rozumiem, że configparser będzie dobry gdy będę potrzebował zmienne edytować w trakcie działania skryptu?
Co do haseł to będę musiał znaleźć jakieś rozwiązanie, sprawdzę ten JKS i Keyring

0
Hsząszcz napisał(a):

Importowanie pliku to pierwsze co przyszło mi do głowy ale pomimo, że działa to wydało mi się za proste. Spodziewałem się bardziej wyszukanych metod :P

Jeśli rozwiązanie jest proste, działa i nie powoduje bólu głowy i/lub zauważalnego przyrostu WTF/minutę w czasie code review to znaczy, że jest akceptowalne :P

superdurszlak - co prawda operuję w pliku konfiguracyjnym na stałych ale rozumiem, że configparser będzie dobry gdy będę potrzebował zmienne edytować w trakcie działania skryptu?

Owszem, da się także w trakcie działania skryptu / programu modyfikować pliki konfiguracyjne i przeładować je ponownie (przykład z życia - możesz np. pozwolić adminowi przekonfigurować działanie jakichś tam konfigurowalnych bebechów aplikacji Flaskowej bez wymuszania restartu i bez trzymania lokalnej konfiguracji w bazie), ale nie tylko - przede wszystkim trzymając takie rzeczy w plikach konfiguracyjnych nie zmuszasz użytkownika do dłubania w kodzie, żeby coś skonfigurować - czego zresztą zapewne i tak byś wolał uniknąć, żeby czegoś nie skopał ;) no i jeśli spakujesz swoją aplikację do jakiejś paczki / exe / modułu / skompilujesz do bytecode to tym bardziej zmuszanie użytkownika do wydłubywania i edytowania configów trzymanych w skrypcie byłoby idiotyczne, niewygodne, szkodliwe, ogólnie big no-no

0

Odświeżam temat. Chyba jestem już zmęczony ale nie działa mi rzecz prosta. Mam plik z kodem:

import sys
sys.path.append("./Configuration/") 
import conf

a w katalogu Configuration plik conf.py. Pycharm z którego korzystam wywala mi, że nie widzi modulu conf. Jeśli podam pełną ścieżkę do katalogu ./Configuration tez nie działa...

0

A dlaczego importujesz plik w ten sposób, zamiast utworzyć w katalogu Configuration pliku __init__.py i zaimportować go po ludzku?

|- Katalog_projektu
|- Configuration
|  \
|   |- __init__.py
|   |- conf.py
|- program.py

I potem w program.py:

from Configuration import conf

tuturutu = conf.HAJDUSZOBOSZLO
0

Rewelacja, działa, dzięki :) Nie wiedziałem, że tak się da

1 użytkowników online, w tym zalogowanych: 0, gości: 1