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... |
|
|
Scritto da BenjaBaker |
2025-07-16 09:42:35 - Re: Punto di avvio di una applicazione modulare
|
|
Scritto da latatoh640 |
2025-11-03 11:26:26 - Re: Punto di avvio di una applicazione modulare
|
|
Puoi mantenere lo spazio dei nomi del modulo eseguendo il pacchetto come modulo invece che come script, ad esempio con python -m lanmessage.starter dalla directory superiore a lanmessage, assicurandoti che contenga un __init__.py per essere riconosciuto come pacchetto.
--- Ultima modifica di ㎝ in data 2025-11-03 12:16:43 --- |
|
|
Scritto da nuzzopippo ![]() |
2025-11-03 12:11:27 - Re: Punto di avvio di una applicazione modulare
|
Intendi utilizzare lo "__init__.py" nella directory radice della applicazione per inizializzare la stessa? ... idea interessante che non mi era venuta in mente, Ti ringrazio, la testerò senz'altro
Ciao Fatti non foste a viver come bruti... |
|
|
Scritto da Daniele aka Palmux ![]() |
2025-11-03 14:47:33 - Re: Punto di avvio di una applicazione modulare
|
|
Ciao caro, ricordo molto chiaramente la lettura di un libro di Leo Giordani del quale non ricordo il nome, ma che fu propedeutico per la configurazione di alcuni progetti non proprio piccini. E' di svariati anni fa, pre-Covid, ma se lo trovi può darti qualche spunto. Ecco magari non tutto perché i tempi cambiano molto velocemente, ma c'è del bello anche in una vecchia macchina da scrivere.
Cya |
|
|
Scritto da nuzzopippo ![]() |
2025-11-03 15:43:10 - Re: Punto di avvio di una applicazione modulare
|
|
Grazie della segnalazione @Palmux, credo Tu riferisca a questo testo, purtroppo (per me) in inglese, che a quanto ho capito parla di architetture software e le affronta tramite python ... si, in sostanza credo che tratti il tipo di "nozioni" di cui avrei bisogno, il mio bagaglio culturale è carente di tali argomenti.
Guarderò un po' ciò che l'autore rende disponibile e, se mi riesce di acquisire qualcosa di utile, cercherò di acquistarlo anche se temo che dovrò scrivermi un "traduttore offline" per poterlo utilizzare (non sono anglofono ... i "ndo' vai" me li do spesso da solo) Edit: od anche questo, più specifico per l'argomento?, probabimente, ed anche questo in inglese --- Ultima modifica di nuzzopippo in data 2025-11-03 15:53:03 --- Fatti non foste a viver come bruti... |
|
|
Scritto da Daniele aka Palmux ![]() |
2025-11-03 17:55:09 - Re: Punto di avvio di una applicazione modulare
|
Bravo era quello che avevo letto a suo tempo, 2018... cavolo come vola il tempo.
Questo non lo conosco. Cya |
Pagina: 1
Esegui il login per scrivere una risposta.


