Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - RicPol

Pagine: [1] 2 3 ... 233
1
Altri linguaggi / Re:PHP
« il: Agosto 10, 2020, 17:22 »
Ma... in tutto questo, ricordare che siamo su un forum Python può essere utile?  :confused:
Forse l'OP si è confuso con il titolo di questa sezione "altri linguaggi"... ma in realtà vuol dire "interfacciare python ad altri linguaggi", come si deduce anche dall'elenco dei messaggi precedenti.
Per quanto riaguarda il tema, questo è un aspetto di base del modello di esecuzione di php... credo che l'op dovrebbe partire da un buon tutorial generale (meglio ancora, da un buon libro). Dopo di che... non sono sicuro di capire... l'OP è interessato a fare... un forum?! In php?!? Cioè, non mi si fraintenda, se è per ragioni didattiche va benissimo (anche se mi sembra un po' difficile), ma se è per ragioni pratiche... voglio dire, php ha una tradizione di motori per forum *mostruosa*, che praticamente nessun altro linguggio di programmazione può vantare. Ci sono decine di forum scritti in php.
Tanto per dire... QUESTO forum è scritto in php (ehm... cough cough...). Perché semplicemente non esistono soluzioni in python altrettanto performanti e comode da installare e usare come SMF e compagnia.

2
Programmazione in rete - web / Re:Python su Sito web
« il: Agosto 08, 2020, 22:43 »
Forse sarai sorpreso di sapere che "web" e "sito web" sono dei concetti talmente vaghi da essere in pratica inesistenti.
Se quello che vuoi fare è semplice "remote execution" del tuo programma, oggi esistono diverse soluzioni di "platform as a service" che ti consentono di fare questo, per esempio vedi AWS lambda.
Se il tuo programma è un servizio, e vuoi metterci davanti una web api (magari rest) per interrogarlo, allora puoi usare per esempio un microframework come Flask per organizzare la meccanica delle request/response. Se il tuo programma prevede un'interazione più ricca, magari con dei form, e comunque si giova di una interfaccia più ricca "da sito", allora forse puoi usare un web framework come Django, se hai bisogno di qualcosa in più rispetto a request/response (ma anche Flask ne fa un sacco, di cose). Ovviamente se poi quello che ti interessa è il lato client (nel browser), allora python non c'entra più e avrai bisogno di un framework javascript per il frontend, come Vue, Angular o che so io. Ovviamente poi il frontend può essere integrato da un backend scritto in Django.
Il problema "posso metterlo su Aruba", poi, è completamente diverso e non c'entra niente con tutto questo. Sì, puoi mettere qualsiasi cosa "su Aruba", se vuoi. Un computer che ospita "il sito web del panettiere", è proprio esattamente questo: un computer. Se quello che chiedi al tuo provider è una macchina (virtuale, con ogni probabilità... ma a te non interessa) "pulita", dentro ci puoi mettere quello che vuoi. Ci installi sopra Linux, ci installi sopra Ngix o Apache o quel che vuoi, ci installi sopra Python, ci installi Django, ci installi il tuo programma, e fai funzionare il tutto. Puoi farlo anche con Aruba, ci mancherebbe. Ovviamente questo vuol dire avere una discreta quantità di competenze da sysadmin, e... certo, non è proprio come fare "il sito con wordpress". In realtà ben pochi fanno così, comunque. In genere si preferisce rivolgersi a platform-as-a-service già predisposte e orientate... Nel mondo Python sono molto comuni Heroku e Pythonanywhere, ma ovviamente anche i servizi di AWS e di Azure hanno un sacco di soluzioni abbastanza semplici da usare.

3
Tkinter / Re:PILLOW, ImageTk
« il: Agosto 03, 2020, 12:43 »
Uhm... beh attenzione però. Questo non è un problema di Tkinter e/o di Pillow... anzi direi che è una cosa *giusta* che fa PIllow. Se definisci un nome in una funzione, quel nome sparisce fuori dallo scope della funzione. Se a quel nome c'è "attaccato" qualcosa che ti serve, quel qualcosa sparisce e basta (i dettagli sono complessi, ma poco importa). Non è soltanto un'immagine, avresti lo stesso "problema" con un file aperto, per dire.

Questo è un "problema" che avresti con Kivy o con qualunque cosa puoi inventarti. Dipende dallo scoping dei nomi, ed è uno degli aspetti più di base in Python. Il problema si risolve usando le classi, che sia Pillow, Tkinter, Kivy o quel che vuoi.

Povero Tkinter, con tutti i suoi guai, anche questa croce addosso non gliela butterei proprio...

4
Usare Flask?

5
wxPython / Re:Installare wxPython in un venv sotto Linux
« il: Luglio 24, 2020, 22:19 »
uhm, sì... "quella pagina" è un inferno di complicazione. E' da un po' di tempo che vorrei seriamente capire come funziona il build di wxPython su linux, ma onestamente è molto sconfortante... Windows è così semplice!
Detto ciò, in primo luogo, davvero non trovi una wheel precompilata per il tuo linux? https://extras.wxpython.org/wxPython4/extras/linux/
In secondo luogo, quella pagina consiglia di costruire un wheel con Pip a partire dal sorgente... La chiave dovrebbe essere "pip wheel -v wxPython-4.0.1.tar.gz" (vedi lo "step 4").

Detto ciò, guarda che installare un pacchetto con "pip", dentro un venv... non è proprio detto che trovi il "pip" che vuoi tu! Puoi verificare con "which pip" per vedere se stai usando il pip giusto... e in ogni caso ti consiglio invece di passare da "python -m pip install ..." per essere più sicuro.


6
ForumPython.it cafè / SIamo tornati!
« il: Luglio 21, 2020, 10:35 »
Evviva evviva, siamo tornati!
Grazie Antonio !

7
Programmazione in rete - web / Re:Script per switch CISCO
« il: Giugno 26, 2020, 22:45 »
Il problema è che la documentazione dovrebbe essere in effetti proprio *letta*.... non basta "fare riferimento (eufemismo...) agli script di esempio".

Per esempio, quando trovi un errore, puoi andarti a leggere che cosa vuol dire quell'errore.
http://docs.paramiko.org/en/stable/api/ssh_exception.html#paramiko.ssh_exception.BadAuthenticationType

Ora, non so che cosa vuol dire questo nel tuo contesto, ma è una informazione che se fossi in te proverei ad approfondire. Considerando anche che il messaggio di errore aggiunge poi "allowed types: ['publickey']", che mi sembra un'altra indicazione per lo meno... interessante...

Oltre a questo, guarda che gran parte del kung fu dell'hacker super-esperto a dire il vero consiste semplicemente nel googlare il messaggio di errore.
Se googli per "paramiko.ssh_exception.BadAuthenticationType", ottieni subito una interessante discussione https://github.com/paramiko/paramiko/issues/787 che ti suggerisce un po' di cose... e vedo che a un certo punto ha poi un link verso stack overflow con altri suggerimenti ancora.
Partirei da qui.



8
Mah, guarda... è un po' tutto un pasticcio... per usare sqlalchemy ci vogliono dei requisiti - occorre saper programmare in python, almeno quel tanto che basta a interiorizzare i concetti di namespace e scope delle variabili, per esempio. E poi imparare che cosa sono le classi, come funzionano, che cosa fanno. Non ha molto senso fare degli import dentro delle funzioni, e ancora meno dichiarare classi all'interno di funzioni, cose del genere. Non puoi aspettarti di ritrovare fuori dalle funzioni (e quindi a "passare") dei nomi che hai dichiarato nel namespace locale. Appiattisci quel codice di dieci o cento volte, prima.
Per l'uso di sqlalchemy, io penso che il tutorial sia abbastanza chiaro https://docs.sqlalchemy.org/en/13/orm/tutorial.html ma se vuoi puoi anche vedere questo articolo per esempio https://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/ (che però è stato scritto 10 anni fa... leggi solo le parti relative all'uso di declarative, il resto oggi è decisamente obsoleto).
Delle ottime indicazioni sull'organizzazione del codice le trovi nella documentazione quando discute l'oggetto Session https://docs.sqlalchemy.org/en/13/orm/session_basics.html ... almeno io all'epoca le avevo trovate abbastanza illuminanti.

Però davvero, se il tuo stile di OOP in Python consiste nel dichiare un import dentro una classe dentro una funzione dentro un modulo che poi importi in un metodo di una classe di una funzione... ehm... forse c'è ancora qualche problema a monte di sqlalchemy...

9
Altre tematiche / Re:Comunicazione RS485-protocollo ModBus
« il: Giugno 23, 2020, 17:54 »
Mah no... onestamente eviterei sempre soluzioni coi thread se non è proprio assolutamente indispensabile.
Nel tuo caso *di sicuro* puoi evitartelo. Tutto ciò che vuoi è ascoltare periodicamente una porta. Ora, un gui framework ha *già* un suo ciclo che fa periodicamente delle cose... si chiama "main loop" ed è una specie di ciclo "while True". Come hai già capito per conto tuo, se metti un "while True" dentro un "while True", blocchi tutto. Quindi non ti resta che saltare a bordo del main loop per programmare il tuo ascolto periodico.

Tecnicamente, con le Qt quello che vuoi usare è un QTimer: lo programmi per un certo intervallo in millisecondi, e nello slot relativo fai *un singolo* ascolto della tua porta. Puoi distanziare gli ascolti tra loro, quanto ti pare. Se invece lo metti a 0 millisecondi, allora l'azione di ascolto avverrà "più in fretta possibile", ovvero a ogni ciclo del main loop, non appena sono stati processati gli altri eventi in coda.


per Nunzio, che so che si sta divertendo con il mio libro su wxPython...  ;)
Anche in wxPython esistono i timer (wxTimer)... inoltre esiste anche wx.IDLE_EVENT per programmare eventi a-periodici da emettere "non appena il main loop non ha niente da fare"... è un po' diverso da un QTimer con intervallo 0, credo... non sono espertissimo di Qt... ma non credo che le Qt abbiano un analogo dell'idle event.

11
Base / Re:Un indovinello
« il: Giugno 20, 2020, 11:07 »
Sì... in realtà il quesito era più sul capire la differenza tra "side-effect" e "valore di ritorno" di una funzione, specialmente nel caso di "print" dove uno può avere le idee confuse.

Quanto a None, è uno strano animale di suo.
La sostanza da capire è che None è un oggetto ingegnerizzato per essere il *meno informativo* possibile in Python. Non puoi "caricarci dentro" nessuna informazione in nessun modo, oltre al suo unico valore possibile "None" appunto.
Per cominciare, None è un singleton: esiste un solo None in tutto Python, e ogni volta che chiedi "None", hai sempre lo stesso "None":

>>> a = None
>>> b = None
>>> a is b
True

Mentre per esempio, come tutti sanno

>>> a = 10000
>>> b = 10000
>>> a is b
False

Ma c'è una protezione ancora maggiore: il suo tipo, NoneType, esiste ma *non è raggiungibile* da Python perché non sta nei builtin (a differenza, per esempio, di "int" o "list" o tutti gli altri). E per di più *non è sottoclassabile* (a differenza degli altri):

>>> NoneType
NameError: name 'NoneType' is not defined
>>> class foo(type(None)): pass
TypeError: type 'NoneType' is not an acceptable base type

Quindi di fatto None è l'unica istanza in circolazione di NoneType.
Ma c'è una protezione ancora maggiore (!): None ha lo statuto di keyword (cosa stranissima, visto che è un oggetto!), quindi non è possibile sovrascriverlo con un assegnamento:

>>> None = 42
SyntaxError: can't assign to keyword

Ci sono veramente pochissime cose che puoi fare con None. In pratica, l'unica proprietà che ha, oltre al suo valore, è che testa per False:

>>> None is False
True

La cosa che più si avvicina a None sono i booleani True e False: anche questi sono singleton, anche questi sono keyword, anche "bool" non è sottoclassabile. Però almeno True e False sono *due* valori distinti... Inoltre, siccome "bool" deriva da "int", è possibile fare alcune cose in più (anche se non hanno molto senso):

>>> sorted([42, True, -1, False])  # questo con "None" te lo scordi
[-1, False, True, 42]

In pratica None può essere usato solo... per la sua presenza. Segnala un "buco" semantico dove dovrebbe esserci un valore, più o meno come "pass" segnala un buco sintattico dove dovrebbe esserci un'instruzione.
Nel caso da cui siamo partiti, per esempio: una funzione in Python deve *sempre* restituire un valore. Ma che cosa succede quando, semanticamente, non c'è alcun valore da restituire? Tu, al momento di scrivere la funzione, puoi cavartela semplicemente non scrivendo "return": Python te lo consente. Ma dietro le quinte, per rispettare la regola, restituisce comunque la cosa meno informativa possibile, ovvero None, per segnalare appunto che non c'è nessun valore significativo da restituire.

12
Database / Re:PostgreSQL cercasi aiuto!
« il: Giugno 19, 2020, 11:12 »
Mah... alla fine, i casi sono due.
Se lavori nel contesto di una rete locale con un server, allora installa senz'altro postgres sul server. O chiedi all'amministratore di farlo.
Se per qualsiasi ragione questo non è possibile, allora mi sembra veramente bizzarra l'idea di installare postgres, potenzialmente, su tutte le postazioni della rete. A parte il fatto che comunque non avrebbe senso farlo, perché ovviamente il database di una postazione non potrebbe comunicare con quello di un'altra, quindi non si potrebbero condividere i dati (a meno che la tua applicazione sia comunque in sola lettura, ovvero i dati non sono modificabili).
Comunque, se non hai la possibilità di usufruire di un server di rete vero e proprio, allora tanto vale restare con Sqlite. Hai il vantaggio che funziona in modalità mono-utente sulla postazione singola; e se in futuro vuoi installare il software su più postazioni, puoi spostare il file del database sulla classica "cartella condivisa" in un Nas, e tutto funziona come prima.
Del resto, se usi (come dovresti) un ORM per dialogare con il database, una eventuale futura transizione da Sqlite a Postgres potrebbe non essere troppo difficile da fare.

Ah, poi c'è anche il terzo caso: se usi il software su una sola postazione, ma in modalità multi-utente, e però sei *sicuro* che le cose resteranno così e non cambieranno *mai*, allora puoi anche prenderti il gusto di installare postgres su quel computer... Puoi installare il tuo programma "per tutti gli utenti". Non so se sia possibile installare anche Postgres "per tutti gli utenti", ma altrimenti dovrebbe bastare creare un utente "postgres" apposito e fare in modo che resti sempre loggato. Detto questo, se in futuro poi scopri che invece vuoi installarlo anche su altre postazioni, allora devi stravolgere tutta la baracca.

Detto questo, la tua domanda specifica su come *installare* tutto questo in maniera più o meno automatizzata, adesso non ha proprio più senso. Un installer si fa nello scenario in cui vendi il tuo sofware a della gente che non vedrai mai nella vita. Ma qui stai parlando di installare questa architettura su *UN SOLO* computer a cui hai più o meno accesso... ma che senso ha mettersi a progettare un installer per questo? Prenditi mezza mattinata libera e installati quello che vuoi, dove vuoi. Mi sembra che tu ti stia preoccupando dei vasi di gerani alle finestre quando ancora devi costruire la casa.



>  Ma ad oggi deve girare su una macchina gestita da amministratore e ipotizzare un uso senza installazione.

Sì, e poi c'è sempre questa faticosa questione, che periodicamente torna e ritorna e ritorna ancora...
Vabbè, intanto questo taglia la testa al toro dal punto di vista tecnico: non puoi usare Postgres, punto e basta. Se l'amministratore non ti lascia le chiavi del server, allora non ti lascerà neanche le chiavi dei client. Non puoi installare Postgres "senza installarlo", in "modalità stand-alone", "dalla chiavetta usb", in uno di questi modi semi-nascosti che si usano tanto negli uffici italiani. Ora, un software scritto in Python, con un po' di fatica, si riesce a far girare "stand-alone" senza bisogno di installare Python. Ma Postgres si installa proprio: e se il tuo amministratore è appena appena competente, gli utenti non hanno i permessi necessari per installare software arbitrario sulle loro postazioni. Vedi un po' tu qual è il tuo caso.

Ma soprattutto, queste modalità semi-clandestine di lavorare sono proprio sbagliate. Se occorre un software e tu hai la competenza di svilupparlo, allora sviluppalo sul tuo portatile, organizza una bella dimostrazione per colleghi e dirigenza, convincili a usarlo e (se vuoi) a questo punto puoi chiedere all'amministratore di installare Postgres su un server. Altrimenti, se cominci a usare un software che hai fatto tu "alla chetichella", succedono invariabilmente due cose: primo, qualsiasi esito negativo (errori, crash occasionali, storture nel processo produttivo e nel flusso di lavoro) diventa una responsabilità tua e solo tua, e tu resti incatenato a garantire il funzionamento di un software che tutti usano e però ufficialmente nessuno sa che esiste; secondo, nel momento in cui funziona e tutti lo usano "alla chetichella", allora semplicemente "va bene così" come lo hai fatto, e a nessuno verrà in mente di riconoscerti il lavoro e darti il permesso per sistemare il software in modo più "ufficiale", perché appunto va già bene così com'è.

Davvero, fidati, l'ho visto succedere più di una volta. Comunque... saprai tu.

13
Database / Re:PostgreSQL cercasi aiuto!
« il: Giugno 18, 2020, 23:42 »
Uhm... mah? Sei sicuro che è quello che vuoi fare?
Da quello che scrivi, mi sembra che tu voglia scrivere e distribuire un software mono-utente. Ma in genere i software mono-utente non usano Postgres... non ha molto senso. Di solito per questi vale la pena di usare Sqlite, o un altro database mono-utente.
Se invece stai scrivendo un'applicazione multi-utente, con un database server interrogato da numerosi client su una rete, allora chiaramente va bene Postgres, ma il database va installato separatamente, sul server di rete, dall'amministratore della rete. Di sicuro non puoi pretendere di installare il database "al bisogno" quando installi un client su una postazione locale. Questo significherebbe che il tuo installer dovrebbe collegarsi al server, avere i privilegi dell'amministratore di rete... sarebbe una follia.

Comunque... se stai scrivendo un software mono-utente e per qualche ragione vuoi comunque avere postgres, installato sulla macchina dell'utente... allora comunque tieni conto che avrai qualche problema aggiuntivo, una volta installata tutta la baracca.
Per esempio, postgres è un processo demone che deve essere in esecuzione, al momento di avviare il tuo programma python che lo deve usare. Quindi, o tu installi postgres come un processo che si avvia automaticamente all'avvio del computer (come si fa in genere): ma questa cosa è scontata su un server, ma sulla macchina personale del tuo utente mi sembra una cosa un po' violenta da fare. In pratica tu stai chiedendo al tuo utente di tenere sempre attivo postgres che gira in sottofondo, solo perché serve al tuo programma... mah, vedi tu... io una cosa del genere non la farei. Oppure, devi avviare il processo di postgres ogni volta che avvii il tuo programma, e chiuderlo ogni volta che chiudi il tuo programma. Questo si può fare, ma tipicamente richiede privilegi da amministratore: e questo concretamente significa che il tuo programma dovrà sempre essere eseguito in modalità da amministratore... e quindi ogni volta che l'utente lo avvia, Windows gli chiede la password da amministratore... e anche questa è una cosa che si può fare, per carità... ma capisci che l'utente potrebbe essere un po' spaventato...
Altro problema: di solito postgres si installa (su un server) sotto un utente ad-hoc... in pratica nel server esiste un utente "postgres" sempre connesso, e il processo di postgres appartiene a quell'utente. Ovviamente questo non potresti farlo facilmente nel caso di un'installazione "domestica" sulla macchina dell'utente. In pratica dovresti chiedere al tuo utente di loggarsi normalmente al computer, *e quindi* di loggare anche l'utente "postgres", e tenerlo loggato solo per far girare il tuo programma... mi sembra veramente troppo. Quindi finirai per installare postgres sotto l'utente "normale" che fa anche girare il tuo programma. Questo non comporta particolari problemi, considerando che comunque siamo in un ambiente mono-utente, e non ci sono problemi di litigarsi le risorse. Però tieni conto, per lo meno, che tutta la directory che contiene i dati di postgres sarà accessibile all'utente (perché gli appartiene!) e quindi potrebbe inavvertitamente cancellarla o manipolarla. In teoria questo problema ce l'avresti anche con Sqlite... ma capisci che il database Sqlite è un singolo file che puoi mettere nella stessa directory del programma, e all'utente non viene in mente di frugrarci dentro. Invece i dati di postgres sono una directory con decine di file dentro... magari un giorno l'utente non si ricorda più a che serve tutto questo, e decide di fare pulizia.

Insomma, in generale un'installazione di postgres in ambiente mono-utente non ha molto senso, almeno nel contesto di "programma per l'utente finale". Ovviamente invece installarsi postgres sulla propria macchina di sviluppo per testare il codice, questa è una buona idea senz'altro...

Comunque, ipotizzando che tu voglia comunque fare in questo modo... andiamo avanti...
Per quanto riguarda il processo di installazione in quanto tale... mah, qui ho degli altri dubbi. Non capisco perché deve essere un processo di installazione unico. Non puoi installare postgres separatamente (magari facendo uno script che aiuta l'utente), e poi il tuo programma? Anche perché, a rigore, dovresti distinguere i tre casi: primo caso, non esiste postgres; secondo, esiste postgres ma non ancora il database che serve al tuo programma; terzo caso, esiste già sia postgres sia il database (questo può succedere se l'utente installa e poi disinstalla il tuo programma, o in caso di aggiornamenti... va a sapere).
Inoltre, non avresti comunque il problema anche di installare Python stesso? Oppure vuoi provare una di quei sistemi tutto-in-un-exe... però vedi la cosa buffa, che tu paradossalmente avresti il tutto-in-un-exe per il tuo programma, *ma comuque* dovresti installare postgres separatamente... mentre se usassi banalmente Sqlite, potresti davvero far stare tutto insieme.

Detto tutto questo... mah... installare postgres in modalità "automatica", "silenziosa" o come la si vuole chiamare, non è un problema. L'installer di postgres può essere invocato dalla riga di comando con l'opzione "--mode unattended"... se la metti assieme a un altro po' di opzioni, puoi fare tutta l'installazione in un colpo solo senza chiedere niente all'utente. A questo punto, puoi farti uno script che esegue questa installazione... e se vuoi potrebbe essere pilotato da python con subprocess, perché no... anche se a dire il vero sarebbe più comodo fare qualcosa come un batch script, o un powershell...
A questo proposito, anzi... te lo devo dire: l'idea che sicuramente tu hai in mente, che il tuo programma si avvia e, se non trova il database, magicamente si installa postgres e tutto quanto senza che l'utente debba preoccuparsi di niente, è un'idea profondamente sbagliata. Se il tuo programma all'avvio non trova postgres, questo può essere per mille motivi... per esempio perché il processo di postgres è caduto o è stato interrotto per qualche ragione, o non è stato possibile avviarlo... va a sapere... E se ogni volta che il tuo programma non trova postgres se lo reinstalla allegramete, dopo un anno il tuo utente ha quindici installazioni di postgres sulla sua macchina. Secondo me sarebbe meglio che se il tuo programma non trova postgres, fa quello che fanno tutti i programmi che all'avvio non riescono a connettersi al database: si pianta e mostra un messaggio all'utente.
Comunque, riprendendo il discorso: tu puoi senz'altro farti uno script che installa postgres silenziosamente, e puoi farlo girare da python se vuoi. L'importante è che ti ricordi che comunque questo script di installazione deve pur sempre avere permessi da amministratore... quindi hai un problema ulteriore... o il tuo script python già in partenza è eseguito con privilegi da amministratore (ma allora devi spiegare all'utente di avviarlo come amministratore!), oppure con subprocess devi elevarti eseguendo "runas"... ma se esegui "runas", allora devi sapere la password dell'amministratore (ovvero devi chiederla in precedenza all'utente) ed essere pronto a fornirla all'utente con subprocess.communicate(). Si può fare, eh... nessun problema.

Per quanto riguarda lo script di installazione vero e proprio... ripeto, in sostanza si tratta di avviare l'installer di postgres con "--mode unattended" e qualche altro fronzolo... qui faccio prima a passarti due link, tanto questa è la cosa più facile...
https://www.postgresql.org/download/windows/
https://silentinstallhq.com/postgresql-12-silent-install-how-to-guide/
https://coderwall.com/p/r6nqrw/automated-postgresql-install-and-configuration-with-powershell

Dopo di che... mah... e usare Sqlite e non complicarsi la vita?

14
Database / Re:PostgreSQL cercasi aiuto!
« il: Giugno 18, 2020, 17:36 »
sì ma per quale sistema operativo?
e poi ti serve un'installazione "seria" (tipo server di produzione) o vuoi solo averlo sulla tua macchina per testare e lavorare per conto tuo?
e che vuol dire "tramite codice python"?

15
Base / Re:Un indovinello
« il: Giugno 18, 2020, 15:55 »
è nell'articolo che ho già  linkato sul mio blog:
https://pythoninwindows.blogspot.com/2020/06/un-indovinello-su-print.html

Pagine: [1] 2 3 ... 233