Forum
>>
Programmazione Python
>>
Scripting
>>
Punto di avvio di una applicazione modulare
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da nuzzopippo ![]() |
2024-06-26 11:00:17 - Punto di avvio di una applicazione modulare
|
I miei saluti
Nel corso del tempo ho preso l'abitudine di strutturare le mie applicazioni secondo una struttura da "modulo standard", articolata in sub-moduli specializzati per tipologia d'uso, giusto per esempio segue l'articolazione di una cosetta correntemente in saltuaria implementazione NzP:~$ tree . ├── lanmessage │ ├── gui │ │ ├── confgui.py │ │ ├── groupgui.py │ │ ├── __inity__.py │ │ ├── login.py │ │ ├── messagesgui.py │ │ ├── panels.py │ │ ├── pwdchanger.py │ │ └── winmain.py │ ├── __init__.py │ ├── starter.py │ ├── utility │ │ ├── __init__.py │ │ └── utility.py │ └── work │ ├── data_manager.py │ ├── __init__.py │ ├── linux_manager.py │ ├── notifiers.py │ └── windows_manager.py └── start.py 4 directories, 18 files NzP:~$Tale tipo di implementazione da alcune "complicazioni" nello spazio dei nomi che malgrado abbia letto un po' di documentazione ed alcune PEP (tra cui la 420, che ho deciso di non utilizzare) non mi riesce di superare, probabilmente per mia incapacità di comprensione, confesso che spazio dei nomi ed uso dei files "__init__.py" mi confonde un po'. Dette complicazioni, essenzialmente, corrispondono alla circostanza che se utilizzo, per l'avvio della applicazione, un file interno alla struttura del pacchetto, l'assegnazione del "__main__" quale "nome" fa perdere allo stesso modulo lo spazio dei nomi del "pacchetto" ... mi spiego: supposto un file di inizializzazione (lanmessage.starter.py) della applicazione così composto: # -*- coding: utf-8 -*- # imports da libreria base import os # imports da virtual environment import appdirs # import locali from lanmessage.gui.winmain import WinMain def def_dirs() -> dict: ''' Definisce le directory da utilizzarsi nella applicazione. Nella eventualità non esistano, le crea. ''' app_name = 'lan_message' app_author = 'nuzzopippo' app_dirs = {} app_dirs['data'] = appdirs.user_data_dir(app_name, app_author) app_dirs['cache'] = appdirs.user_cache_dir(app_name, app_author) app_dirs['log'] = appdirs.user_log_dir(app_name, app_author) app_dirs['state'] = appdirs.user_state_dir(app_name, app_author) app_dirs['config'] = appdirs.user_config_dir(app_name, app_author) try: for key in app_dirs.keys(): if not os.path.exists(app_dirskey) or not os.path.isdir(app_dirskey): os.makedirs(app_dirskey) except OSError as e: print(repr(e)) exit(1) return app_dirs def go() -> None: app_dirs = def_dirs() win = WinMain(app_dirs) win.mainloop() if __name__ == '__main__': go()Eseguendolo direttamente viene perso lo spazio dei nomi del modulo NzP:~$ source /home/nuzzopippo/venvs/tests_v/bin/activate (tests_v) NzP:~$ /home/nuzzopippo/venvs/tests_v/bin/python3.10 /home/nuzzopippo/ src/my_work/LanMessage/src/lanmessage/starter.py Traceback (most recent call last): File "/home/nuzzopippo/src/my_work/LanMessage/src/lanmessage/starter.py", line 8, in <module> from lanmessage.gui.winmain import WinMain ModuleNotFoundError: No module named '\lanmessage' (tests_v) NzP:~$A ciò ovvio implementando un semplice punto di avvio (start.py) al di fuori del pacchetto applicativo, nrl caso in specie è così fatto: # -*- coding: utf-8 -*- from lanmessage import starter ''' TODO DIRAMAZIONI X NOTIFICHE : Per Linux : Studiare ed implementare notify2 - python-dbus Per Windows : Studiare ed implementare Windows-Toasts ''' starter.go()Ora, tal modo di procedere, seppur funzionante non mi sembra "giusto", ogni tanto mi pongo il problema ma, come detto, non mi è riuscito, al momento, di trovare modalità altre ... la domanda è : è possibile utilizzare lanmessage.starter.py quale punto di avvio della applicazione conservando lo spazio dei nomi del modulo? Se si, come si può fare? Grazie dell'attenzione Fatti non foste a viver come bruti... |
Pagina: 1
Esegui il login per scrivere una risposta.