Re: [Python] Grafici
On Thu, Dec 03, 2020 at 07:24:27PM +0100, Bruno Firmani wrote: > Sto muovendo i primi passi in Python. Benvenuto > > Il mio problema è il seguente: > > ho quattro liste numeriche: > > xx = [x1,x2, ... ,xn] > yy = [y1,y2, ... ,yn] > ww = [w1,w2, ... ,wn] > zz = [z1,z2, ... ,zn] > > e dovrei far disegnare, per linee, in un unico grafico le liste di punti: > > [ [x1,y1] , ... , [xn,yn] ] > [ [x1,w1] , ... , [xn,wn] ] > [ [x1,z1] , ... , [xn,zn] ] > > Chiedo, se possibile, di avere indicazioni. una cosa tipo zip(xx, yy)? In [1]: xx = ['x1','x2', 'xn'] ...: yy = ['y1','y2', 'yn'] ...: ww = ['w1','w2', 'wn'] ...: zz = ['z1','z2', 'zn'] In [2]: list(zip(xx, yy)) Out[2]: [('x1', 'y1'), ('x2', 'y2'), ('xn', 'yn')] In [3]: list(zip(xx, ww)) Out[3]: [('x1', 'w1'), ('x2', 'w2'), ('xn', 'wn')] *:-) -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Argomenti funzione posizionali e opzionali
On Fri, Nov 20, 2020 at 03:14:53PM +0100, Valerio Pachera wrote: > Ciao a tutti, sto definendo una funziona a cui devo passare un valore per > id o per nome. > > Il mio approccio è stato questo > > def modify_firma(signature_id='', signature_name='', content): >if signatrue_id: > pass > elif signature_name: > pass > > Ci sono due problemi: il parametro content è posizionale e va messo prima. > Questo errore mi ha fatto pensare che devo passare almeno uno dei parametri > signature_id o signature_name. > Posso spostare la logica di controllo all'interno della funzione ma mi > chiedevo quale sia la via migliore per gestire questa situazione. > > L'altra idea è quella di mettere due parametri posizioni, il primo dei > quali sarà un dizionario. > > def modifiy_signature(reference, content): > if 'id' in reference: > pass > elif 'name' in reference: > pass non mi è chiaro perché non metti content al primo posto:: def modify_firma(content, signature_id='', signature_name=''): ... Mettere un dizionario mi pare inutilmente complesso in questo caso. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Coding per biennio superiori
Ciao, scusate la mail parzialmente ot. Un figlio di amici, costretto a casa per una frattura, vuole avvicinarsi in modo autonomo al coding. Avete suggerimenti considerando che è in 1^ liceo? sandro *:-) -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] pip freeze, o "come essere sicuri delle dipendenze che sto installando"
On Fri, Oct 09, 2020 at 12:09:18PM +0200, Luca Bacchi wrote: > Io faccio esattamente come con node: > > pip3 install -r requirements.txt > pip3 freeze > requirements-lock.txt > > Dentro requirements.txt elenco le librerie che uso io, il primo livello, e > spesso (non sempre) non indico il versioning. In questo modo so che > > pip3 install -r requirements.txt > > installa sempre le ultime versioni. > > Poi però > > pip3 freeze > requirements-lock.txt > > mi permette di avere uno screenshot dell'ambiente esatto: tutte le librerie > con le esatte versioni installate. questo modo di operare "sembra" come yarn/npm ma in realtà si basa sulla diligenza del programmatore di ricordarsi di eseguire "pip freeze". Per esperienza non funziona in un ambienete normale. Ci sarà sempre qualcuno che dimentica di farlo e oi sono problemi per ci deve usare qull'ambiente. Pip-tools e Peotry sopperiscono a questo problema costringendoti ovviamente a qualche limite. Ad esempio devi essere nella cartella giusta. Se ad esempio usi un virtualenv per due progetti differenti (un progetti ed una libreria ad esempio) per aggiungere a quel virtualenv devi magari cambiare cartella. Sia Poetry che pip-tools ti danno una visibilità molto migliore di come un pacchetto è finito nel tuo virtualenvm e per me è cosa buona e giusta. Poetry usa il nuovo formato pyproject.toml e pip-tools usa setup.py o semplicemente requirements.txt. Se usi pyproject.toml avrai poblemi da un progetto che usa pip con l'opzione -e, questo è documentato (è un limite di pip, non di Petry). sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Condivisione interna di librerie
On Thu, Oct 01, 2020 at 10:13:20AM +0200, Federico Fissore wrote: > Alessandro Dentella wrote on 30/09/20 22:57: > > > > Io tipicamente faccio dei package. Se so che la funzionalità è > > *potenzialmente* > > utile in altri progetti faccio sicuramente un pacchetto che poi pubblico su > > un > > mio server (basta una cartella con autoindex servita da nginx, nulla di > > che). > > > > Anche tu aggiorni tutti i software che dipendono dal pacchetto, dopo che ne > rilasci un aggiornamento? > > Il fatto è che, quando ho proposto di ridurre la duplicazione del codice > estraendolo in librerie condivise, mi è stato risposto che così avrei creato > un accoppiamento e sarei stato costretto o ad aggiornare e rilasciare sempre > tutto insieme, o a manutenere versioni diverse (ad esempio continuare a > manutenere una 2.x perchè in qualche caso non è possibile passare alla 3, o > richiede più tempo del previsto) > > Ti sei trovato in questa situazione? > > Io personalmente sì (con java) e la soluzione allora era aggiornare subito > tutto l'aggiornabile: per il rimanente aprivo una issue di debito tecnico > che cercavo di chiudere appena possibile Decido caso per caso. A me piace documentare bene cosa fa ogni nuova release e quindi a seconda se è un fix importante o se è l'aggiunta di una feature (che magari in un certo contesto non mi serve) non lo faccio. Aggiornare ha una costo e pure la disuniformità... Posso dirti che combatto con le unghie e coi denti il copia incolla soprattutto quando sono più di 2 progetti diversi. C'è un secondo aspetto da tenere presente. Se fai un pacchetto sai devi documentarlo, se copi ed incolli, l'esperienza mi dice che non lo documenterai. Il collega che non capisce come funziona riscrive con la convinzione di essere più bravo di quello precedente (magari semplicemente non ha compreso qualche sottigliezza che l'altro aveva invece considerato). Per questioni economiche se hai già venduto ad un cliente una soluzione è difficile che torni ad aggiornare se non crea problemi... se non hai un contratto di assistenza, come giustifichi le ore necessarie? Agisco nello stesso modo quando non ho colleghi e lavoro a progetti miei. Package separati ove ragionevole. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Consigli per imparare python - Flashcard
On Thu, Oct 01, 2020 at 08:54:59AM +0200, Pietro Brunetti wrote: > Ciao a tutti, > Anche io ho iniziato a usare anki. All'inizio per l'inglese (funziona > benissimo) Posso allora suggerirti di provare il mio plugin che importa da reverso, ne parlo in questo articolo: https://wikidattica.org/blog/reverso-anki Con questo ho incamerato oltre 700 parole nuove in 4 mesi. È più difficile trovare nuove parole che memorizzarle... (e se lo provi e ti piace non dimenticarmi di up-votarlo *;-) Anche mio figlio che inizia ora la 1^ media ci arriva con un bagaglio di 500+ parole imparate guardando video con un plugin molto simile (che però si appoggia ad un servizio a pagamento: https://wikidattica.org/blog/fleex) sandro *:-) -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Consigli per imparare python - Flashcard
On Wed, Sep 30, 2020 at 06:13:12PM +0200, Domenico Pannullo wrote: > Vorrei imparare python. Colgo l'occasione per suggerire a tutti quelli che studiano cose nuove, e non solo ai giovani. Sono stato folgorato da un annetto abbondante dall'uso delle flashcard -uno strumento per aiutare la memorizzazione- che ha una efficacia strepitosa. Lo si percepisce in pochissimo tempo (10/15 gg qualche minuto al giorni bastano). Solo per incuriosirrvi i pilastri teorici sono: * curva dell'oblio (forgetting curve) * ripetizioni dilazionate (spaced repetition) * richiamo attivo (active recall) I 2 principali strumenti per 'giocare' le flashcard sono fatti in Python e sono opensource: Anki [1] e Mnemosyne [2] Ne sono rimasto così entusiasta che sto facendo partire il progetto Wikidattica [3] per favorirne l'adozione nelle scuole e per farne un grosso progetto collaborativo (dovesse interessarvi, fatevi vivi...). Vi suggerisco di dare un'occhiata al sito per capire di che parlo. Anki, di gran lunga il software più utilizzato e che vanta centiania di add-on è in Python + QT5 ed è scritto... in modo veramente fetente. Credo che dal punto tecnico sia il peggior software su cui abbia mai messo le mani. Anche il modello di sviluppo si merita il premio per il progetto peggio gestito. E parliamo di un progetto che ha una un forum da 50 mail/giorno. Per fare 2 add-on che di fatto scaricano parole straniere da una api (reverso) e un pagina web (fleex) e le caricano in un mazzo di carte mi sono rovinato il fegato ed ho maledetto l'autore almeno una cinquantina di volte. È un triste esempio che open source e Python non sono garanzie di per sè. Il prodotto però è brutto esteticamente ma veramente efficace e pratico da usare. sandro *:-) -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Consigli per imparare python
On Wed, Sep 30, 2020 at 06:13:12PM +0200, Domenico Pannullo wrote: > Vorrei imparare python. > Conosco già un pò il linguaggio ma poco. > Mi consigliate un corso efficace, non noioso, tipo queste app che ci sono in > giro o lezioni online o su youtube? Un sito che reputo molto ben fatto è https://realpython.com. Hanno molto materiale gratuito ed alcuni video a pagamento. Su questo sito ho ad esempio studiato async e concorrenza quardando anche un video a pagamento che ho trovato veramente ben fatto. sandro *:-) -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Condivisione interna di librerie
On Wed, Sep 30, 2020 at 05:53:23PM +0200, Federico Fissore wrote: > Ciao a tutti > > nel cercare di diventare esperto di python nel più breve tempo possibile, > combatto con la mia eredità java/node/rust > > Come fate a riciclare il codice di un modulo fra più progetti? > > Trasformate quel modulo in una libreria da installare con pip? Libreria che > pubblicate su un repository pip interno? > > Oppure fate copia-incolla? Io tipicamente faccio dei package. Se so che la funzionalità è *potenzialmente* utile in altri progetti faccio sicuramente un pacchetto che poi pubblico su un mio server (basta una cartella con autoindex servita da nginx, nulla di che). Meno ovvio è come fare il pacchetto. È una delle aree in cui c'è sempre stato più movimento. Adesso ad esempio si sta transitando, mi pare senza troppa solerzia, da setup.py a pyproject.toml (PEP 518). [1] Puoi forse cominciare da qui: https://packaging.python.org/ Per la creazione dei pacchetti i sono trovato molto bene con poetry [3] che poi però mi ha dato grane quando dovevo trovare pacchetti su repo privati (ma non sono sicuro che fosse colpa sua, onestamente). Poetry produce pacchetti solo con il file di con `pyproject.toml` e per default produce anche le wheel. sandro *:-) [1] https://snarky.ca/what-the-heck-is-pyproject-toml/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uwsgi in docker: come interpretare questi log?
On Tue, Sep 15, 2020 at 02:27:38PM +0200, Riccardo Magliocchetti wrote: > > Poi mi rendo conto che non so come interpretare i log: > > che significa "app: 0" o alternativamente "app: -1"? > > ieri credevo che app: -1 fosse quando andava in errore, ma vedo che ho molte > > richiestecon app: -1 che sono andate a buon fine. Aggiungo questi log caldi caldi... [pid: 7|app: -1|req: -1/502] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:21 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 66/503] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:28 2020] GET / => generated 19217 bytes in 252 msecs (HTTP/1.1 200) 8 headers in 339 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/504] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:28 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 67/505] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:28 2020] GET / => generated 19217 bytes in 36 msecs (HTTP/1.1 200) 7 headers in 310 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/506] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:28 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 7|app: -1|req: -1/507] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 68/508] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 19217 bytes in 90 msecs (HTTP/1.1 200) 7 headers in 310 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/509] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 7|app: -1|req: -1/510] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 7|app: -1|req: -1/511] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 69/512] 172.24.0.5 () {42 vars in 562 bytes} [Tue Sep 15 14:36:29 2020] GET / => generated 19217 bytes in 34 msecs (HTTP/1.1 200) 7 headers in 310 bytes (1 switches on core 0) Qui si vede chiaramente che a fronte della stessa richiesta il pid 7 va in errore ed il pid 6 no. Quando la richiesta va in errore vedo "app: -1", ma in altre circostanze non è così vanno a buon fine richieste che hanno "app: -1" sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uwsgi in docker: come interpretare questi log?
On Tue, Sep 15, 2020 at 02:27:38PM +0200, Riccardo Magliocchetti wrote: > On 15/09/20 13:08, Alessandro Dentella wrote: > > Ma a me l'applicazione va per lungo tempo e poi comincia a darmi errore > > "dopo un > > po'" cosa che non mi era mai successa quando usavo uwsgi fuori da docker. > > eh senza configurazione è difficile aiutarti, se vedi quell'errore devi > vedere le linee subito dopo al log e risolvere la questione. Quando ho quell'errore non ho alcun altro log.. La conf di uwsgi è la seguente: [uwsgi] prj_dir = /code/ wsgi-file = %(prj_dir)/web/wsgi.py env = PYTHONPATH=%(prj_dir)/apps socket-timeout = 200 buffer-size = 1 processes = 2 threads = 1 http = :8000 master = true http-keepalive = 1 lazy-apps = 1 wsgi-env-behavior = holy req-logger = file:/var/log/uwsgi/access.log logger = file:/var/log/uwsgi/errors.log chmod-socket= 664 static-map = /static=/code/static static-map = /media=/code/media ## dj collectstatics viene lanciato con --links per risparmiare spazio ## quindi uwsgi richiede che si dichiari che anche il target è sicuro static-safe = /code/web/static static-safe = /usr/local/lib/ static-expires-uri = "/static/.*\.[a-f0-9]{12,}\.(css|js|png|jpg|jpeg|gif|ico|woff|ttf|otf|svg|scss|map|txt) 31536" > > Poi i rendo conto che non so come interpretare i log: > > che significa "app: 0" o alternativamente "app: -1"? > > ieri credevo che app: -1 fosse quando andava in errore, ma vedo che ho molte > > richiestecon app: -1 che sono andate a buon fine. > > dipende da chi risponde alle richieste Ok, ora capisco che app: 0 => django app: -1: static-map Poi però trovo: [pid: 7|app: -1|req: -1/53] 172.18.0.2 () {42 vars in 564 bytes} [Mon Sep 14 13:25:16 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) Che dovrebbe essere gestita da django ed ha "app: -1", quindi sono punto e a capo. Inoltre che è req: -1/53. In modo ingenuo pensavo che fosse l'incrementale delle request ricevute dall'istanza e poi dal singolo processo. Ma -1 esce da questo schema, quindi di nuovo sono al palo... La cosa che mi perplime è che la stessa richiesta venga servita a volte con errore a volte no, tipo 50% delle volte in un modo e 50% nell'altro. Oggi però non riesco ad avere un errore neanche a piangere... sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uwsgi in docker: come interpretare questi log?
On Tue, Sep 15, 2020 at 08:58:35AM +0200, Luca wrote: > Il giorno lun 14 set 2020 alle ore 23:42 Alessandro Dentella < > sandro.dente...@gmail.com> ha scritto: > > > > > > > --- no python application found, check your startup logs for errors --- > > > > .. <https://lists.python.it/mailman/listinfo/python> > > > A me si solito capita quando ho dimenticato di installare qualche modulo, > la pythonpath o il virtualenv. e quindil'app o non parte o si pianta da > qualche parte. > in genere avviando a mano lo script un paio di volte trovo il punto. Ma a me l'applicazione va per lungo tempo e poi comincia a darmi errore "dopo un po'" cosa che non mi era mai successa quando usavo uwsgi fuori da docker. Poi i rendo conto che non so come interpretare i log: che significa "app: 0" o alternativamente "app: -1"? ieri credevo che app: -1 fosse quando andava in errore, ma vedo che ho molte richiestecon app: -1 che sono andate a buon fine. sandro PS: esiste ancora una lista uwsgi? io non la trovo, ma in documentazione dicono di scrivere in lista uwsgi... ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] uwsgi in docker: come interpretare questi log?
Ciao, ho un docker creato partendo dal docker python-slim ed aggiungendo uwsgi come wheel generata da me. In questo docker c'è un processo uwsgi che serve un django, al momento ho:: processes = 2 threads = 1 e nel docker questo si vede così:: PID TTY STAT TIME COMMAND 1 ?Ss 0:00 uwsgi --ini=/etc/uwsgi.ini --show-config 6 ?S 0:06 uwsgi --ini=/etc/uwsgi.ini --show-config 7 ?S 0:06 uwsgi --ini=/etc/uwsgi.ini --show-config 8 ?S 0:00 uwsgi --ini=/etc/uwsgi.ini --show-config dopo un funzionamento corretto per un po' arrivo ad una situazione in cui il pid 7 va in errore, nei log leggo: [pid: 6|app: 0|req: 3/5] 172.18.0.2 () {54 vars in 1490 bytes} [Mon Sep 14 15:05:10 2020] GET /it/admin/ => generated 53493 bytes in 1075 msecs (HTTP/1.1 200) 7 headers in 250 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/53] 172.18.0.2 () {42 vars in 564 bytes} [Mon Sep 14 13:25:16 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 17/54] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 15:30:51 2020] GET /admin/ => generated 0 bytes in 44 msecs (HTTP/1.1 302) 3 headers in 98 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/55] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 13:30:57 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 6|app: 0|req: 18/56] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 15:31:45 2020] GET /admin/ => generated 0 bytes in 78 msecs (HTTP/1.1 302) 3 headers in 98 bytes (1 switches on core 0) [pid: 7|app: -1|req: -1/57] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 13:31:52 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 7|app: -1|req: -1/58] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 13:31:56 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) [pid: 7|app: -1|req: -1/59] 172.18.0.2 () {42 vars in 565 bytes} [Mon Sep 14 13:31:59 2020] GET /admin/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0) Ed ad ogni errore nei log leggo:: --- no python application found, check your startup logs for errors --- Che mi lascia abbastanza perplesso. 1. Cosa significa che trova l'applicazione e poi non la trova più? 2. Che significa 'app'? noto che anche anche in altre applicazioni con più processi e thread io ho sempre "app: 0" Ho l'impressione di avere iniziato ad avere problemi da quando ho evitato di compilare uwsgi nel processo di creazione del docker, ma è difficile dire con precisione in quanto l'errore non si presenta sempre e non da subito ed ho cominciato da poco ad usare docker... Ogni chiarimento/suggeriemento/lettura è ben accetto... anche l'indirizzo della ml di uwsgi... Sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] ottimizzazione inscatolamento...
Ciao, un cliente ha il problema di ottimizzare il riempimento di alcuni scatoloni. Sapete se esiste qualche programma possibilmente python che affronti l'argomento? Idealmente deve anche potere avere vincoli tipo: questa scatola è delicata, lascala in cima... Chiedo prima di buttarmi in rete a capire cosa esista, a volte questa lista riserva piacevoli sorprese... e poi sonnecchia da troppo tempo! sandro -- Sandro Dentella *:-) http://wikidattica.org Flashcard per la didattica http://trepalchi.itIl portale degli artisti http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Eseguire file creapdf.py in Debian
Ciao Daniele, > > $> ls -l c* > .rwxr-xr-x 4,1k daniele 29 mag 15:01 creapdf.py Strano il . prima di rwx... mai visto! che significa? > Dove però la prima "x" è sottolineata. Anche questo mi suona molto strano E dove sta il gruppo? L'output a cui sono abituato è così: $ ll test.py -rwxr-xr-x 1 sandro sandro 30 mag 30 01:14 test.py Che visualizzazione hai attivato? Se fai partire una bash poi riesci ad eseguirlo? > > Se do il comando: > > $> python3 ./creapdf.py -c come mai ora hai aggiunto "-c"? è necessario? > Qualcuno saprebbe aiutarmi a ristabilire la mia autorità? Correttissima questione di principio! -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti http://www.wikidattica.org Flashcard per la didattica http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Eseguire file creapdf.py in Debian
On Fri, May 29, 2020 at 09:38:17PM +0200, Pietro Brunetti wrote: > Domanda da ignorante (mi aiuterete a migliorare) ma > #!/usr/bin/python3 > > Funziona anche se python3 non è il quella Path? Funziona per qualsiasi > interprete? Insomma... Come funziona? No! Se in quella posizione non hai Python, va in errore: $ /tmp/test.py bash: /tmp/test.py: /usr/python3: interprete errato: File o directory non esistente La versione che ti è stata suggerita: #!/usr/bin/env python3 cerca nel $PATH, ovvero la lista delle cartelle dove vengono cercati gli eseguibili, il primo eseguibile chiamato python3: env - run a program in a modified environment puoi ad esempio chiamarlo anche da riga di comando: env python3 Ad esempio dall'interno di un virtualenv troverà il python relativo: sandro@bluffx:~$ env python Python 2.7.17 (default, Nov 7 2019, 10:07:09) [GCC 9.2.1 20191008] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> sandro@bluffx:~$ workon base3 (base3) sandro@bluffx:~$ env python Python 3.7.5 (default, Nov 20 2019, 09:21:52) [GCC 9.2.1 20191008] on linux Type "help", "copyright", "credits" or "license" for more information. >>> sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Docker, postgresql e barman: suggerimenti cercansi...
On Wed, May 20, 2020 at 12:09:50PM +0200, Marco Beri wrote: > > Per esempio questo, giusto di due settimane fa: > https://www.2ndquadrant.com/en/blog/local-persistent-volumes-and-postgresql-usage-in-kubernetes/ > Grazie per il riferimento. Leggendo altri articoli [1] ho notato che PostgreSQL è la 3^ immagine più usata in docker... forse qualcuno la sta usando... One indication that containerized databases are trending is that Postgres, a well-known open source relational database, has been ranked in surveys as the third most popular technology run in Docker containers. E se si va su hub.docker.com, le immagini più poplari sono esattamente database... sandro [1] https://containerjournal.com/topics/container-management/11-things-to-know-about-databases-and-postgres-in-containers/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Docker, postgresql e barman: suggerimenti cercansi...
Ciao Davide, On Tue, May 19, 2020 at 05:20:00PM +0200, Davide Muzzarelli wrote: > Il 19/05/20 13:00, Alessandro Dentella ha scritto: > > Posso ovviamente avere tanti cluster su una macchina fisica e gestire i > > backup > > in modo indipendente ma mi chiedo se invece mi convenga pensare di usare > > anche > > per postgres delle istanze indipendenti via docker. > > > > Avete suggerimenti/bast practice da seguire? > > Ciao Sandro! > > Postgres è un servizio critico perché è dedicato alla persistenza dei dati. > > Docker ha una lunga storia d'instabilità, bug e incompatibilità > all'indietro. > > Mai mettere Postgres, o qualsiasi altro database, su Docker perché rischi di > trovarti coi dati corrotti, a meno che non lo usi giusto per lo sviluppo. > > Questo articolo è di fine 2016 ma ancora perfettamente valido > https://thehftguy.com/2016/11/01/docker-in-production-an-history-of-failure/ dall'articolo estraggo: It takes 5 years to make a good and stable software, Docker v1.0 is only 28 months old, it didn’t have time to mature. The hardware renewal cycle is 3 years, the distribution release cycle is 18-36 months. Docker didn’t exist in the previous cycle so systems couldn’t consider compatibility with it. To make matters worse, it depends on many advanced system internals that are relatively new and didn’t have time to mature either, nor reach the distributions. That could be a decent software in 5 years. Wait and see. Beh... quasi ci siamo, quindi è il caso di leggere articoli più attuali per farsi un'idea... Detto questo, d'istinto ho tutte le mie perplessità a fare girare Postgres in un docker, per questo resto ancora interessato a capire come si orienta ora la comunità che frequesta questo gruppo. [Nel frattempo ad esempio ho installato heptapod (gitlab con mercurial) e il loro docker ha Postgresql al suo interno...] sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Docker, postgresql e barman: suggerimenti cercansi...
Ciao a tutti, sto per cominciare a dockerizzare alcune applicazioni django + frontent in vuejs e backend in postgresql. I db medi con cui ho a che fare sono piccoli, meno di 100 NB, alcuni arrivano a qualche GB. All'inizio ho pensato di tenere un pg classico (non dockerizzato) e fare che tutti i siti utilizzino quello. Come vantaggio vedo il fatto di gestire un unico backup via barman con meno controlli. Uno svantaggio però è che ogni volta che devo ripristinare un db devo ripristinare tutto il cluster. Questo è quello che ho sempre fatto e non mi pone problemi particolari ma mi chiedo se sia la cosa migliore. Posso ovviamente avere tanti cluster su una macchina fisica e gestire i backup in modo indipendente ma mi chiedo se invece mi convenga pensare di usare anche per postgres delle istanze indipendenti via docker. Avete suggerimenti/bast practice da seguire? grazie in anticipo sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti https://wikidattica.it Flashcard per la didattica http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] OT: mercuria & heptapod
On Thu, May 14, 2020 at 11:02:10AM +0200, Carlos Catucci wrote: > > so che su questa ml c'è un po' di gente che come me preferisce mercurial a > > git. > > Vorrei quindi condividere con voi la mia soddisfazione per la linea che > > mercurial sta prendendo ultimamente e come abbiamo fatto fronte alla > > chiusura di > > bitbucket installando da docker heptapod (gitlab con mercurial): > > > Onestamente il perche' del successo di GIT rispetto a Bazaar e Mercurial > non mi e' mai stato chiaro. Lo stesso Torvald ha detto che se avesse > conosciuto meglio GIT a suo tempo non lo avrebbe wscelto per i repo di > Linux. mi risulta strano che abbia detto questo... l'ha scritto lui git... a che ti riferisci? ?/< ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] OT: mercuria & heptapod
Ciao a tutti, so che su questa ml c'è un po' di gente che come me preferisce mercurial a git. Vorrei quindi condividere con voi la mia soddisfazione per la linea che mercurial sta prendendo ultimamente e come abbiamo fatto fronte alla chiusura di bitbucket installando da docker heptapod (gitlab con mercurial): https://heptapod.net/pages/docs.html Quelli di Heptapod stanno aprendo anche un servizio a pagamento per chi è stato lasciato a casa da Bitbucket... A lato di tutto questo, ho avuto bisogno di chiedere in lista mercurial ed heptapod alcune informazioni ed ho aperto un paio di issues sul bug-tracker di mercurial, ottenenedo risposte e soluzioni nel giro di pochissime ore. Le cose che mi han lasciato particolarmente soddisfatto sono: * i topics (branching condiviso in fase draft che permette iscrittura della storia) * histedit * absorb sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] GUI fatta con Glade e GTK2
On Sat, Apr 18, 2020 at 06:44:13PM +0200, Federico Fissore wrote: > Ciao a tutti > > mi trovo a voler smanettare con una GUI descritta con Glade con target GTK2, > mentre il resto dell'applicazione è in python 2. L'unica versione di Glade > che riesco a installare su ubuntu 18 supporta solo GTK3. > > Vi siete mai trovati in una situazione simile? Come l'avete risolta? Ubuntu 18 supporta ancora gtk2, anche Ubuntu 19.10, mentre credo che la nuova 20.04 lo abbandoni. Lo dico con certezza, ho una libreria fatta nel 2008 che uso ancora ora, "sqlkit" che è fatta in gtk2 e python2 ed è ancora inserita in ubuntu 19.10 (apt install python-sqlkit). Non è piu inserita in Ubuntu Fossa, la nuova 20.04 e questo mi ¨costringerਠa curarne il porting ed a rivangare cose oramai dimenticate... > Io pensavo di farmi una VM o un'immagine docker con una vecchia > ubuntu/debian e di farci girare una versione di Glade abbastanza vecchia, ma > forse ci sono metodi più immediati Interessante come soluzione transitoria... deve essere una docker completa anche del server X e poi ne esporti il DISPLAY? corretto? sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] venv + Debian
On Sun, Mar 15, 2020 at 11:28:45AM +0100, Raffaele Salmaso wrote: > On Sun, Mar 15, 2020 at 11:21 AM Alessandro Dentella < > sandro.dente...@gmail.com> wrote: > > > Sai dirmi come fare con pip-tools ad aggiungere una dipendenza in modalità > > development, ovvero senza installarla ma estendendo il path? > > > In questo ho abbozzato un differente requirements-dev.in con i path di > sviluppo, > ma devo ancora affrontare bene la questione quindi se ci sono altri > suggerimenti sono i benvenuti :) > > Immagino che nel file `.in` uno debba usare l'opzione -e, ma nel tentativo > > fatto > > non ho azzeccato la sintassi. > > -e /repo/path/pkg > Non funziona? a me si La proverò, ma è terribile: non voglio scrivere una posizione assoluta che poi sia diversa per i miei colleghi... devo poterla mettere con una variabile d'ambiente o con un file di configurazione (buildout prevede tutto questo) sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] venv + Debian
Ciao Raffaele, On Sun, Mar 15, 2020 at 10:04:49AM +0100, Raffaele Salmaso wrote: > On Thu, Mar 12, 2020 at 11:18 AM Alessandro T. wrote: > > > Ciao ML, > > > > affascinato dalla separazione tra sistema e ambiente di sviluppo ho > > iniziato ad usare venv; principalmente perché presente nella standard > > library e perché la procedura di upgrade sembra piuttosto semplice. > > Quindi, per ogni nuovo progetto un bel: > > > > python3 -m venv venv > > > meglio essere più precisi > $ python3.7 -m venv venv > > E per i requirements puoi usare pip-tools, che semplifica di molto (senza > stravolgere il flusso di lavoro) la gestione dei requirements.txt e > sincronizzazione dei venv > https://github.com/jazzband/pip-tools Sai dirmi come fare con pip-tools ad aggiungere una dipendenza in modalità development, ovvero senza installarla ma estendendo il path? Spesso mi capita di sviluppare un progetto che preveda l'edit di più pacchetti python in contenporanea. Con buildout (strumento abbastanza di nicchia, mi rendo conto) ho sempre gestito perfettamente questa situazione che invece trovo poco gestita nel mondo pip/pip-tools/poetry ma forse solo perché non mi ci sono ancora applicato... Immagino che nel file `.in` uno debba usare l'opzione -e, ma nel tentativo fatto non ho azzeccato la sintassi. Peraltro una corretta gestione dovrebbe potere prevedere quello che per yarn è 'link': dichiaro la dipendenza ma in *questa* installazione quel pacchetto lo prendo da *quella* posizione. Complessivamente `poetry` l'ho trovato ancora meglio come workflow e chiarezza nell'uso ma ci ho trovato ancora dei bug bloccanti soprattutto nell'uso di repository privati (i pacchetti non vengono trovati) sandro *:-) PS: Non ho ricevuto le mail di cui questa mail è una risposta ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Richiesta chiarimento su SyntaxWarning
On Mon, Jan 13, 2020 at 10:16:35AM +0100, Marco Beri wrote: >On Mon, Jan 13, 2020 at 9:09 AM Giovanni Porcari ><[1]giovanni.porc...@softwell.it> wrote: > > Marco ho fatto una prova che non mi riesco a spiegare: tu ne hai una > ragione ? > (python 3.7.5) > >> a='xy' > >>> b='xy' > >>> a is b > True > >>> a='x y' > >>> b='x y' > >>> a is b > False > >>> a='x_y' > >>> b='x_y' > >>> a is b > True > >>> > Hai spiegazioni ? > >Te le ha già date (alla grande!) Carlo. >Per capire se "is" torna True puoi anche usare id(): >>>> a="xy" >>>> b="xy" >>>> id(a) >140205877191544 >>>> id(b) >140205877191544 >>>> a="x y" >>>> b="x y" >>>> id(a) >140205877191600 >>>> id(b) >140205877191656 >>>> >Comunque da qui si capisce la pericolosità di usare "is" a sproposito >:-) >Ciao. >Marco. Non mi è chiaro, stai suggerendo che questo sia un uso scorretto di "is"? A me pare corretto ed istruttivo... che intendi? sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Ide python integrato in webapp
On Wed, Dec 18, 2019 at 12:45:20PM +0100, Piacenza Federico wrote: >> Giusto per capirci, vuoi avere jupyter dentro una tua app web? >> Che detto in altro modo significa: hai presente jupyter? > >non conosco bene jupyter (appena posso me lo studio) ma a me basterebbe >implementare una versione molto molto light di pycharm... >da come mi hai risposto sembra un obiettivo troppo ambizioso, questo >stai dicendo? Si a me sembra ambizioso. > >> Non conosco il modo di integrare jupyter in una tua app, ma di sicuro > > >in effetti adrebbe bene anche qualcosa di già sviluppato lato web ma >che è fatto in modo da potersi integrare facilmente nella mia webapp. La soluzione #3 di cavallinux è esattamente un notebook jupyter. Senza bisogno di studiarlo *provalo*! o guardati una presentazione du youtube e ti rendi subito conto se è quello che cerchi nel caso poi cerca di integrarlo. Una veloce ricerca mi ha portato questo link che non ho veramente tempo di approfondire: https://www.quora.com/How-can-I-embed-ipython-notebook-file-in-my-website sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Ide python integrato in webapp
On Wed, Dec 18, 2019 at 12:28:53PM +0100, Piacenza Federico wrote: >Salve a tutti, >devo implementare un mini ide python ad interfaccia web in una webapp >che sto sviluppando; >questa webapp permettera di scrivere dei test in python (senza avere >nessun interprete e nessun ide installati sulla propria macchina) che >verranno runnati in un ambiente di test direttamente lato server. >in pratica voglio dare la possibilità agli utenti di questo webapp di >scrivere e runnare i test direttamente dal browser: >a tal proposito dovrò implementare sull' interfaccia: >1) la possibilita di inserire i breakpoint >2) la possibilità di visualizzare il contenuto delle variabili (quando >il running si ferma su un brakpoint) >3) vorrei anche implementare un intellisense. >- qualchuno ha già fatto cose simili? >- Suggerimenti? >- per i punti 1,e 2 vorrei utilizzare il debugger nativo di python, c'è >qualche modo più intelligente per farli? >- per il punto 3 inipendentemente dalla complessita di sviluppo lato >client (javascript), esiste qualche algoritmo o programma che si prende >in pasto un pezzo di codice python e capisce la natura degli oggetti? >(sfruttando le python notations) >vi ringrazio anticipatamente per tutti i suggerimenti che mi darete Giusto per capirci, vuoi avere jupyter dentro una tua app web? Che detto in altro modo significa: hai presente jupyter? Non conosco il modo di integrare jupyter in una tua app, ma di sicuro non mi metterei a rifare ciò che funziona egregiamente e che chiaramente non è banale reimplementare. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Generare Screenshot automatici per pagine web
On Thu, Sep 26, 2019 at 12:17:39PM +0200, Esalando Prassi wrote: > On Thu, 26 Sep 2019 at 11:43, Lorenzo Macchiavelli > wrote: > > > > Buongiorno Lista, > > > > qualcuno potrebbe consigliarmi un modulo di python semplice, > > per generare degli screenshot automatici di pagine web? > > > > Ho provato ChromeDriver, ma mi sembra troppo macchinoso.. > > dato che dovrei usarlo in un cron job che parte più volte al giorno, > > non vorrei finestre che si aprono.. > > > > Qualche idea? > > > Proverei questo: > > - https://pypi.org/project/pyppeteer/ > > Si basa su https://try-puppeteer.appspot.com Bello e veloce (circa 7 secondi sulla mia macchina una script da zeroper un solo sito)! bel suggerimento, l'avevo visto ma poi ho creduto fosse più veloce (da implementare) un servizio esterno mentre è veramente semplice. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Generare Screenshot automatici per pagine web
On Thu, Sep 26, 2019 at 11:43:13AM +0200, Lorenzo Macchiavelli wrote: >Buongiorno Lista, >qualcuno potrebbe consigliarmi un modulo di python semplice, >per generare degli screenshot automatici di pagine web? >Ho provato ChromeDriver, ma mi sembra troppo macchinoso.. >dato che dovrei usarlo in un cron job che parte più volte al giorno, >non vorrei finestre che si aprono.. >Qualche idea? io ho appena affrontato questo problema ed ho risolto usando servizi esteri che fanno screenshot [1]. Usando requests prelevo l'immagine. Ci mettono quasi 20 secondi (varia da sito a sito). Normalmente non sono gratuiti ma ti danno 100/250 screenshot gratuite al mese. Dipende da quante screenshot devi fare tu... sandro *:-) [1] https://underconstructionpage.com/best-site-screenshot-api-services/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] problemi di importazione modulo python
On Mon, Aug 12, 2019 at 05:54:45PM +0200, Riccardo mancuso wrote: >Ciao a tutti, >ho un comportamento strano circa l'import di un modulo (pyexcel): se lo >carico dalla bash di python mi dice che è inesistente, se lo carico da "la bash di Python..." mi manca! *:-) >"ipython" invece non mi dà errore. >E questo vale per tutti i nuovi moduli che vado ad installare (mediante >pip). io confronterei i due risultati di sys.path, ti accorgerai sicuramente che sono due environment differenti. Se usi virtualenv ci scommetto che uno è dentro e l'altro no... sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Ricerca e sostituzione con regex
On Wed, Jun 19, 2019 at 10:24:47PM +0200, Daniele Zambelli wrote: > Il giorno mar 18 giu 2019 alle ore 16:46 Lorenzo Buonanno > ha scritto: > > > > Perché contiene un carattere che hai imposto di escludere in [^\$], c'è una > > ragione per cui invece di escludere caratteri dentro la stringa non puoi > > usare espressioni non greedy come suggerito più volte in questo thread? > > La ragione è che non avevo capito. Combinando la tua dritta con quella > di Marco ho ottenuto questo: > > ... > result = re.sub(r"(? input_text, flags=re.S) > result = re.sub(r"(? result, flags=re.S) > ... > posso solo suggerire che per aumentare la leggibilità puoi usare re.VERBOSE (*) che ti permette di scrivere il pattern su più righe con i commenti: pattern = re.compile(''' (?https://docs.python.org/3.7/library/re.html#re.VERBOSE ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Richiesta aiuto scelta tastiera.
Ciao Gabriele, On Thu, May 16, 2019 at 04:39:29PM +0200, Gabriele Battaglia wrote: > Reply to the Paolo Melchiorre's message, wrote on 16/05/2019 at 16:31: > > > >Gabriele io ti consiglierei la mia tastiera che è una Logitech K780 , > >ha il tastierino numerico, è bluetooth, la connetti a 3 dispositivi > >(ex: pc , smartphone, tv) ma per i tasti direzionali (pag su, home etc > >) devi usare un tasto di funzione e credo che manchi la > >possibilità di attivare il menu contestuale. Adesso non la ho con me > >ma quando tornerò a casa la controllo e ti scrivo. > > > Grazie Paolo. > Aspetto la tua risposta. Aimè il tasto "Applicazioni" è fondamentale perchè > simula il click destro del mouse e mi serve. Sul mio portatile Ubuntu ho rimappato AltGr (che non uso mai) con il click centrale con questa riga di comando: xmodmap -e "keycode 108 = Pointer_Button2" Cerca il keycode emesso da un tasto che non usi e fagli fare quello che vuoi... sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] lista morta...
On Tue, Apr 30, 2019 at 09:03:43AM +0200, Marco Beri wrote: >On Tue, Apr 30, 2019 at 8:58 AM Alessandro Dentella ><[1]san...@e-den.it> wrote: > > Agli antipodi di stackoverflow & co. (dove pure ho avuto una > brutta > esperienza recentemente) che favorisce la costruzione stabile di > soluzioni valide. > >Davvero? Mi spiego, ma premetto che ho un apprezzamento incondizionato per stackoverflow che considero una delle cose più intelligenti e ben riuscite che ci siano. Una piattaforma dove vincono tutti... ... però non è tutto così ho postato una domanda su come modificare programmaticamente in javascript una immagine per ottenere lo stesso effetto che si ottiene applicando la direttiva css: background-color: #076AB3; background-blend-mode: luminosity; La domanda è stata sospesa e poi chiusa (quindi ora non più visibile) nel giro di pochissimo tempo giudicando che fosse poco chiara e quando ho scritto nella sezione meta[1] per chiedere chiarimenti su cosa avesse determinato questo zelo ho ricevuto una marea (15) di downvote ed un solo commento che afferma che er tutto chiaro (ed in effetti aveva scritto una risposta). L'unico oggettiva critica era relativa al fatto che avevo fatto 2 typo nel titolo, osa che fu presa per sciatteria, ma da qui a chiudere una domanda che peraltro ha un suo interesse tecnico il passo è grande ed inspiegabile. Ho poi in seguito letto di medium un articolo che raccontava di una deriva del "potere distribuito" che permette a tutti di fare i censori altrui che aveva prodotto uno scontento ed un allontanamento dalla piattaforma. sandro https://meta.stackoverflow.com/questions/380767/really-puzzled-by-question-closure?noredirect=1#comment674160_380767 ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] lista morta...
On Mon, Apr 29, 2019 at 01:47:27PM +0200, Giovanni Porcari wrote: > Il canale di Telegram sta alla ML come uno strunz sta a un babà… molto efficace. Io non ho neanche ipotizzato di iscrivermi al canale telegram, non sopporto la chat come strumento di lavoro: 1. spinge alla domanda e risposta compulsiva invece che meditata. Al 50% delle volte quando screivo una domanda, proprio per come metto giù tuttew le informazioni perché altri le possano capire bene e per mostrare di avere già fatt una parte del percorso verso la soluzione, mi chiarisco abbastanza le idee da non avere bisogno di postare. 2. Manca di indicizzazione, quindi serve solo a chi in quel monento segue e basta 3. Spesso non si riesce neanche a seguire le risposte alle proprie domande, in quanto sono disperse in mezzo alle altre e non si riesce neanche a seguire il thread... Nei frontend uso vuejs ed in particolare vuetify che ha una chat con discord: un vero incubo! Agli antipodi di stackoverflow & co. (dove pure ho avuto una brutta esperienza recentemente) che favorisce la costruzione stabile di soluzioni valide. Della pagina fb anco sapevo l'esistenza, ma di nuovo non mipare lo strumento giusto sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] siti per apprendere Python
Ciao, da tantissimo non guardo più cosa ci sia come risorse utili per l'apprendimento di Python. Ho avuto un paio di richieste da persone completamente digiune di programmazione, avete suggerimenti, magari che guidino anche con esercizi? So che alcuni in lista insegnano alle superiori, magari hanno meglio idea dei problemi di chi approccia da zero... sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Sintassi sconosciuta...
Ciao a tutti, mi sono accorto dopo tanti anni di uso di Python di non avere idea di questa sintassi: [tmp_loc] = glob.glob(os.path.join(tmp_dest, '*')) che trovate usata qui: https://github.com/buildout/buildout/blob/master/src/zc/buildout/easy_install.py#L1740 Che cosa fa? che senso ha usarla quando mi vengono in mente vari altri modi di ottenere quello che (forse, penso) faccia. Soprattutto, quella riga st creandomi problemi... Chi mi sa illuminare? Grazie sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] tutorial linguaggio
On Sat, Jul 14, 2018 at 06:21:55PM +, Luigi Russo wrote: > Il 14/07/2018 19:00, laziale ha scritto: > > scusa luigi, mi spiegheresti cosa fa il programma biblos? > > è tipo winguido o tipo nvda? > > mi spiego, ho un sito che mi interessa, ma purtroppo come sai, anzi spero > > di essere smentita volentieri, comunque, come sai noi non vedenti il > > linguaggio nella quale è scritta la parte che mi interessa è scritta in > > flash, appunto linguaggio da noi non utilizzabile. > > se questo biblos mi risolve questo problema lo scarico anche subito! :D > > Luigi: > Biblos non è un lettore di schermo ma un Word Processor, per intenderci, > è l'equivalente di Word e affini ma permette anche di stampare in > Braille e fa altre mille mila cose, ovviamente riferite all'ambito della > videoscrittura. > Per noi Flash non sarà mai accessibile perché è tutto grafico, inutile > perderci del tempo. > Detto questo, se hai altre domande scrivi in privato dato che siamo > andati fuori tema direi. Forse siete parzialmente fuori tema, ma a me che spesso creo interfacce web, non dispiace avere uno stimolo che mi ricorda che altri fan fatica... e che un po' di attenzione in più può facilitarli... sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] class import path
On Tue, Jun 12, 2018 at 10:44:50PM +0300, Matteo Perini wrote: > ciao a tutti, > > ho un progetto che contiene una serie di sub-directory (diciamo src e lib). > > ora in un file project/src/file1.py avrei bisogno di una classe (myclass) > che è presente in project/lib/class.py > > come posso importarla? > > > se il file è nella stessa directory scrivo: > > from class import myclass > > se è in una sub-directory scrivo: > > from sub-directory.class import myclass > > > Ma nel caso sopra? tutto dipende da come hai impostato il sys.path. [i nomi mi pare che siano troppo generici per essere utili ed espressivi, ipotizzo che siano nomi utilizzati solo nell'esempio, rinominiamo class.py in my_class.py comunque per evitare "from class import..."] Con una struttura come questa, che non reputo molto standard, farei in modo che il sys.path comprenda sia project/src che project/lib, quindi da file1 potresti fare direttamente: from my_class import MyClass Dico che non la reputo std perché i sorgenti vengono messo o in lib o in src (solo per convenzione, non per necessità): perché separarne una parte di qui ed una li là? le librerie non sono esse stesse dei sorgenti? perché non fare src/file1.py src/lib/... bada che questa differente struttura non è "migliore" e non risolve nessun problema di per sè, solo a me sembra più logica. Un file con nome 'class.py' va assolutamente evitato, a meno che non cerchi guai, manda in confusione il sistema delle importazioni (provalo!). È più ragionevole che il nome del file suggerisca già la funzione (nel senso lato). Anche le cartelle hanno spesso il nome che già indica cosa contengono (es.: django.contrib.auth) sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] pipenv (Was: Xkcd again)
On Fri, May 04, 2018 at 11:35:03AM +0200, Raffaele Salmaso wrote: >2018-05-04 11:07 GMT+02:00 Alessandro Dentella <[1]san...@e-den.it>: > > On Fri, May 04, 2018 at 10:29:56AM +0200, Raffaele Salmaso wrote: > >2018-05-01 8:59 GMT+02:00 Alessandro Re > <[1][2]akirosspo...@gmail.com>: > > > >[2][3]https://github.com/pypa/pipenv ci darà un futuro > migliore? :) > > > >No > Lo dici perché è solo un elemento in un groviglio di strumenti o > perché ne conosci i limiti? Se ne vedi limiti puoi raccontarli? > >Più che altro è un tool che usa pip e i virtualenv alla base, >quindi non vedo come possa essere differente da adesso, se non >automatizzando il processo >(io lo faccio già: personalmente installo i programmi in un virtualenv >dedicato al singolo programma, ma nulla può evitare una situazione del >genere anche se in un virtualenv [4]https://blog.npmjs.org/post/ >173526807575/reported-malicious-module-getcookies ) Speravo, -ma non ho ancora avuto tempo di indagare- che pipenv graph risolvesse il probema di cosa hai installato e cosa era una dipendenza. Trovo che troppi sviluppatori si affidano erroneamente al requirements.txt che è una fotografia di uno stato funzionanate e nulla ha anche fare con i vincoli di dipendenza. Speravo -dal nome- che tenesse traccia di cosa ho richiesto esplicitamente e cosa è stato installato per dipendenza. Cosa perfettamente funzionante ad esempio in apt-get. Io personalmente uso solo buildout che mi risulta molto, molto più chiaro, ricalcola le dipendenze ogni volta e mi contringe ad avere un setup.py corretto, pena la non installazione dei pacchetti. Ad altri la precisione sta stretta... >A naso, non ho ancora provato, solo guardato la >doc, [5]https://poetry.eustace.io/ mi sembra più promettente come tool. che, come l'altro alla fine è basato su virtualenv...: When you execute the install command (or any other "install" commands like add or remove), Poetry will check if it's currently inside a virtualenv and, if not, will use an existing one or create a brand new one for you to always work isolated from your global Python installation. sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Xkcd again
On Fri, May 04, 2018 at 10:29:56AM +0200, Raffaele Salmaso wrote: >2018-05-01 8:59 GMT+02:00 Alessandro Re <[1]akirosspo...@gmail.com>: > >[2]https://github.com/pypa/pipenv ci darà un futuro migliore? :) > >No Lo dici perché è solo un elemento in un groviglio di strumenti o perché ne conosci i limiti? Se ne vedi limiti puoi raccontarli? Proprio in questi giorno pensavo di guardarlo un po' da vicino per capire se apporta miglioramenti a pip che considero veramente origine di molti problemi. sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uso di str.format
On Thu, May 03, 2018 at 11:20:04AM +0200, Massimiliano Rosi wrote: > Ciao a tutta la lista, > vi chiedo un consulto, sull'utilizzo di str.format, cioè: > > '{:.2f}'.format(55.6789) > ritorna: > '55.68' > > è possibile modificare a runtime quante cifre dopo la virgola > visualizzare? Ho tentato (sicuramente sbagliando), ad utilizzare > qualcosa del tipo: > > '{:g}'.format(55.6789, g=':.2f') > il cui risultato è: > 55.6789 Format specifiers can themselves contain replacement fields. For example, a field whose field width is itself a parameter could be specified via: In [3]: "{0:.{1}f}".format(3.14185, 2) Out[3]: '3.14' La frase è presa da qui: https://www.python.org/dev/peps/pep-3101/ sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] ValueError: embedded null byte
On Wed, Apr 04, 2018 at 12:05:44PM +0200, Gollum1 wrote: > Il 4 aprile 2018 08:56, Alessandro Dentella <san...@e-den.it> ha scritto: > > >> camera = "DigitalDigital HH" > > > > Se fosse veramente quello il valore della variabile 'camera' non ci > > sarebbero problemi: > > > >$ ipython3 > > > >In [1]: import os > > > >In [2]: camera = "DigitalDigital HH" > > > >In [3]: os.path.exists(os.path.join('/tmp', camera)) > >Out[3]: False > > > > Per prima cosa aggiungerei nel try/except: > > > >import ipdb; ipdb.set_trace() > > questo non mi funziona, non ho il modulo installato evidentemente, > provvederò quanto prima. vitale per un debug efficace: pip install ipdb > > così sperimenti direttamente e ti fai un'idea chiara. > > len(camera) ti restituisce 17 o la variabile ha qualche carattere non > > rappresentato magari nella tua codifica? > > bella lì... mi len mi dice che è lungo 32 caratteri... :O > > > Prova con repr(camera) > > (32) - DigitalDigital HH > 'Digital\x00\x00Digital > \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00' > > eccolo lì... e spiegato anche il motivo per cui anche facendo uno > split sullo spazio, in realtà non risolvevo il problema, non è > visibile, ma rompe... > > esiste un qualche comando che mi permetta di "sanare" una stringa così > fatta? un camera.encode(utf8) potrebbe essere la soluzione? In [2]: import re In [3]: camera = 'Digital\x00\x00Digital \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00' In [4]: c2 = re.sub('[^a-zA-Z0-9_ ]', '', camera) In [5]: len(c2) Out[5]: 17 In [6]: c2 Out[6]: 'DigitalDigital HH' In [7]: len(camera) Out[7]: 32 *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] ValueError: embedded null byte
> quando però vado a fare le seguenti istruzioni, per verificare se > esiste la directory, prima di crearla, quando incontra un particolare > file, mi crasha, con il seguente errore: > > Traceback (most recent call last): > File "./RinominaFoto.py", line 80, in > scan_dir(args) > File "./RinominaFoto.py", line 67, in scan_dir > if not os.path.exists(os.path.join(args['destdir'], camera)): > File "/usr/lib/python3.6/genericpath.py", line 19, in exists > os.stat(path) > ValueError: embedded null byte > > la riga incriminata è ovviamente: > > if not os.path.exists(os.path.join(args['destdir'], camera)): > > e presumo che l'errore stia nella varibile camera. > > in questo particolare file il valore, subito prima di crashare è il seguente: > > camera = "DigitalDigital HH" Se fosse veramente quello il valore della variabile 'camera' non ci sarebbero problemi: $ ipython3 In [1]: import os In [2]: camera = "DigitalDigital HH" In [3]: os.path.exists(os.path.join('/tmp', camera)) Out[3]: False Per prima cosa aggiungerei nel try/except: import ipdb; ipdb.set_trace() così sperimenti direttamente e ti fai un'idea chiara. len(camera) ti restituisce 17 o la variabile ha qualche carattere non rappresentato magari nella tua codifica? Prova con repr(camera) L'istruzione va in eccezione anche nel debugger? > except OSError: > import ipdb; ipdb.set_trace() > continue sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] uwsgi e problemi di import... da un giorno all'altro...
Buonasera a tutti, la settimana scorsa mi sono successi 3 casi problematici di deploy di applicazioni django con uwsgi identici e per me assolutamente inspiegabili al momento. Gradirei molto lumi su come procedere per indagare cosa sia la causa. Nella stessa settimana 3 applicazioni django ancora con Python 2, che stavano funzionando correttamente da mesi/anni su server Debian jessie (2) e Ubuntu 16.04 (1) con uwsgi-emperor ad un reload di uwsgi (touch del file .ini) o al reboot accidentale del server (ubuntu) hanno smesso di funzionare scrivendo nei log che non trovavano alcuni pachetti (vedi sotto). Nello stesso momento anche reinstallando il risultato era il medesimo, mentre applicazioni con Python3 continuavano a funzionare e la soluzione è stata di fare il porting a Python3. In un caso ho un server di test dove funziona ancora la versione con python2 ed ho analizzato con grande cura ogni dettaglio per capire le differenze senza trovarle. È facile pensare che ci sia stato un aggiornamento di software che ha impattato negativamente ma ho verificato con meticolosità ogni cosa che mi viene in mente ed inoltre django con il suo runserver funziona senza problema (dj check, dj shell, dj runserver...), ho anche verificato che il problema sussiste sia con uwsgi 2.0.7, 2.0.12 e 2.0.17 Scrivo di seguito il dettaglio della configurazione di uwsgi ed il file django.wsgi che uso. La configurazione ha funzionato egregiamente per tanti anni e sta funzionando per svariate decine di altri server. Apprezzo qualunque suggerimento di analisi da provare. Non sapere cosa succeda mi lascia molto sulle spine... sandro *:-) Conf uwsgi -- [uwsgi] env = DJANGO_SETTINGS_MODULE=web.settings env = HOME=/tmp env = LC_ALL=it_IT.UTF-8 prj_dir = /home/www/www2015.xxx.it wsgi-file = %(prj_dir)/bin/django.wsgi socket = /var/run/uwsgi/extra.sock pidfile = /var/run/uwsgi/extra.pid socket-timeout = 200 buffer-size = 1 processes = 2 threads = 1 uid = www-data gid = www-data req-logger = file:/var/log/uwsgi/extra-access.log logger = file:/var/log/uwsgi/extra-errors.log touch-logreopen = /var/log/uwsgi/touch-logrotate chmod-socket= 664 plugins = python,logfile django.wsgi --- #!/home/www/.base2/bin/python import sys sys.path[0:0] = [ '/home/www/.buildout/eggs/Django-1.8.16-py2.7.egg', '/home/www/.buildout/eggs/ipython-2.4.1-py2.7.egg', '/home/www/.buildout/eggs/Sphinx-1.4.6-py2.7.egg', '/home/www/.buildout/eggs/nose-1.3.7-py2.7.egg', '/home/www/.buildout/eggs/ipdb-0.10.1-py2.7.egg', '/home/www/.buildout/eggs/ipdbplugin-1.4.5-py2.7.egg', '/home/www/.buildout/eggs/django_nose-1.4.4-py2.7.egg', '/home/www/.buildout/eggs/psycopg2-2.6.2-py2.7-linux-x86_64.egg', '/home/www/.buildout/eggs/django_debug_toolbar-1.5-py2.7.egg', '/home/www/.buildout/eggs/Werkzeug-0.11.11-py2.7.egg', '/home/www/.buildout/eggs/cloud_sptheme-1.7.1-py2.7.egg', ... '/home/www/.buildout/eggs/django_appconf-1.0.1-py2.7.egg', '/home/www/.buildout/eggs/contextlib2-0.5.4-py2.7.egg', '/home/www/.buildout/eggs/pytz-2016.6.1-py2.7.egg', '/home/www/.buildout/eggs/MarkupSafe-0.23-py2.7-linux-x86_64.egg', '/home/www/.buildout/eggs/PyYAML-3.12-py2.7-linux-x86_64.egg', '/home/www/.buildout/eggs/cssselect-0.9.2-py2.7.egg', '/home/www/.buildout/eggs/lxml-3.6.4-py2.7-linux-x86_64.egg', '/home/www/.buildout/eggs/python_dateutil-2.6.0-py2.7.egg', '/home/www/www2015.unicasim.it/web/apps', ] import djangorecipe.binscripts application = djangorecipe.binscripts.wsgi('web.settings', logfile='') - interprete django (equivalente a manage.py) = quello che funziona - identico al precedente tranne per il finale: if __name__ == '__main__': sys.exit(djangorecipe.binscripts.manage('web.settings')) -- il log dell'errore di uwsgi -- Mon Mar 26 21:05:31 2018 - received message 0 from emperor SIGINT/SIGQUIT received...killing workers... worker 1 buried after 1 seconds worker 2 buried after 1 seconds goodbye to uWSGI. *** Starting uWSGI 2.0.17 (64bit) on [Mon Mar 26 21:05:38 2018] *** compiled with version: 4.9.2 on 26 March 2018 13:42:02 os: Linux-3.16.0-4-amd64 #1 SMP Debian 3.16.39-1 (2016-12-30) nodename: template-web machine: x86_64 clock source: unix detected number of CPU cores: 1 current working directory: /etc/uwsgi-emperor/vassals-enabled writing pidfile to /var/run/uwsgi/extra.pid detected binary path: /usr/local/bin/uwsgi !!! no internal routing support, rebuild with pcre support !!! your processes number limit is 11962 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) uwsgi socket 0 bound to UNIX address
Re: [Python] ciao sono nuovo, ma si trova la documentazione ?
On Tue, Feb 27, 2018 at 06:20:14PM +0100, Iguana Igua wrote: > Se lo assegni ad un nome locale poi il tab ti mostra l'attributo > documentation. > >ok, ho capito. >ma non ho capito la logica per arrivare al metodo. Facciamo le cose al >contrario. >Per esempio io voglio conoscere la descrizione di un pacchetto. >So che il pacchetto è python2.7 e che lo trovo dentro la cache. >Quindi: >cache=apt.Cache() >pkg=cache['python2.7'] >e da qui come arrivo a: >pkg.version[0].description >? >cioè come faccio a trovare description ? > Senza avere visto cosa fa il tuo comando, credo che ti stia suggerendo di fare: >pkg.version[0].description pkg_version = pkg.version[0] a questo punto, dentro ipython, puoi usare la tabulazione ed il '?' in fondo per avere completamento ed informazioni. Il meccanismo funziona se hai notazione puntata, ma non espande se hai un un indice []. sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uwsgi 3.6 su Debian stretch
Ciao Paolo, > Non conoscevo la guida che hai indicato per installare Python 3.6 su > Debian Stretch. > > Alla fine ha funzionato tutto nel tuo caso ? Nel caso aggiornerei la mia > guida. si, fermandosi all'output che usi come test. Non ho potuto verificare poi l'applicazione reale (django) perché uso una wheel di psycopg2 che mi sta dando problemi (ma indipendenti da uwsgi, li dà anche da console) > Potresti confermarmi che hai seguito questi passaggi ? > > $ sudo apt-get install python3.6 python3.6-dev \ > > uwsgi uwsgi-src uuid-dev libcap-dev libpcre3-dev > $ cd ~ > $ export PYTHON=python3.6 > $ uwsgi --build-plugin "/usr/src/uwsgi/plugins/python python36" > $ sudo mv python36_plugin.so /usr/lib/uwsgi/plugins/python36_plugin.so > $ sudo chmod 644 /usr/lib/uwsgi/plugins/python36_plugin.so > > E se tutto funziona potresti incollarmi il risultato del comando Confermo tutto, ecco l'output: root@thux-suite:~# uwsgi --plugin python36 -s :0 *** Starting uWSGI 2.0.14-debian (64bit) on [Thu Feb 22 08:12:54 2018] *** compiled with version: 6.2.1 20161124 on 07 December 2016 16:14:59 os: Linux-4.9.0-5-amd64 #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04) nodename: thux-suite machine: x86_64 clock source: unix pcre jit disabled detected number of CPU cores: 2 current working directory: /root detected binary path: /usr/bin/uwsgi-core uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** *** WARNING: you are running uWSGI without its master process manager *** your processes number limit is 23773 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) uwsgi socket 0 bound to TCP address :38685 (port auto-assigned) fd 3 Python version: 3.6.3 (default, Nov 24 2017, 00:15:12) [GCC 6.3.0 20170516] *** Python threads support is disabled. You can enable it with --enable-threads *** Python main interpreter initialized at 0x557217132ad0 your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 72768 bytes (71 KB) for 1 cores *** Operational MODE: single process *** *** no app loaded. going in full dynamic mode *** *** uWSGI is running in multiple interpreter mode *** spawned uWSGI worker 1 (and the only) (pid: 6279, cores: 1) Grazie a te per la guida! -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] uwsgi 3.6 su Debian stretch
Ciao Paolo, Grazie, ho risolto, sotto lo spiego... On Wed, Feb 21, 2018 at 05:44:28PM +0100, Paolo Melchiorre wrote: > 2018-02-21 17:28 GMT+01:00 Alessandro Dentella <san...@e-den.it>: > > vorrei passare alla 3.6 in produzione dove uso uwsgi (+ nginx) su > > debian stretch. > > > > Pensavo di potere adattare i suggerimenti di Paolo Melchiorre [1] per > > Ubuntu, ma ho dei problemi... in realtà vedo che i problemi ci sono > > ancora prima di compilare uwsgi... il modo di testare la versione di > > Python di un plugin che lui suggerisce è: > > > >uwsgi --plugin python36 -s :0 > > > > che mi funziona su ubuntu ma non su Debian, non trova mai > > il plugin (anche se poi funziona nel setup reale):: > > > > root@thux-dev-stretch:~# uwsgi --plugin python3 -s :0 > > open("./python3_plugin.so"): No such file or directory [core/utils.c line > > 3686] > > !!! UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared > > object file: No such file or directory !!! > > > > Qual'è il modo corretto di testare quale interprete usa e qual'è il > > modo corretto di generare un plugin per uwsgi + python3.6 su debian > > stretch? > > [1] > > http://www.paulox.net/2017/04/04/how-to-use-uwsgi-with-python3-6-in-ubuntu/ > > Ciao Alessandro, > > La guida che ho scritto credo sia specifico per Ubuntu che nelle > versioni 16.10 e 17.04 ha avuto in contemporanea python 3.5 di default > e python 3.6 opzionale. In questo contesto il plugin python3 era > compilato con python3.5 e quindi ho dovuto installare python3.6 (come > descritto nella guida) e poi compilare un plugin apposito. > > Come puoi vedere per Ubuntu esiste il pacchetto python3.6 > https://packages.ubuntu.com/search?suite=all=names=python3.6 > mentre non esiste per Debian > https://packages.debian.org/search?suite=stable=all=any=names=python3.6 > > Le alternative che hai per usare uwsgi e python3.6 mi sembrano 2: > - aggiornare a Debian Buster che ha python3.6 > https://packages.debian.org/buster/python3 > - installare python3.6 su Debian Stretch diversamente, ma in questo la > mia guida poi non credo ti sarà troppo utile Python3.6 l'ho installato da qui [1] e con quello installato la tua guida funziona correttamente. Il mio problema era che avevo un uwsgi installato a mano (penso per errore, non me ne ricordavo), quindi non vedeva i plugin ma da riga di comando prevaleva sul path di quello ufficiale che invece veniva utilizzato (correttamente) da uwsgi-emperors Ora sono in una situazione in cui ho i pacchetti che indichi nel post e sono riuscito a compilarlo ed il test che hai indicato funziona e mostra che sto usando Python 3.6.3. Immagino che ora mi funzioni, vado a provare... sandro [1] https://github.com/chriskuehl/python3.6-debian-stretch ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] uwsgi 3.6 su Debian stretch
Ciao, vorrei passare alla 3.6 in produzione dove uso uwsgi (+ nginx) su debian stretch. Pensavo di potere adattare i suggerimenti di Paolo Melchiorre [1] per Ubuntu, ma ho dei problemi... in realtà vedo che i problemi ci sono ancora prima di compilare uwsgi... il modo di testare la versione di Python di un plugin che lui suggerisce è: uwsgi --plugin python36 -s :0 che mi funziona su ubuntu ma non su Debian, non trova mai il plugin (anche se poi funziona nel setup reale):: root@thux-dev-stretch:~# uwsgi --plugin python3 -s :0 open("./python3_plugin.so"): No such file or directory [core/utils.c line 3686] !!! UNABLE to load uWSGI plugin: ./python3_plugin.so: cannot open shared object file: No such file or directory !!! Qual'è il modo corretto di testare quale interprete usa e qual'è il modo corretto di generare un plugin per uwsgi + python3.6 su debian stretch? sandro *:-) [1] http://www.paulox.net/2017/04/04/how-to-use-uwsgi-with-python3-6-in-ubuntu/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] threading, local() and uwsgi: how protected is local()? - RITENTO
Ciao Marco, grazie per la risposta e l'attenzione. > > al lavoro abbiamo avuto una interessante discussione su un modo di > > tenere in Django una informazione sempre disponibile (request / user e > > recentemente un 'dominio'). > > > > Una soluzione a volte considerata "da evitare" ma che ci è sempre > > andata bene è stata fatta seguendo un vecchio snippet di Django [2 - > inizio] > > che immagazzina i dati in threading local(). > > > > Quello che mi ha fatto balzare sulla sedia ieri è che un collega mi ha > > mostrato un post [1] su StackOverflow dove si dice che uwsgi non > > garantisce che quello che si mette in local() non sia condiviso fra > > thread differenti... nonostante la documentazione Python dica: > > > >Thread-local data are data whose values are thread specific > > > > > > In una pagina citata in questo post [2] si espone una situazione molto > > simile alla mia, ma non vedo una risposta soddisfacente sul fatto che > > sia in effetti vero > > > > * che uwsgi forza un uso condiviso della ram fra thread differenti e > > * se esiste un modo per bypassarlo > > > > io ho spesso in uwsgi.ini (ma ho anche occasionalmente di più): > > > > threads: 1 > > processors: 2 > > > > È questo che mi ha salvato fino ad oggi? > > > > > > sandro > > *:-) > > > > > > PS: tecnicamente io scrivo nel _thread_local tramite middleware ad > > ogni request, non esiste possibilità che resti il vecchio nella > > nuova request > > > Ciao Alessandro, > > incuriosito dalla tua domanda e partaggiando il tuo stesso stupore ho > fatto qualche ricerca. > > Prima di tutto vorrei iniziare dicendo che faccio piu' confidenza al > gruppo di unbit piuttosto che al commento di qualcuno in un sito. Mi > sembrava di aver letto nella documentazione di uWSGI che l'obiettivo > principale di uWSGI sia la correttezza, le performance vengono dopo. > Ovviamente non ritrovo la frase in questione ma che cambino la semantica > di threading.local per ragioni di performance mi sembra un suicidio. Se > fai un veloce grep nel codice di Django ti accorgerai che Django stesso > usa local() internamente. > > Per scrupolo ho fatto una piccola ricerca nei sorgenti di uWSGI e non > trovo conferma di una simile castroneria. > > Sono gia' bloccato, non so' piu' come continuare. Sono stati portati > esempi concreti a supporto della tesi? No. > > Allego due file di test e come puoi verificare e threading.local > funziona esattamente come ci si aspetterebbe. Avendo sollecitato Roberto De Ioris anche in privato, mi ha in effetti risposto: Ciao, di solito si usano i thread local per avere dati NON-condivisi tra i thread. Se e' il tuo caso, allora puoi usarli senza problemi a patto che abiliti il GIL in uWSGI con --enable-threads. Va da sè che se non abilito --enable-threads, problema non ne ho, visto che non uso threads... e --threads imploca --enable-threads. > In realta' e' l'altro risultato che mi lascia dei dubbi, quando > threading.local non e' usato. Qui ti ho perso... quale sarebbe "l'altro risultato"? sandro *:-) ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] threading, local() and uwsgi: how protected is local()? - RITENTO
*** Rimando nella speranza che qualcuno legga e desideri e magari stia cercando di combattere la noia... *** Ciao, [disclaimer: si parla di Django ma il tema mi pare più generale poi si parla di uwsgi e mi pare che Roberto qui legga...] al lavoro abbiamo avuto una interessante discussione su un modo di tenere in Django una informazione sempre disponibile (request / user e recentemente un 'dominio'). Una soluzione a volte considerata "da evitare" ma che ci è sempre andata bene è stata fatta seguendo un vecchio snippet di Django [2 - inizio] che immagazzina i dati in threading local(). Quello che mi ha fatto balzare sulla sedia ieri è che un collega mi ha mostrato un post [1] su StackOverflow dove si dice che uwsgi non garantisce che quello che si mette in local() non sia condiviso fra thread differenti... nonostante la documentazione Python dica: Thread-local data are data whose values are thread specific In una pagina citata in questo post [2] si espone una situazione molto simile alla mia, ma non vedo una risposta soddisfacente sul fatto che sia in effetti vero * che uwsgi forza un uso condiviso della ram fra thread differenti e * se esiste un modo per bypassarlo io ho spesso in uwsgi.ini (ma ho anche occasionalmente di più): threads: 1 processors: 2 È questo che mi ha salvato fino ad oggi? sandro *:-) PS: tecnicamente io scrivo nel _thread_local tramite middleware ad ogni request, non esiste possibilità che resti il vecchio nella nuova request [1] https://stackoverflow.com/questions/3227180/why-is-using-thread-locals-in-django-bad [2] https://www.pythonanywhere.com/forums/topic/710/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] threading, local() and uwsgi: how protected is local()?
Ciao, [disclaimer: si parla di Django ma il tema mi pare più generale poi si parla di uwsgi e mi pare che Roberto qui legga...] al lavoro abbiamo avuto una interessante discussione su un modo di tenere in Django una informazione sempre disponibile (request / user e recentemente un 'dominio'). Una soluzione a volte considerata "da evitare" ma che ci è sempre andata bene è stata fatta seguendo un vecchio snippet di Django [2 - inizio] che immagazzina i dati in threading local(). Quello che mi ha fatto balzare sulla sedia ieri è che un collega mi ha mostrato un post [1] su StackOverflow dove si dice che uwsgi non garantisce che quello che si mette in local() non sia condiviso fra thread differenti... nonostante la documentazione Python dica: Thread-local data are data whose values are thread specific In una pagina citata in questo post [2] si espone una situazione molto simile alla mia, ma non vedo una risposta soddisfacente sul fatto che sia in effetti vero * che uwsgi forza un uso condiviso della ram fra thread differenti e * se esiste un modo per bypassarlo io ho spesso in uwsgi.ini (ma ho anche occasionalmente di più): threads: 1 processors: 2 È questo che mi ha salvato fino ad oggi? sandro *:-) PS: tecnicamente io scrivo nel _thread_local tramite middleware ad ogni request, non esiste possibilità che resti il vecchio nella nuova request [1] https://stackoverflow.com/questions/3227180/why-is-using-thread-locals-in-django-bad [2] https://www.pythonanywhere.com/forums/topic/710/ ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] R: Packt Free Learning of the Day
On Mon, Aug 28, 2017 at 04:20:16PM +0200, Carlos Catucci wrote: > ma di fatto sto violando i loro termini. In > > allegato, riporto lo screenshot della conversazione (avvenuta sulla > > pagina Facebook di Packt) > > E' solo che non ha nessuna logica. Potrei capire se dicessero: puoi > scambiarli SOLO con latre persone registrate al servizio. > Sara' una mia deforazione professionale ma lo trovo illogico. Tutto qui. Io lo trovo perfettamente logico. Fra le cose per cui mi pare logico c'è il fatto che abbiano voglia di tenere traccia di cosa viene letto e preferito. Potrebbero anche avere un accordo con l'autore per cui se il libro viene molto apprezzato (=scaricato) gli riconoscono qualcosa anche se scaricato gratuitamente. Se mettono un libro in dowload gratuto possono comunque trarre beneficio dal fatto che il sito viene visitato, che raccolgono informazioni e la tua mail, che profilano le cose che ti interessano e quindi ti riempiranno di promozioni per i secoli dei secoli (nulla viene fatto solo per la tua gioia, e non lo dico in modo critico), quindi è perfettamente logoco che lo scambio non sia accettabile dal punto di vista del marketing che è l'unica cosa che spinge a metterlo a disposizione gratuitamente. Il fatto che le copie siano facilmente replicabili non c'entra nulla. Anche le fotocopie hanno un costo zero per l'editore, questo non le rende per questo legali... sandro ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] OT - Macchina Virtuale su Cloud
On Thu, Jul 27, 2017 at 12:17:56AM +0200, Christian Barra wrote: > Hello, > > > On 27 Jul 2017, at 00:09, Mirko Benedettiwrote: > > > > Ammettiamo che acquisti una macchina virtuale in cloud, presso un provider > > come 1&1 o Aruba, per fare dei test credo che siano sufficienti, se dovessi > > spedire una mail da questo server, dovrei mettere su un server di posta > > smtp, oppure che voi sappiate ci si può appoggiare su un server > > dell'hoster, esistono hoster che lo fanno, si può fare? > > Prova Digital Ocean o Vultr (non ho idea di quanto siano macchinosi 1&1 e > Aruba). > > Per l’email puoi utilizzare servizi come mailgun o altri (devi avere un > dominio). io da anni uso con grande soddistazione Contabo [1]. Sono tedeschi e sono imbattibili nel prezzo: 8 core + 12 GB RAM + 300 GB SSD a 9 Euro/mese. Per la posta uso invece sparkpost [2]: 100.000 mail al mese gratuite! Servizio impeccabile ed istantaneo. Fanno anche rendering dei template. sandro [1] http://www.contabo.com/?show=vps [2] http://sparkpost.com/ -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Print con end=""
On Fri, Jun 09, 2017 at 11:56:01PM +0200, Gabriele Battaglia wrote: >Buona sera. > >Per impedire l’andata a capo del cursore, dopo aver visualizzato >qualcosa in console con print, da python 2 io facevo così: > >senza la __future__ print > >print “Qualcosa”, > >print “ qualcos’altro” > >Con la funzione importata dal module __future__ > >print(“qualcosa”,end=“”) > >print(“ qualcos’altro”) > >Da Python 3 invece, il secondo metodo, che mi aspettavo funzionasse, >non va e mi ritorna un errore di sintassi. A me no (sempre in py3): In [2]: print("oky doc", end="") oky doc In [3]: print("qualcos'altro") qualcos'altro Gli apici al contrario che hai sono stati messi nel copia ed incolla o ce li hai nel codice? sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Python e Emacs
On Sat, Apr 22, 2017 at 10:41:27PM +0200, Fundor333 wrote: >Grazie ai vostri suggerimenti e alcuni consigli ricevuti al Pycon ho >iniziato a usare pesantemente Emacs come editor per Python (e tutto il >resto). > >Avete qualche pacchetto da consigliare per lo sviluppo di codice >Python? Per ora le mie configurazioni di Emacs sono disponibili al link >[1]https://github.com/fundor333/emacs.d e spero di poterle espanderle >per essere più produttivo mi pare una configurazione ancora molto minimalista... Come già suggerito in passato, io mi trovo molto bene con helm e helm-projectile che hanno una bellissima documentazione di tutto quello che possono fare: http://tuhdo.github.io/helm-projectile.html per il completamento uso jedi https://github.com/tkf/emacs-jedi sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] interfacciarsi ad api dns/domini aruba da python
Buongiorno, per errore ho inviato questa mail alla lista django, vediamo se qui ho più fortuna... qualcuno ha degli esempi Python per interfacciarsi alle api aruba [1]. È pubblicizzata anche una versione rest [2] (con tanto di libreria Python [2]) ma mi pare limitata alla creazione delle VM. Mi piacerebbe usare gandi.net che documenta bene anche in Python ma i prezzi dei domini .it su gandi.net sono sempre maggiori e mai scontati... sandro [1] http://kb.cloud.it/api/domini-e-dns.aspx [2] http://kb.cloud.it/sviluppatori/api-rest/api-rest.aspx [3] https://github.com/Arubacloud/pyArubaCloud -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Help me with PG JSON e Django
On Tue, Dec 27, 2016 at 10:03:59PM +0100, Carlos Catucci wrote: > Secondo il manuale di Django, versione 1.9, si possono definire, > previa importazione dellì'apposito contrib (from > django.contrib.postgres.fields import JSONField) dei campi json in una > tabella. > Ed in effetti la creazione (Blocks.objects.create()) funziona benissimo. > I dolori vengono al momento di recuperare di dati immagazzinati in > questa struttura JSON. > A sentire il manuale sarebeb tutto semplice e pulito > > Dog.objects.filter(data__breed='collie') > > oppure per casi complessi > > Dog.objects.filter(data__contains={'owner': 'Bob'}) > > Peccato che pur provando e riprovando i dati non vengno recuperati mai. > > La struttura del model e' la seguente: > > class Blocks(models.Model): > agency = models.ForeignKey("users.Agencies") > agency_code = models.CharField(max_length=30) > rent_sale = models.CharField(max_length=1,choices=RENT_SALE) > search_offer = models.CharField(max_length=1,choices=SEARCH_OFFER) > block_type = models.CharField(max_length=100) > location = models.CharField(max_length=200) > customer_price = models.FloatField(default=0.0) > agency_price = models.FloatField(default=0.0) > details = JSONField() > active = models.BooleanField(default=True) > deleted = models.BooleanField(default=False) > > Questo un esempio di inserimento > > Blocks.objects.create(agency_id=1,agency_code='C0001',rent_sale='1',search_offer='2',block_type='appartamento',location='pescara',customer_price=10.0,agency_price=8.0, > active='t',deleted='f',details= {'block_details': [{"details": {"mp": > "M", "mq": "80:", "qta": "2:"}, "attribute": "camera da letto"}, > {"details": {"mp": "M", "mq": "80:", "qta": "2:"}, "attribute": > "camera da letto"}, {"details": {"mp": "M", "qta": "1:"}, "attribute": > "bagno"}, {"details": {"mp": "P", "yn": "Y:"}, "attribute": "posto > auto"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute": > "ascensore"}]}) > > Ma se eseguo una query tipo > > Blocks.objects.filter(details__contains={'attribute': 'bagno'}) > > ottengo indietro una lista vuota ( [] ) io confermo che questa sintassi per me funziona. Ho un caso analogo dove i dati sono: {"display_name": "Salvatore Z...", "activate_url": "https://trepalchi.it/accounts/.../;, "current_site": "trepalchi.it", "subject": "Salvatore Z... conferma la tua email per entrare nel portale Trepalchi.it", } In [1]: models.Transmission.objects.filter(substitution_data__contains={'display_name': 'Salvatore Z...'}) Out[1]: ]> Posso suggerirti di controllare: * cosa hai veramente nel db * se da prompt di pg tutto funziona (a me la parte saliente del WHERE è: WHERE "marketing_transmission"."substitution_data" @> '{"display_name": "Salvatore Z..."}' Ricordo che all'inizio avevo problemi nell'inserimento e mi finivano dentro nel valore del campo delle graffe controbarrate. Era un problema di interfaccia (admin), non di ORM a memoria. sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta dell'ide al volo
On Sat, Dec 03, 2016 at 09:28:37AM +0100, Francesco Pischedda wrote: > > > > Fra le cose che io apprezzo maggiornamente e di emacs c'è, oltre a > > questa modalità la visione a libro dei file. Ovvero la possibilità di > > dividere in due la finestra e vedere nella seconda metà la > > continuazione della prima. Ho un colpo d'occhio del codice o della > > mail che scrivo che mi aiuta molto. > > > > Questa feature è molto interessante, dove posso trovare riferimenti su come > abilitarla/usarla? https://www.emacswiki.org/emacs/FollowMode io l'ho abilitata con il tasto F12 con questa riga di configurazione: (global-set-key [f12] 'follow-delete-other-windows-and-split) Altre feature che apprezzo molto e che sono molto più standard in tanti editor è la modalità fold e outline per comprimere ed espandere rispetto a dei pattern, ad esempio di un modulo python mi piace vedere solo la definizione delle classi o solo la definizione di classi e metodi. Mi permettte nuovamente di avere un colpo d'occhio immediato (che poi unisco alla paginazione a libro) https://www.emacswiki.org/emacs/OutlineMode https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Mode.html https://www.gnu.org/software/emacs/manual/html_node/emacs/Foldout.html ma come ho già detto in altra mail, il salto a helm-projectile che ho fatto solo l'estate scorsa è stato determinante. > > Ormai Emacs (nello specifico Spacemacs + Evil mode) è il mio IDE quotidiano > anche se non riesco a vivere senza Vim quando mi trovo a lavorare su server > via ssh; Cosa ha vim che non ha emacs quando lavori via ssh? curiosità, non polemica... sandro -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta dell'ide al volo
On Fri, Dec 02, 2016 at 12:22:13PM +0100, Fundor333 wrote: > > >Proprio per questo io uso in modalità server + client. Il server > >carica in circa 3-4 secondi, quando entro nel mio desktop (circa 1 > >volta al mese) poi ogni singolo file apre in un tempo così ridicolo > >che io non avverto il minimo ritardo (ovvero << 1 secondo). A questo > >punto ho completamento e correzione in python rispetto ad un > >virtualenv di mia scelta. > Questa cosa mi interessa molto... Cos'è questa cosa di server+client? Io > sono un informatico giovane, entrato nel mondo informatico assieme a Windows > vista per cui questa cosa è nuova ed interessante per me Emacs ha internamente un server che sia avvia con il comando :server-start. A questo punto è possibile agganciarsi con il comando emacsclient che apre un nuovo frame (window). Siccome l'inizializzazione è stata già fatta dal server non hai tempi aggiuntivi. Non è diverso da quello che succede quando apri un nuovo tab in un progetto con un ide normale, solo che: * non sei limitato a quel progetto * non sei fisicamente dentro la stessa finestra * condividi lo stesso yank-rink (circa lo stesso ciclo cut & paste) quindi uoi prender cose da un file e incollarle nell'altro sempre senza usare il mouse Più tardi vedo di passareti una configurazione funzionante così puoi testare diretttamente. Fra le cose che io apprezzo maggiornamente e di emacs c'è, oltre a questa modalità la visione a libro dei file. Ovvero la possibilità di dividere in due la finestra e vedere nella seconda metà la continuazione della prima. Ho un colpo d'occhio del codice o della mail che scrivo che mi aiuta molto. Non ho mai visto questo in un altro editor (a parte libreoffice per i documenti). Quando dico "visto", mi sono limitato a chiedere a persone che utilizzato altri strumenti se ce l'hanno e nessuno ne era a conoscenza... sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta dell'ide al volo
Ciao Carlo! > > Non facciamo disinformazione, per cortesia. > > Woah woah, calma. Stavo solo trollando, ok? :P io riconosco la tua ironia, ma poi rimane questa sensazione... anche perché è una bufala che gira da sempre. Ma non mi ero accorto che il tono risultasse particolarmente rude e non era intenzione... > > Per considerarlo lento lo devi avere provato su un 386... > > In effetti era un 386SX del 1989, e con molta meno RAM degli 8MB > necessari per farlo girare fluidamente (Eight Megabytes And Constantly > Swapping ;) 8MB per un 386sx mi pare che fossero tanti (ma ho scarsa memoria). credo che negli anni '90 il mio laptop sul quale usavo regolarmente emacs fosse un 486 con 8MB di RAM... sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta dell'ide al volo
On Thu, Dec 01, 2016 at 05:19:41PM +0100, Carlo Miron wrote: > 2016-12-01 17:17 GMT+01:00 Francesco Maida: > > > Se proprio vogliamo fare l'elenco degli editor e degli IDE io butto nella > > mischia Visual Studio Code, che secondo me con il plugin per Python è > > un'editor decente. Non ho provato mai a scriverci niente di più complesso di > > uno script di 50 righe, ma mi sembrava buono e più reattivo rispetto a suo > > "cuggino" Atom (entrambi sono basati sul framework Electron). > > Ed entrambi più lenti di emacs, che già di suo era l'ide piùllento del mondo. > :P Non facciamo disinformazione, per cortesia. Per considerarlo lento lo devi avere provato su un 386... Lo stai confrontando con un ide o con un editor? Lo stai confrontando in configurazione da ide o da editor? Se ti interessa solo un editor, pur ricco, si apre istantaneamente. Se lo stai usando come ide, lo hai arricchito di tutte le librerie aggiuntive che ti piacciono allora puoi accorgerti che sta aprendo un file e caricando un progetto. Proprio per questo io uso in modalità server + client. Il server carica in circa 3-4 secondi, quando entro nel mio desktop (circa 1 volta al mese) poi ogni singolo file apre in un tempo così ridicolo che io non avverto il minimo ritardo (ovvero << 1 secondo). A questo punto ho completamento e correzione in python rispetto ad un virtualenv di mia scelta. Questo NON è il suo punto di debolezza. La debolezza è semmai che per configurarlo bene può veramente servire molto tempo. Io non riesco ad abituarmi ad altri strumenti in particolare ad esempio il diff ed il merge sono molto più potenti dei vari k3diff e merge anche se il colpo d'occhio di k3diff e melde per il diff di directory ha un suo valore che non hai in emacs. Il fatto che offra la quasi totalità delle sue funzionalità anche nel terminale poi non ha paragoni con altri ide (ma mi immagino che vim sia analogo) Comprendo parecchi limiti di emacs per chi fosse abituato a ide più moderni, non citatemi però la velocità. sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta dell'ide al volo
On Thu, Dec 01, 2016 at 12:02:23PM +0100, Francesco Barresi wrote: > Per me dipende da cosa devo fare... > > VIM per modifiche veloci. > VIM per lavori più lunghi. > VIM per prendere appunti. > VIM formattare csv. > VIM for all. > > E questione di gusti :-) so di essere in minoranza ma non posso esimermi dal replicare che emacs per modifiche veloci. emacs per lavori più lunghi. emacs per prendere appunti. emacs formattare csv. emacs per le mail emacs per fare merge emacs... Purtroppo ha una curva di apprendimento faticosa e una configurazione talmente potente da essere difficile, ma una volta messo a punto è a mio parere potentissimo. io uso emacs con projectile e help, se ci fossero curiosi... sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [python] Conoscete un web hosting a poc oprezzo?
On Sun, May 15, 2016 at 07:35:55PM +0900, Christian Barra wrote: >Tutti i cloud providers partono più o meno da 5 euro al mese per una >macchina base Contabo [1] come maccihna base offre a 7.99 Euro 2 cpu i7 e 8 MB di RAM e 500 GB di hd. che mi pare abbastanza imbattibile. Io mi ci trovo molto bene. https://contabo.com/?show=vps In aggiunta chi ha un account da loro ha diritto al DNS per tutti i domini che vuole. Ad esempio riesco con il loro DNS a gestire i campi SPF e TXT che aruba non mi permette di gestire dalla loro interfaccia anche per domini comprati da aruba. sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [Meta-lista] Messaggi in solo testo
On Fri, May 06, 2016 at 11:04:59AM +0200, Andrea D'Amore wrote: > 2016-05-06 10:49 GMT+02:00 Carlos Catucci: > > Ecco il problema che scatenato piu flame war di ogni altro e' che gli > > emoticon non sono sufficienti spesso a veicolare il tono della frase. > > Basta non buttarci altro combustibile. > > > La GIF Animata sara' graditissima da chi, come FInelli, usa Mutt ;) > > Che uomo, io ancora non mi sono deciso a passare a mutt e notmuch. La > vergognosa verità è che ho paura di dover imparare nuove scorciatoie o > peggio ancora di dover mappare quelle esistenti per essere vim-like. uso mutt da sempre, ne sono contento e non riesco ad abituarmi ad altro. Odio le email html *più* che il top posting. A volte il rendering è comprensibile a volte non capisci neanche la differenza fra testo riportato e testo originale... Un buon uso del plain-text sarebbe molto apprezzato... sandro *:-) -- Sandro Dentella http://trepalchi.itil nuovo portale degli artisti ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] pgsql2shp + zip + cgi + download ... bad header
On Sat, Apr 02, 2016 at 11:38:43PM +0200, Giuseppe Naponiello wrote: >Lo script crea i vari file, crea l'archivio zip e pulisce la cartella >dai file creati lasciando solo lo zip...il problema arriva al download: >nell'error.log di apache leggo "malformed header from script 'test.py': >Bad header: Initializing..." >L'errore sparisce e il download va a buon fine se dallo script elimino >le funzioni per la creazione degli shapefile!!! >Per creare gli shp utilizzo pgsql2shp e credo il problema stia nel >fatto che il comando pgsql2shp produce output: >"Initializing... >Done (postgis major version: 2). >Output shape: MultiPoint >... >Secondo voi è corretto pensare che il problema sia l'output prodotto da >pgsql2shp, se si come eliminare l'errore? Nella documentazione non c'è >nessuna opzione che permetta di non stampare output. >Magari esiste un'altra strada per ottenere lo stesso risultato? Mi pare corretto pensarlo. Tu come catturi l'output di pgsql2shp? io non ho mai lavorato con i gis quindi rispondo solo a buon senso. Mi immagino che l'output di pgsql2shp sia diviso in 2 handler differenti, quindi debba essere possibile catturare solo lo std output e non lo std error. In alternativa, visto che le opzioni ti permettono di nminare il file di output (-f) immagno che quello non abbia la scritta Initializing e quindi tu possa poi riprenderlo da li. sandro *:-) -- Sandro Dentella *:-) http://trepalchi.itIl nuovo portale degli artisti! ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lettere accentate con tastiera en_US (era: Re: [OT] Mail di Enrico Bianchi in spam)
On Tue, Mar 15, 2016 at 10:33:54AM +0100, Nicola Larosa wrote: > >> Massimiliano Modena wrote: > >>> OT nell' OT: con la tastiera layout en_US come faccio le lettere > >>> accentate? > > > Nicola Larosa wrote: > >> Se hai Ubuntu usa la tastiera: > >> > >> "Italian (US keyboard with Italian letters)" > > Marco Beri wrote: > > Tutta la vita compose key. concordo > > > > CCCP -> ☭ > > <3 -> ♥ > > c, -> ç > > C= -> € > > E' -> É > > E` -> È > > (10) -> ⑩ > > Mi sarà utile per Duolingo, grazie. Molto versatile, ma con dei difetti: > > - facile produrre per errore lettere non esistenti nella lingua italiana > (solo la "e" ha entrambi gli accenti acuto e grave, le altre vocali > hanno solo quello grave); nella tastiera ci sono molti altri tasti che se schiacciati a muzzo danno parole inesistenti... ;-* capita poi di scrivere in altre lingue, non cambio layout apposta per scrivere in tedesco o in francese. Poi emacs mi fa l'autocomposizione che è ancora più comoda lettera-accento diventano lettera accentata se sei in text-mode... sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Riflessioni su anni e compensi (was Pythonista wanted a Pisa)
On Sat, Feb 06, 2016 at 02:05:41PM +0100, Carlos Catucci wrote: >giovani (allo stesso costo o quasi). Il che non e' male in se, se fai >come un mio amico che ha preso su un ragazzo a cui fa fare tutta la >formazione e che intende tenere in azienda, facendolo crescere. Ma >quanti sono cosi' intelligenti? La massa vuole il giovane per pagarlo >poco e poi quando e' diventato bravo lo manda via perche' poi costa e >prende un'altro inesperto. Il cliente intelligente capisce benissimo il vantaggio di una persona con la giusta esperienza. Ed alla persona capace ed esperta non serve mettersi in competizione con i lavori delle persone appena formate. Vi sono molti ruoli dove è proprio necessaria esperienza e competenza. Una persona brava e capace vale molto più di 2 persone inesperte che non hanno una visione di lungo respiro. sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] suds ed autenticazione https
Ciao a tutti, ho un problema per il quale ho (quasi) esaurito la fantasia investigativa... Ho una pacchetto che si connette al servizio delle poste per inviare raccomandate soap usando suds. Il pacchetta funziona correttamente su una vecchia Debian Lenny che ora sto sostituendo con una Debian Jessie. Nel passaggio non riesco più a fare funzionare l'autenticazione sul server soap che è in https. Nel debug ho preso solo la porzione di codice che si connette al servizio e che dovrebbe fare il download del wsdl, ho creato un minimo virtualenv sulla macchina di produzione attuale (quella che funziona) *usando esattamente la stessa cartella come sorgente di suds* e su una serie di altre macchine (Deebian Lenny e Jessie). SOLO su quella di produzione passo la basic authentication. Se provo con wget passo l'autenticazione su qualunque macchina, questo per eliminare il dubbio che esista un controllo sull'IP. Ad ogni cambio macchina elimino i *pyc visto che le versioni di Python sono differenti. L'errore che ricevo è immancabilmente: htmlhead title401 Authorization Required/title /headbody h1Authorization Required/h1 pThis server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required./p /body/html Risposta che ottengo anche con wget, solo che il client capisce che deve procedere ed offrire le credenziali e da me non succede (altro che nella macchina di produzione). Mi resta solo da vedere il codice esatto della comunicazione con il server ma mi pare molto incomprensibile quello che ottengo. Il codice con cui testo è così: import sys sys.path.insert(0, 'suds_philpem-0.4.3-py2.5.egg') from suds import client username='...' password='xxx' URL='https://cewebservices.posteitaliane.it/ROLGC/RolService.svc?WSDL' client.Client(URL, username=username, password=password) ed il virtualenv lo creo con virtualenv --no-site-packages. Come può lo stesso codice (rsync -a suds...) dare risultati differenti su macchine formalmente identiche (Debian Lenny)? Cosa può interferire? sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Richiesta aiuto -- cambio .jpg .png in file Microsoft Office Word .doc o .docx
On Wed, Jun 24, 2015 at 03:12:48PM +0200, Giordano Salvadori wrote: Buongiorno a tutti del gruppo È la prima volta che utilizzo il gruppo per chiedere aiuto, di solito guardo quelle che sono le richieste e prendo spunto se mi è utile o no. Questa volta sono però di fronte ad un problema che non riesco a risolvere da solo dato che sto cercando da giorni su internet un modo “intelligente” per cambiare delle immagini .png o .jpg da un documento di produzione fatto in Office Word in formato .doc o docx è indifferente dato che posso trasformare uno nell’altro e viceversa. Ti suggerisco di guardare appy.pod, lo usiamo molto per produrre documenti odt (ma va bene anche per tutti glia altri formati supportati da libreoffice). Usa un file .odf come template e via python puoi passare quello che vuoi. http://appyframework.org/pod.html Ovviamente usa il modulo python uno, che puoi avere in modo più o meno facile a seconda del sistema operativo che usi... sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Domanda su Django
On Tue, Apr 14, 2015 at 04:24:31PM +0200, Carlos Catucci wrote: Ho una domanda particolare. Situazione: 4 progetti distinti ma che condividono lo stesso DB. Fino qui nulla di che. Pero' alcune applications di un dato project mi farebebro comodo (come anche il models e compagnia bella) anche in altro project. Premessa che i 4 soggetti sono tutti dentro una stessa directory e sono di pari livello. Premetto che googlare non ha portato Non so cosa intenti per pari livello, ma il posto dove risiedono è totalmente ininfluente. Potrebbero anche risiedere su macchine differenti... È una situazione piuttosto standard per me, i nostri progetti hanno molte applicazioni e possono condividere lo stesso progetto (es.: lo stesso listino auto venduto al sole24ore ed ad ansa) La domanda e': posso da settings.py far puntare ad una app che si trova in un'altro progetto? Nel settings tu dichiari solo il nome dell'applicazione che verrà trovata nel sys.path. È l'environment che assicura di trovarla, non il settings. Se usi virtualenv sarà pip a metterla dove serve. Io uso buildout e uso una cartella con tutte le eggs di tutte le versioni di tutti i packages di tutti i progetti ed una con i sorgenti *per ogni progetto*. In caso non sia possibile, se mi limitassi a creare un link (ln -s, il tutto gira su macchine linux di cui ho accesso completo) potrebbe funzionare come se i files fossero in locale? il link simbolico è un modo normalissimo di mostrare una cartella dove vuoi tu, il lo uso in locale ma in produzione preferisco tenere ogni progetto diviso. Arriverà il momento in cui devi aggiornare uno e non l'altro progetto. Io anche in produzione uso una cartella con i sorgenti e mi basta un hg pull -u per aggiornarli, quindi non vedo grandi problemi Lo scopo della cosa e' di non dover allineare la stessa app (a livello di sorgenti, ovvio che i migrate ad esempio, vadano fatti in ciascun project coinvolto) in tutti i projects in cui appare. No! i migrate li devi fare una sola volta per db, non per progetto. Se li hai già fatti in un progetto anche gli altri progetti si accorgono che la migrazione è stata fatta (e ovviamente devi fare tu attenzione che non rompa nulla, ad esempio aggiungendo un campo obbligatorio di cui gli altri progetti potrebbero non sapere nulla). sandro -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Proposte sulla gestione della ML
il from per altro fino a qualche mese fa si configurava liberamente, adesso meno, nel senso che nella versione a pago è un conto, in quella free non ho ancora capito a. se si fa b. come si fa Sei libero di farlo, ma solo se come smtp server usi quello del dominio che vuoi usare e non quello di gmail. La cosa è ragionevole, se pensi che si pongono anche il probelma di non essere veicoli di spam. Se ad esempio hai un dominio su aruba con gestione posta, ma vuoi usare gmail puoi aggiungere account del tuo dominio, e per quell'indirizzo fare usare a gmail smtp server quello di aruba. Mi pare che l'unica cosa che come client non ha è che non è client smtp, per il resto mi pare molto completo ed affidabile. io poi uso solo mutt... e fetchmail per vuotare la casella di gmail... sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Django file statici
Ciao Ivan, On Mon, Feb 16, 2015 at 08:11:22PM +0100, Ivan B. wrote: Il 16/02/2015 19:41, Alessandro Dentella ha scritto: Che ne dici se ci dividiamo il lavoro? Tu comincia a dirci cosa non hai capito, cosa hai fatto e come hai dedotto che non funziona... e postaci anche la configurazione... Hai pb col runserver o sotto nginx? sandro *:-) Effettivamente sono stato un po' poco chiaro ^^ I problemi, per il momento, sono sotto runserver. Ok, leggi allora proprio fino in fondo... Quello che non capisco è come configurare la directory per gli static file e come richiamarla nei template. Ok, ecco cosa ho combinato. In settings.py ho inserito: STATIC_URL = '/static/' ok, questo cambia come chiamerai i file, non quali e dove sono/li metti e controllato che ci fosse 'django.contrib.staticfiles' in installed_apps Questo garantisce che esista il comando staticfiles Nel template ho inserito: {% load staticfiles %} img src={% static img/prova.png %} alt=Prova / Secondo me sei già troppo avanti nel debug, fai un pezzo alla volta. Cerca prima di capire se i file finiscono nel posto giusto Quello che non vedo nella tua conf è la configurazione del meccanismo degli staticfiles: STATICFILES_DIRS STATICFILES_FINDERS STATIC_ROOT che puoi leggere rapidamente con manage.py diffsettings | grep STATIC sotto linux e mac. Il meccanismo degli static file sostanzialmete prevede * una configurazione per definire i raccoglitori (FINDERS) * una configuraione per definire la cartella di destinazione (STATIC_ROOT) I finders di default raccolgono da * applicazioni: django.contrib.staticfiles.finders.AppDirectoriesFinder * filesystem: django.contrib.staticfiles.finders.FileSystemFinder Questo a sua volta necessita di STATICFILES_DIRS (una tupla) per capire da dove raccogliere La mia configurazione è così: STATICFILES_DIRS = ('{PRJ}/web/static_manual',) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ) STATIC_ROOT = '{PRJ}/web/static_auto' STATIC_URL = '/static/' dove {PRJ} lo sostituisci con la root del tuo progetto. Il nome *static_manual* suggerisce che è una cartella dove metto a mano gli statici del progetto, *static_auto* è quella dove il comando collectstatic copia i file prelevandoli da dove è istruito (apps e fylesystem). Il mio progettino di test si chiama (che fantasia) progetto. La directory static che contiene a sua volta /img/prova.png ho provato a posizionarla nella root di progetto (dove c'è manage.py), all'interno di progetto/progetto/ e all'interno di progetto/progetto/templates. In nessuna delle tre prove sono non la metterei nei templates, il resto va bene, pur di dichiararla nella STATIC_ROOT. Ma non mi pare che tu abbia chiaro il ruolo di STATICFILES_DIRS. Io non metto mai nulla in static_auto (La mia STATIC_ROOT) che lascio riempire a mano. Il motivo è banale: quella contiene file che non vogli tracciare con mercurial, mentre la static_maual (dichiarata in STATICFILES_DIRS è composta di file che tengo sotto controllo di versione. DEBUG = A questo punto ti suggerisco di lanciare manage.py collectstatic e verificare se i file arrivano al posto giusto (nella STATIC_ROOT) e solo dopo che te ne sei accertato arriverai al debug del template. RUNSERVER = Quando usi il runserver non ti serve neanche passare dalla cartella STATIC_DIR se in urls.py del progetto hai qualcosa tipo: urlpatterns += staticfiles_urlpatterns() Risulta pratico per lo sviluppo. Ma prima di usare questo termina con successo gli altri passaggi. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Django file statici
On Mon, Feb 16, 2015 at 07:09:54PM +0100, Ivan B. wrote: Ciao a tutti, ho un problemino da neofita con django e la ricerca su google mi ha confuso ancora di più le idee... Devo inserire nei miei file template il riferimento al css e a delle immagini. Ho provato a seguire questo howto: https://docs.djangoproject.com/en/1.7/howto/static-files/ ma probabilmente (anzi sicuramente) non ne ho capito il funzionamento. Qualcuno ha voglia e pazienza per spiegarmi come funziona? Che ne dici se ci dividiamo il lavoro? Tu comincia a dirci cosa non hai capito, cosa hai fatto e come hai dedotto che non funziona... e postaci anche la configurazione... Hai pb col runserver o sotto nginx? sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scope delle variabili.
On Tue, Feb 03, 2015 at 10:12:50AM +0100, Gollum1 wrote: Mi sto perdendo qualcosa... numbers_urls = dict() number_count = 0 def numbers_start_element(name, attrs): if name == 'number': number_count += 1 if 'uri' in attrs.keys(): numbers_urls[name] = attrs['uri'] print(number_count) Perché numbers_urls viene visto correttamente come variabile globale e modificata, mentre number_count no? sono sicuro che mi sto perdendo in una banalità oscena. Non so se è una banalità, ma non direi. Nessuna delle 2 variabili viene passata in argomento ma una è mutable e l'altra no. Quando scrivi numbers_urls[name] = attrs['uri'] non stai riassegnando la variabile, ma la stai solo modificando (prova a riassegnarla e vedi che all'esterno NON vedi il cambiamento). Con gli immutable non puoi fare una modifica, quindi il += 1 equivale ad un rebind della variabile che quindi viene fatto solo nello scopo locale. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Best practices per import
Ciao Diego, On Thu, Jan 22, 2015 at 06:33:24PM +0100, Diego Barrera wrote: Buona sera a tutti! Solitamente utilizzo e vedo utilizzato import all'inizio del modulo, ma a volte mi e' capitato sia di scrivere che di leggere import all'interno di funzioni o classi. L'unico vantaggio che vedo nel caso di utilizzo all'interno di una funzione (o classe) e' che se non viene richiamata la funzione, si evita l'import. Altri vantaggi, svantaggi o caveat? Quale e' la forma stilistica piu' corretta? io uso l'import all'interno delle funzioni in alcuni casi in cui mi serve rompere un import circolare. Ad esempio in Django supponi di volere usare delle utility nei models. per pulizia metti le utility in un mdulo separato ma loro richiedono a loro volta i modelli. Quando Django importa tutti i modelli, si trova a dovere importare le utili che a loro volta importano i modelli. In molte circostanze questo non funziona ed in modo non ovvio. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Impariamo a programmare in Python in 100 ore Was: Python vs Java
Ciao a tutti, torno all'oggetto di questa discussione, perché forse fra un paio di mesi potrò dirvi qualcosa in più... La Thunder Systems per cui lavoro ha deciso di tenere un corso di 12 giornate di Python e Django rivolto a persone che abbiano come prerequisito la conoscenza di almeno un linguaggio di programmazione. http://www.thundersystems.it/it/news/corso-web-developer-junior-con-python-e-django/ Il corso è gratuito e lo scopo dichiarato è quello di conoscere persone a cui proporre un contratto di lavoro o una collaborazione, data la cronica mancanza di sviluppatori Python (qui a Milano). Terrò personalmente il corso e non ho l'ambizione di fare uscire in 12 giornate gente che sappia fare siti robusti, manutenibili e quant'altro ma di stimolare curiosità e passione che necessariamente venga poi coltivata in proprio. Per questo le lezioni non sono concentrate ma disseminate nell'arco di 2 mesi. Dato l'obiettivo del corso, il destinatario a cui si rivolge sarebbe un neolaureato in qualcosa di scientifico che possa eventualmente essere interessato a lavorare con noi (ma abbiamo anche già raccolto un'iscrizione di un avvocato con la passione della programmazione). Se avete in mente persone che possano essere interessate, sentitevi liberi di fare girare l'informazione e magari di condividerla nei vostri social... Quanto ai tempi, sono molto più pessimista di Carlos. Credo con Enrico che non insegnare certi argomenti sia partire monchi (come fai a non usare le form con django!) ma per avere avuo un certo numero di collaboratori di varia esperienza credo che si possa rimanere junior e scrivere codice poco manutenibile anche dopo svariati anni di lavoro... sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Percorso di ricerca moduli.
On Fri, Dec 12, 2014 at 02:52:05PM +0100, Gabriele Battaglia wrote: Salve a tutti. Un domandone banale, per il quale ammetto candidamente di vergognarmi mostruosamente e faccio appello alla vostra infinita pazienza. Nel percorso C:\Dropbox\py è presente il modulo key.py. Io ho bisogno di importarlo dallo script e4ec.py che risiede nel percorso C:\Dropbox\py\e4ec Ovviamente, import key non funziona, perchè key.py non si trova nella cartella dello script principale ne in quelle indicate da PYTHONPATH, che nel mio caso risulta non definita. Allora ho provato a scrivere PYTHONPATH = [C:\\Dropbox\\py\\e4ec] PYTHONPATH è una variabile d'ambiente, non una lista python: PYTHONPATH Augment the default search path for module files. The format is the same as the shell’s PATH: one or more directory pathnames separated by os.pathsep (e.g. colons on Unix or semicolons on Windows). Non-existent directories are silently ignored. credo inoltre ma suggerisco di verificarlo che tu possa mettere u signolo /: PYTHONPATH=C:/Dropbox/py/e4ec Qualche indizio per orientarmi verso la soluzione? Analizzare os.path sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Percorso di ricerca moduli.
On Fri, Dec 12, 2014 at 02:22:40PM +, enrico franchi wrote: 2014-12-12 14:08 GMT+00:00 Alessandro Dentella san...@e-den.it: Qualche indizio per orientarmi verso la soluzione? Analizzare os.path E, per inciso, la soluzione *non* e' smacchinare con il path (non e' os.path, che e' poveraccio solo un modulo). ok, per distrazione ho scritto os.path invece che sys.path Il senso era ovviamente quello che il modo di debuggare dove sta il problema è di analizzare sys.path. Se un modulo non è nel sys.path non viene visto se sta lì deve essere visto. PYTHONPATH è *un* modo di manipolare il sys.path: sandro@bluff:~$ PYTHONPATH=/tmp/my/funny/path ipython --no-banner In [1]: import sys In [2]: sys.path Out[2]: ['', '/usr/bin', '/tmp/my/funny/path', '/usr/lib/python2.7', ... La soluzione e' usare virtualenv, setup.py, pip e compagnia. dipende. PYTHONPATH è comodo se ad esempio vuoi provare un pacchetto senza installarlo, magari prorpio per vedere le differenze fra due rel delo stesso pacchetto. Puoi anche essere già un in virtualenv e usare PYTONPATH per dare la precedenza ad una versione che vuoi testare senza toccare altro. sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] MVC: web2py
On Fri, Nov 14, 2014 at 01:04:57PM +, enrico franchi wrote: 2014-11-12 1:05 GMT+00:00 Benedetto Campanale benedetto.campan...@gmail.com : Cambio oggetto del thread per non mischiare gli argomenti. MVC = Model-View-Controller http://it.wikipedia.org/wiki/Model-View-Controller Web2py è un MVC open-source scritto in Python (da un italiano). A mio giudizio è un ottimo MVC indicato per organizzare dati di un DB (che può essere mysql, oracle, postgre,...) e visualizzarli in una pagina web dove puoi sbizzarrirti con Python. Non mi e' chiaro perche' dopo avere riportato la (corretta) definizione di MVC sostieni che Web2Py che e' un *framework* sia un *pattern*. Poi, per inciso, Web2Py e' uno dei framework python meno Pythonici in cui mi sono imbattuto. Sarebbe l'ultima di tutte le scelte possibili, dal mio punto di vista. Su questo sono curioso. Non ho mai usato/visto web2py ma un amico che stimo molto come competenze informatiche e che contribuisce allo sviluppo di web2py me lo ha caldeggiato più volte. In che senso lo consideri poco Pythonico? sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] Sphinx, field list refs
Ciao, questa non è una domanda Python ma per la scrittura di documetazione... in una field list ho questa struttira funzionante: * fornisce i segg. comandi: :dj_: bla bla :jmb-start_: bla bla dj == dj_ viene correttamente interpretato come elemento di field list e viene aggiunto il link al target composto dal titolo del capitolo successivo. Volendo scorporare in un file differente la documentazione del comando `dj`, non trovo più una sitassi funzionante. Ho provato anche a dichiarare esplicitamente il target nel file separato: .. _dj: dj == A questo punto mi funziona il riferimento: :ref:`dj` ma non funziona come elemento di lista: ::ref:`dj`: ho provato anche: .. |dj| :ref:`dj` :|dj_|: :dj_: Avete idee? sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] celery, uwsgi smart-attach-daemon
Eventualmente con attach-daemon2 hai un controllo maggiore sul comportamento: https://github.com/unbit/uwsgi-docs/blob/master/AttachingDaemons.rst#--attach-daemon2 Sarebbe esattamente quello che cerco, ma non riesco assolutamente a vedere alcun segnale. La mia conf è: celery_pid = /var/run/uwsgi/cogema-celery.pid attach-daemon2 = cmd=/usr/local/sbin/test-signals.py %(celery_pid),pidfile=%(celery_pid),stopsignal=3,reloadsignal=15 La script test-signals.py è riportata in fondo. Quando io faccio partire uwsgi nei log leggo: [uwsgi-daemons] found valid/active pidfile for /usr/local/sbin/test-signals.py /var/run/uwsgi/cogema-celery.pid (pid: 31952) Ma poi nessun segnale arriva al processo test-signals.py. Se da console per prova eseguo kill -3 31952, vedo subito il log del segnale arrivato. --attach-daemon2 (e piu' in generale tutte le opzioni che finiscono con '2') sono le versioni user-unfriendly :P che ti permettono di modificare i pattern prestabiliti agendo direttamente sulle strutture interne. Nel caso specifico, settando un pidfile stai forzando la modalita' smart, che non e' quella che vuoi tu. cmd=/usr/local/sbin/test-signals.py,stopsignal=3,reloadsignal=15 e' sufficiente a fare quello che vuoi. Ci sono quasi. Reload ora arriva, ma restart passa ancora lo stesso segnale di reload:: root@thunder-dev:/home/www/office.cogema.it# grep attach /etc/uwsgi/cogema.ini attach-daemon2 = cmd=/usr/local/sbin/test-signals.py %(celery_pid),stopsignal=3,reloadsignal=15 root@thunder-dev:/home/www/office.cogema.it# cat /tmp/sig.log root@thunder-dev:/home/www/office.cogema.it# /usr/bin/loca localclocalelocaledef locate locate.findutils root@thunder-dev:/home/www/office.cogema.it# /usr/local/bin/uwsgi --reload /var/run/uwsgi/cogema.pid root@thunder-dev:/home/www/office.cogema.it# cat /tmp/sig.log 3 root@thunder-dev:/home/www/office.cogema.it# /usr/local/bin/uwsgi --stop /var/run/uwsgi/cogema.pid root@thunder-dev:/home/www/office.cogema.it# cat /tmp/sig.log 3 3 sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] celery, uwsgi smart-attach-daemon
On Tue, Sep 23, 2014 at 08:30:15AM +0200, Roberto De Ioris wrote: Ciao a tutti, sto cercando la configrazione ottimale per fare partire celery con django in produzione. Uso nginx + uwsgi per l'applicazione principale e credevo leggendo [1] [2] che smart-attach-daemon avrebbe potuo risolvere il problema di garantirmi che un reload di uwsgi (uwsgi --reload) inviasse un segnale al processo di celery. Forse ho compreso male la documentazione che in effetti non dice esplicitamente cosa dovrebbe succedere ma solo :: Pidfile governed processes can survive death or reload of the master so long as their pidfiles are available and the pid contained therein matches a running pid. This is the best choice for processes requiring longer persistence, and for which a brutal kill could mean loss of data such as a database. smart-attach-daemon serve proprio ad evitare che un demone venga ucciso durante un riavvio. Effettivamente celery (almeno nella mia mente) e' uno di quei servizi che dovrebbe andare per fatti suoi, e quindi smart-attach-daemon e' l'approggio giusto. Mi pare di capire pero' che tu invece vuoi che a ogni reload corrisponda anche un restart di celery, in questo caso attach-daemon e' quello che ti serve. Eventualmente con attach-daemon2 hai un controllo maggiore sul comportamento: https://github.com/unbit/uwsgi-docs/blob/master/AttachingDaemons.rst#--attach-daemon2 Sarebbe esattamente quello che cerco, ma non riesco assolutamente a vedere alcun segnale. La mia conf è: celery_pid = /var/run/uwsgi/cogema-celery.pid attach-daemon2 = cmd=/usr/local/sbin/test-signals.py %(celery_pid),pidfile=%(celery_pid),stopsignal=3,reloadsignal=15 La script test-signals.py è riportata in fondo. Quando io faccio partire uwsgi nei log leggo: [uwsgi-daemons] found valid/active pidfile for /usr/local/sbin/test-signals.py /var/run/uwsgi/cogema-celery.pid (pid: 31952) Ma poi nessun segnale arriva al processo test-signals.py. Se da console per prova eseguo kill -3 31952, vedo subito il log del segnale arrivato. lumi? grazie sandro === #!/usr/bin/python import os import sys import time import signal def show(sig, frame): f = open('/tmp/sig.log', 'a') f.write(%s \n % sig) def sig_start(): sigs = range(2,16) sigs.remove(9) for sig in sigs: signal.signal(sig, show) ## log the pid #f = open('/var/run/uwsgi/cogema-celery.pid', 'w') f = open(sys.argv[1], 'w') f.write(%s\n % os.getpid()) f.close() sig_start() while 1: time.sleep(5) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] celery, uwsgi smart-attach-daemon
Ciao a tutti, sto cercando la configrazione ottimale per fare partire celery con django in produzione. Uso nginx + uwsgi per l'applicazione principale e credevo leggendo [1] [2] che smart-attach-daemon avrebbe potuo risolvere il problema di garantirmi che un reload di uwsgi (uwsgi --reload) inviasse un segnale al processo di celery. Forse ho compreso male la documentazione che in effetti non dice esplicitamente cosa dovrebbe succedere ma solo :: Pidfile governed processes can survive death or reload of the master so long as their pidfiles are available and the pid contained therein matches a running pid. This is the best choice for processes requiring longer persistence, and for which a brutal kill could mean loss of data such as a database. Avendo messo una mia script di test non vedo arrivare alcun segnale. Mi sbaglio? che dovrebbe succedere veramente con smart-attach-daemon? La parte che reputo interessante della conf di uwsgi è questa:: env = DJANGO_SETTINGS_MODULE=web.settings env = HOME=/tmp master = true module = django.core.handlers.wsgi:WSGIHandler() prj_dir = /home/www/office.cogema.it celery_pid = /var/run/uwsgi/cogema-celery.pid home = %(prj_dir)/parts/vpython smart-attach-daemon = %(celery_pid) /usr/local/sbin/test-signals.py %(celery_pid) test-signals.py logga ogni segnale che invio con kill, e non logga nulla quando lancio uwsgi --reload sandro *:-) [1] http://uwsgi-docs.readthedocs.org/en/latest/Options.html#smart-attach-daemon [2] http://uwsgi-docs.readthedocs.org/en/latest/AttachingDaemons.html -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Una domanda sui dizionari.
On Wed, Sep 17, 2014 at 03:04:41PM +0200, Gabriele Battaglia wrote: Ciao a tutti. So che ne sentivate la mancanza: troppi tecnicisimi, in questi ultimi mesi, insomma, serviva proprio una bella domanda banale delle mie, di quelle che ti fanno raddrizzare la schiena sulla sedia mentre esclami: Ma questo, invece del manuale di Python, s'è letto topolino! Però poi, la nota positiva è che domande banali spesso possono essere soddisfatte con risposte semplici che non richiedono prove o spulciamenti vari di siti e forum. Ho un dizionario che contiene il frutto di una scansione su una matrice. Avrei bisogno di stamparlo a video, nello stesso ordine con cui le coppie chiave:valore, sono state aggiunte ma non trovo un modo per farlo. Direi con un OrderedDict: https://docs.python.org/2/library/collections.html#collections.OrderedDict sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] DJANGO
On Tue, Apr 29, 2014 at 08:57:51PM +0200, Francesco Pischedda wrote: Ciao, spendendo la stessa cifra puoi prendere un server taglia quot;developerquot; su http://cloudatcost.com/ e ci fai tutti gli esperimenti che vuoi, chiaramente devi investire un po di tempo per fare il setup della macchina ma ne vale la pena. Altre alternative sono i piani free di openshift, heroku, aws etc etc etc ognuno con i suoi pro e contro Proprio ieri un amico si diceva molto soddisfato di questo servizio: https://contabo.com/?show=configuratorvserver_id=104 non paragonabile ai 20 E una tantum ma in 8 euro/mese c'è traffico illimitato, 200GB di hd e 4 GB di RAM. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] SQLITE Libri
On Mon, Mar 10, 2014 at 09:44:20AM +0100, Attilio Menegon wrote: Buon lunedì a tutti, 2 – Esiste un interfaccia grafica per la gestione del DB SQLITE? Sqlkit ha un browser -sqledit- che usa sqlalchemy e quindi chiaramente può anche editare db sqlite (ma non solo). È in Python ed usa le PyGtk, quindi facile da installare in Linux (per Ubuntu = 13.10 apt-get install python-sqlkit) un po' una pena con Windows e Mac. È parecchio configurabile l'interfaccia grafica ed i filtri sono molto comodi. http://sqlkit.argolinux.org/misc/sqledit.html sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass - epilogo
On Sat, Jan 04, 2014 at 12:21:30PM +0100, Manlio Perillo wrote: On 03/01/2014 12:50, Roberto De Ioris wrote: [...] provate a ridurre a 3 secondi il proxy_connect_timeout di nginx, Dato che Linux ignora l'hint sulla backlog, il parametro su cui agire è proxy_send_timeout. Sul wiki di Nginx c'è un commento appropriato riguardo proxy_connect_timeout: http://wiki.nginx.org/HttpProxyModule#proxy_connect_timeout http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout Impostare proxy_send_timeout potrebbe non essere efficace, a causa del buffering effettuato dal kernel. In questo caso occorre modificare proxy_read_timeout, ma va fatto con cautela per evitare di mandare in timeout richieste legittime (ma semplicemente lente). In alternativa si può provare a modificare, dall'applicazione Python, SO_RCVBUF. Purtroppo anche la modifica del send_timeout non ha sortito alcun effetto. Non ho provato a modifcare SO_RCVBUF. Ho alla fine preso una strada completamente differente che però in concreto ha dati i risultati desiderati. Ho deciso di creare 2 pool di processi (upstream) differenti uno per i processi lenti ed uno per gli altri. Dal momento che le chiamate lente hanno URL ben definiti, ho deciso di redirigere queste chiamate su un pool di processi differente. In questo modo so per certo che una chiamata veloce non sarà mai rallentata da una lenta e, semplicemnete aumentando i processi lenti posso arrivare a sincerarmi che nessun processo lento abbia una probabilità significativa di trovarsi in coda ad un altro processo lento (da momento che sono relativamente pochi al giorno). Ora possiamo dedicarci a capire cosa hanno di sbagliato i processi lenti... Grazie a Manlio e Roberto per l'aiuto offerto sandro -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass
On Mon, Dec 30, 2013 at 05:26:57PM +0100, Roberto De Ioris wrote: Mi pare di capire che la soluzione della listen queue che mi hai indicato risolverebbe questo problema. server = HTTPServer(app) server.bind(post, backlog=1) (prova anche con zero, su alcuni kernel funziona, anche se non ricordo se e' per quelli piu' recenti o quelli piu' vecchi) Purtroppo questa strada non ha funzionato. Ricordo che il probelma che cerchiamo di risolvere è che quando viene interrotto una chiamata lunga, nginx libera quella connessione e quindi diritta verso quel processo la prossima chiamata, ma il processo di fatto è occupato. La nostra simulazione è stata fatta con 2 funzioni: is_up e blocking che usa time.sleep() class IsUp(tornado.web.RequestHandler): def get(self): self.write(Is Up Porta %d ...) self.finish() class Blocking(tornado.web.RequestHandler): def get(self, numero=10): time.sleep(int(numero)) self.write(Bloccato Porta %s\n % options.port) self.finish() la chiamata usando 'wget -q -O - http://ngtest/blocking/30/' ed interrompendolo con Control-c. In un terminale separato in ciclo di 'wget -q -O - http://ngtest/is_up' Il ciclo si blocca nel momento della interruzione e riprende solo quando termita il tempo (e quindi il processo si libera) L'approccio migliore (o meglio diciamo quello risolutivo) e' che i processi usino lo stesso socket, puoi provare il plugin tornado di uWSGI: http://uwsgi-docs.readthedocs.org/en/latest/Tornado.html Siamo passato quindi a leggere la documentazione per fare questa prova ma ammetto che ho qualche dubbio. Dimmi per cortesia se scrivo inesattezze... Credo di capire che vengono descritte più opzioni di configurazione: con i greenlet ed una programmazione asincrona o con processi tornado indipendenti. Considerando che il tutto nasce proprio dal fatto che abbiamo probelmi nelle funzioni che NON sono state scritte in modo asincrono quello che vogliamo è di usare la configurazione descritta in fondo Binding and listening with Tornado. Mi pare di capire che in questa ipotesi vengano fatti partire processi differenti e per ogni processo venga eseguito start_the_tornado_servers, finiremmo quindi -come ora- ad avere svariati server tornado in ascolto ma con la differenza che il routing fra un server e l'altro sarebbe gestito da uwsgi, corretto? è in questa situazione che uwsgi usa lo stesso socket per tutti i processi? *Se* fin qui e` corretto mi resta poi da capire come mai 'start_the_tornado_servers' lanci application e non 't_application' e come construire la application che viene chiamata da uwsgi. Nell'esempio i 3 puntini presuppongono un lettore meno confuso del sottoscritto... Lascio poi al mio collega un'altra domanda su un probelma di segfault... grazie per l'attenzione sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass
On Fri, Jan 03, 2014 at 12:45:02PM +0100, Manlio Perillo wrote: On 03/01/2014 12:34, Alessandro Dentella wrote: [...] La nostra simulazione è stata fatta con 2 funzioni: is_up e blocking che usa time.sleep() class IsUp(tornado.web.RequestHandler): def get(self): self.write(Is Up Porta %d ...) self.finish() class Blocking(tornado.web.RequestHandler): def get(self, numero=10): time.sleep(int(numero)) self.write(Bloccato Porta %s\n % options.port) self.finish() la chiamata usando 'wget -q -O - http://ngtest/blocking/30/' ed interrompendolo con Control-c. Ok. Ma quante instanze di tornado hai attive? 10 al momento, vedi descrizione qui [1] Se ne hai attiva una sola, mi sembra ovvio che blocca tutto. Se ne hai N, facendo N richieste di questo genere blocchi ancora tutto. Certo ma ho poche richieste bloccanti (2% 2 secondi) ed un totale molto basso di richieste lente: 100/giorno 10 secondi, 300/giorno 4 secondi. In un terminale separato in ciclo di 'wget -q -O - http://ngtest/is_up' Il ciclo si blocca nel momento della interruzione e riprende solo quando termita il tempo (e quindi il processo si libera) Che ciclo? un for della bash Per concludere, tieni conto che usare cose come Tornado è tutt'altro che banale. Tutto lo stack (applicazione + framework + eventuali librerie) deve essere sviluppato con la programmazione asincrona in mente. E' vero che ci sono dei monkey patch per alcune funzioni della libreria standard, ma non ritengo sia saggio affidarsi ciecamente a loro. Python e la libreria standard semplicemente non sono pensati per un ambiente a green thread. Questo è il peccato originale che non dipende da me all'interno del quale mi devo muovere. Chi ha scritto l'applicazione non ha capito la specificità di tornado ed ha fatto una programmazione basata su richieste non asincone. In questo quadro e per il poco tempo che io mi occupo di questo progetto ho solo potuto suggerire nell'ordine 1) di passare a django 2) di modificare il setup per moltiplicare i processi in modo da evitare i blocchi 3) di ottimizzare alcune funzioni che probabilmente prendono tempo quando non dovrebbero. Come già detto in altra mail, il problema residuo sorge quando una chiamata viene interrotta. Nginx libera subito la risorsa e passa una nuova chiamata a quel processo che in realtà è ancora occupato. sandro [1] http://comments.gmane.org/gmane.comp.python.general.italian/14562 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass
On Fri, Jan 03, 2014 at 12:50:54PM +0100, Roberto De Ioris wrote: On Mon, Dec 30, 2013 at 05:26:57PM +0100, Roberto De Ioris wrote: Mi pare di capire che la soluzione della listen queue che mi hai indicato risolverebbe questo problema. server = HTTPServer(app) server.bind(post, backlog=1) (prova anche con zero, su alcuni kernel funziona, anche se non ricordo se e' per quelli piu' recenti o quelli piu' vecchi) Purtroppo questa strada non ha funzionato. Ricordo che il probelma che cerchiamo di risolvere è che quando viene interrotto una chiamata lunga, nginx libera quella connessione e quindi diritta verso quel processo la prossima chiamata, ma il processo di fatto è occupato. La nostra simulazione è stata fatta con 2 funzioni: is_up e blocking che usa time.sleep() class IsUp(tornado.web.RequestHandler): def get(self): self.write(Is Up Porta %d ...) self.finish() class Blocking(tornado.web.RequestHandler): def get(self, numero=10): time.sleep(int(numero)) self.write(Bloccato Porta %s\n % options.port) self.finish() la chiamata usando 'wget -q -O - http://ngtest/blocking/30/' ed interrompendolo con Control-c. In un terminale separato in ciclo di 'wget -q -O - http://ngtest/is_up' Il ciclo si blocca nel momento della interruzione e riprende solo quando termita il tempo (e quindi il processo si libera) Provate a ridurre a 3 secondi il proxy_connect_timeout di nginx, e' probabile che abbiate sempre almeno uno slot listen_queue libero anche se lo avete impostato a 1/0. In questo modo se la connessione non completa in 3 secondi, nginx considera il peer morto (e passa a quello dopo se lo avete configurato a dovere) nessun cambiamento. Il proxy_connect_timeout pare proprio ignorato. questa la conf: server { listen 80; server_name ngtest; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 3s; proxy_pass http://produzione; } } Credo di capire che vengono descritte più opzioni di configurazione: con i greenlet ed una programmazione asincrona o con processi tornado indipendenti. guarda terrei questo approccio proprio come ultima spiaggia (e probabilmente e' piu' semplice modificare tornado) se la soluzione sopra non dovesse funzionare ecco appunto... Il primo punto: capisco correttamente che la conf è quella descritta nel capitoletto Binding and listening with Tornado? Nella mail precedente scrivevi: L'approccio migliore (o meglio diciamo quello risolutivo) e' che i processi usino lo stesso socket, puoi provare il plugin tornado di uWSGI: ora la dici ultima spiaggia. come mai? sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass
On Tue, Dec 24, 2013 at 11:58:05AM +0100, Roberto De Ioris wrote: io sono convinto che se il modello resta round robbin puro, anche se raddoppiassi i processi avrei solo dimezzato la probabilità di incapare in una chiamata lunga, mentre se potessi evitare di passare chiamate ad un processo che sta lavorando eviterei proprio questa cosa. aggancia una strace ai processi tornado durante un blocco per vedere che succede. Probabilmente non ci sara' molto da fare se non aggiungere altri processi tornado (sempre che sia tollerabile dall'applicazione). le chiamate lunghe non sono chiamate che a random prendono tanto tempo, sono chiamate che fanno molte cose probabilmente non ottimizzate, ma sulle quali io non ho diretto controllo (sono inizializzazioni mensili di alcune posizioni). Grazie per il suggeriemnto sandro *:-) Nginx non puo' farlo (vedi pero' nota sotto) L'approccio migliore (o meglio diciamo quello risolutivo) e' che i processi usino lo stesso socket, puoi provare il plugin tornado di uWSGI: http://uwsgi-docs.readthedocs.org/en/latest/Tornado.html ma non e' compilato di default (per motivi altamente tecnici: ovvero odio la programmazione callback based e non voglio incentivarla ulteriormente ;) anche gunicorn ha un worker model per tornado ma e' deprecato (ma presumo funzioni ancora) Nota: Se abbassi la listen queue del socket dentro tornado a 1 (in alcuni kernel puoi metterla anche a 0 che sarebeb addirittura meglio), otterrai subito un errore in caso di worker occupato e nginx passera' la richiesta al backend successivo. E' un buon trucco (anche se poco diffuso) nel tuo caso specifico. Grazie Roberto, non mi è chiaro se il suggerimento di abbassare la listen queue possa essere usato indipendentemente da uwsgi (come credo). In questo caso non ho capito come farlo. Non ho trovato parametri di tornado. Credo che quello che suggerisci sia poi la backlog della socket.listen() ma veramente non ho alcuna competenza di questo campo... Al momento, dopo essere passato a nginx 1.4+, un tornado minimale di test con 2 handler uno che risponde subito e l'altro che si blocca, arrivo ad una situazione ottimale fino a che uno abortisce la richiesta. A quel punto ho la sensazione che nginx azzeri la lista di connessione attive per una porta particolare mentre tornado resta appeso. Nginx passa la prossima chiamata a quella porta ed il tutto si blocca. Mi pare di capire che la soluzione della listen queue che mi hai indicato risolverebbe questo problema. sandro *:-) PS: ho letto la documentazione del plugin di tornado di uWSGI, mi pare relativamete semplice ma non ho ancora avuto tempo di provarla ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Deploy con nginx e proxy_pass
On Tue, Dec 24, 2013 at 09:19:19AM +0100, Roberto De Ioris wrote: Ciao a tutti, ho bisogno di capire una configurazione di un webs server nginx di un cliente che usa proxy_pass passando come destinatario upstream produzione { server 127.0.0.1:8080; server 127.0.0.1:8081; ... } proxy_pass http://produzione; Quello che vorrei capire è come funziona e se è configurabile il meccanismo di assegnazione della richiesta ai vari server. Il problema nasce dal fatto che hanno una applicazione fatta con tornado ma con chiamate non asincrone, ed una base di codice che si sono sviluppati negli anni e che non hanno il coraggio/determinazione di cambiare. il 99% delle funzioni prende meno di 1 secondo ma acunin prendono anche 10 secondi fino a 25 e questo è accettabile. Il problema nasce dal fatto che in alcuni casi sperimentano dei blocchi. La mia sensazione (e qui paleso la mia ignoranza in merito) è che nginx faccia round robbin fra i 10 processi esistenti e non stia a guardare se hanno terminato o meno la precedente richiesta. Esiste un modo di forzare uno schema per cui vengano serviti solo i processi che non hanno in corso una elaborazione? NB: non esiste un problema di troppo carico, il server è sostanzialmente sottosfruttato, il sito non ha un carico elevato Sono graditi anche puntatori a letture illuminanti... grazie sandro *:-) ___ Nelle release 1.3 di nginx puoi impostare il least connections come algoritmo: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#least_conn grazie, leggo nella doc: Specifies that a group should use a load balancing method where a request is passed to the server with the least number of active connections, taking into account weights of servers. If there are several such servers, they are tried using a weighted round-robin balancing method. ed immagino che le active connections siano esattamente quelle in elaborazione. Considerando che ho 10 processi, il 99% delle richieste viene espletato in meno di 1 secondo e ho un rate che nelle ore di punta arriva a 2/secondo credo che sia molto probabile che ci sia sempre un processo libero e che quindi questo venga scelto da questo algoritmo, se lo capisco correttamente. ma ho seri dubbi che il problema sia li', appena hai scritto tornado con chiamate non asincrone, hai praticamente descritto IL problema ;) Vero, ma questa è una eredità su cui non ho potere... per bypassarlo avevo modificato il codice per potere girare con svariati (10 al momento) processi indipendenti, ora è così ed in effetti la situazione è abbastanza gestibile con l'eccezione dei blocchi descritti sopra. io sono convinto che se il modello resta round robbin puro, anche se raddoppiassi i processi avrei solo dimezzato la probabilità di incapare in una chiamata lunga, mentre se potessi evitare di passare chiamate ad un processo che sta lavorando eviterei proprio questa cosa. aggancia una strace ai processi tornado durante un blocco per vedere che succede. Probabilmente non ci sara' molto da fare se non aggiungere altri processi tornado (sempre che sia tollerabile dall'applicazione). le chiamate lunghe non sono chiamate che a random prendono tanto tempo, sono chiamate che fanno molte cose probabilmente non ottimizzate, ma sulle quali io non ho diretto controllo (sono inizializzazioni mensili di alcune posizioni). Grazie per il suggeriemnto sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] domanda banale
On Tue, Dec 10, 2013 at 04:37:16PM +, Francesco Geri wrote: Salve a tutti, sono un neofita della programmazione in python, prima d'ora mi sono sempre limitato a piccoli script o piccole applicazioni. Adesso invece per la prima volta sono alle prese con un'applicazione più strutturata, con finestre (gtk), collegamenti a database, scrittura di file ecc. Il mio problema è banale, ma a causa della mia scarsa esperienza mi sta creando un po' di problemi. In pratica ho un flusso principale di istruzioni, che richiama varie funzioni e istanzia varie classi. Ad un certo punto io istanzio una classe che genera una gtkwindow con una treeview popolata da una liststore. Vorrei che l'utente finisse di compilare i vari record della treeview e poi, successivamente al click in un bottone, i dati salvati nella treeview dovrebbero essere recuperati e utilizzati nel normale flusso di operazioni. Il problema mio è che in realtà il flusso non si ferma: la classe viene istanziata, la finestra generata, i valori recuperati, ma il flusso (che dovrebbe attendere l'inserimento dei dati da parte dell'utente) non si ferma! Qualcuno può darmi una diritta su come risolvere questo banalissimo problema? non è che banalmente apri una finestra normale invece che un dialog? Puoi provare a mostrare il codice di come apri la finestra. Per le finestre normali è corretto che il flusso prosegua. sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Sphinx sotto progetti
On Mon, Dec 09, 2013 at 12:34:56PM +0100, Michele Gatti wrote: Attualmente ho un file di index solo e un unico file di configurazione, quindi ho una vista schiacciata dell'albero che mi sono dato come documentazione. quello che mi piacerebbe è avere per ogni sotto directory di documentazione il suo index.html in modo che si navigabile Se ho compreso bene, quello che chiedi lo puoi ottenere facilmente usando la direttiva ``toctree`` nelle sottocartelle. Ad esempio: .. toctree:: :maxdepth: 3 sqlkit/contents .. toctree:: :maxdepth: 2 misc/sqledit Es a sua volta, cat sqlkit/contencts:: .. toctree:: :maxdepth: 2 widgets browsing editing advanced/contents ../printing/contents sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Sphinx sotto progetti
On Mon, Dec 09, 2013 at 12:54:19PM +0100, Michele Gatti wrote: Il giorno 09 dicembre 2013 12:48, Alessandro Dentella [1]san...@e-den.it ha scritto: On Mon, Dec 09, 2013 at 12:34:56PM +0100, Michele Gatti wrote: Attualmente ho un file di index solo e un unico file di configurazione, quindi ho una vista schiacciata dell'albero che mi sono dato come documentazione. quello che mi piacerebbe è avere per ogni sotto directory di documentazione il suo index.html in modo che si navigabile Se ho compreso bene, quello che chiedi lo puoi ottenere facilmente usando la direttiva ``toctree`` nelle sottocartelle. Ad esempio: .. toctree:: :maxdepth: 3 sqlkit/contents .. toctree:: :maxdepth: 2 misc/sqledit Es a sua volta, cat sqlkit/contencts:: .. toctree:: :maxdepth: 2 widgets browsing editing advanced/contents ../printing/contents sandro *:-) Anche se ho la doc in un'altra cartella del progetto? Direi proprio di si! guarda nelle righe sopra l'esempio con printing, salgo di una cartella e ridiscendo. sandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Che distro usate per il vostro desktop (e quale versione)?
On Fri, Nov 29, 2013 at 05:52:32PM +0100, Karim wrote: Ciao a tutti, sul fronte linux vorrei chiedervi che distro usate come desktop. Ora vi sto scrivendo da una ubuntu 13.10, ma ogni volta che installo una ubuntu nuova, mi rendo conto che forse è meglio usare la LTS. Inoltre questo unity non mi fa impazzire. Cosa usate voi? Ho perso completamente il piacere di configurare il sistema... Ubuntu con gnome classic e 12 desktop (LTS normalmente anche se in questo giro ho fatto l'errore di installare la 12.10) Mi irrita un po' la gestione del fuoco che non è come vorrei. Unity non l'ho proprio preso in considerazione anche se capisco che studiando la configurazione forse si tira fuori qualcosa. Gli shortcut mi vanno abbastanza bene anche se 15 anni fa con fvwm li gestivo meglio, da file di configurazione ed in modo semplice... Anche io come altri voglio molti desktop, molti terminali, alcune finestre di emacs, tutte client di un unico server emacs sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] Sphinx doc preprocessing
Ciao a tutti, uno Sphinx regolarmente e ormai da parecchio. Ultimamamente volevo aggiungere la possibiità di usare il barrato in particolare nelle liste. Vari suggerimenti su stackoverflow mostrano come sia suff aggiungere un 'role', degli opportuni css e poi usarla così:: :strike:`My sentence I want to strike through` Siccome però voglio usarla principalmente per liste di elementi, mi piacerebbe avere una scrittura più compatta, in modo da poter scrivere ad esempio: TODO - fix numero uno - fix numero due + fix fondamentale dove l'ultima riga venga preprocessata da Sphinx e trasformata in - :strike:`fix fondamentale` prima di essere data in pasto a ReST Co... Avete idee se e come farlo? sandro *:-) PS: ho anche fatto la domanda su stackoverflow [1] qualche giorno fa, ma senza grande successo, certo questa lista ha grandi risorse... ;-) [1] http://stackoverflow.com/questions/20075420/how-to-add-strike-through-elements-in-a-list-with-sphinx ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Esecuzione dnscmd con python3
On Mon, Oct 21, 2013 at 03:36:17PM +0200, Marco Buttu wrote: On 10/21/2013 12:45 PM, Marco Passanisi wrote: import subprocess output = subprocess.Popen('C:\Windows\System32\dnscmd.exe /EnumZones', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = output.communicate() print(err) Ciao, innanzitutto, come ti hanno detto, dovresti usare delle stringhe raw. Pero' il problema non e' questo, perche' sei stato fortunato e nessuna delle sequenze di caratterei \x fa parte di una sequenza di escape ;) Inoltre, quando usi shell=True, la stringa viene eseguita dalla shell sottostante, quindi avresti potuto scrivere direttamente: subprocess.Popen(C:\Windows\System32\dnscmd.exe /EnumZones, shell=True,...) no, qui manca ancora la raw string! subprocess.Popen(rC:\Windows\System32\dnscmd.exe /EnumZones,shell=True,...) forse basta anche subprocess.Popen(C:/Windows/System32/dnscmd.exe /EnumZones, shell=True,...) che a me pare più leggibile. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta di un IDE
On Thu, Sep 26, 2013 at 09:30:15PM +0200, Carlos Catucci wrote: On 26 September 2013 21:13, Simone Federici s.feder...@gmail.com wrote: Dalla 3 c'è la versione Free Visto ma continua a non piacermi. IMHO Wing Ide (che ho scoperto avere ALCUNE features di SublimeText sulla gestione di testo da tastiera) rimane il miglior IDE Python. ma continui a non dirci perché... il che rende un po' sterile questa litania. sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Scelta di un IDE
On Thu, Sep 26, 2013 at 11:06:37PM +0200, Carlos Catucci wrote: 2013/9/26 Alessandro Dentella san...@e-den.it ma continui a non dirci perché... il che rende un po' sterile questa litania. Ma semplicemente perche' fa tutto quello che mi serve. ;) questo è u ottimo motivo per *usarlo* non per considerare l'altro meno buono. Seriamente, io sono da sempre dell'idea che il miglior tool/linguaggio/quel-che-vi-pare sia quello con cui vi trovate meglio. Io da un IDE chiedo di avere le features che fanno si che mi venga voglia di usarlo a scapito della pesantezza rispetto ad un buon editor. Tra le tante cose provo ad elencarne alcune . Supporto per il versioning automatico. Se hai installato Bazaar ti appare il relativo menu. Idem per GIT e compagnia . Capacita' di eseguire un debugger grafico anche se l'applicativo gira su un webserver come Apache o un minimale come quello di manage.py di Django . Refactoring semplice e funzionale. . Le simpaticissime TAB orizzontali e verticali che mi si aprono e chiudono a comando e sono personalizzabilissime. Al momento non ho aperta la VM dove lo ho installato per cui non posso fare un elenco di tutte le sue features che me lo fanno preferire. Domani vedo se riesco a farvi un tour completo. Grazie Carlo, io però intendevo perché NON ti piace pycharm e lo reputi così indietro rispetto a Wing Ide. Non ne ho usato nessuno dei due ma ho visto PyCharm e ne ho sentito tanto qui, non mi pare faccia molto meno di quello che dici di Wing Ide. sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python