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ć?
To python. Możesz zrobić po prostu plik .py
z tymi danymi i go zaimportować ;]
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/)
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
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
:)
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.
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
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
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...
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
Rewelacja, działa, dzięki :) Nie wiedziałem, że tak się da