[Gfoss] Qgis2: Modificate le variabili di Ambiente Python per python Qgis non si avvia più

Salve a tutti,
ho trovato un qualcosa che se proprio un bug non è, almeno è una “falla”:

Il nuovo QGis 2 permette di modificare le Variabili di Ambiente, sostituendo accodando ecc.

Ora, dovendo installare sotto windows dei moduli non presenti in Qgis, questi finivano ovviamente dentro alla cartella C:\Python27\lib\site-packages.

Di solito li copio e incollo nella cartella site-packages del python di Osgeo…

Questa volta ho voluto provare a dire a Qgis di prendere i moduli anche dal Python in C:\Python27…

Ops…Qgis non ne vuol sapere di avviarsi, perchè sta caricando probabilmente un modulo sip errato (ho visto apparire una finestrina per un attimo)…

Sapere mica quale è la variabile nel regedit da cancellare in modo da riportare Qgis2.0.1 indietro pirma del mio misfatto.

Lo segnalerei non come baco, ma almeno come Warning perchè viene molto naturale provare a puntare dentro alla cartella di Site-packages di C:\Pythonxy per chi sviluppa. Chiaro che andare a toccare tutte le variabili è a proprio rischio e pericolo, ma il fatto che ti mandino in un buco nero senza possibilità di ripristino è un po’ un macello.

Ciao e grazie
Luca

Ciao,

···

2013/10/28 Luca Mandolesi <mandoluca@gmail.com>

Salve a tutti,
ho trovato un qualcosa che se proprio un bug non è, almeno è una “falla”:

Il nuovo QGis 2 permette di modificare le Variabili di Ambiente, sostituendo accodando ecc.

Ora, dovendo installare sotto windows dei moduli non presenti in Qgis, questi finivano ovviamente dentro alla cartella C:\Python27\lib\site-packages.

Di solito li copio e incollo nella cartella site-packages del python di Osgeo…

Questa volta ho voluto provare a dire a Qgis di prendere i moduli anche dal Python in C:\Python27…

Ops…Qgis non ne vuol sapere di avviarsi, perchè sta caricando probabilmente un modulo sip errato (ho visto apparire una finestrina per un attimo)…

Sapere mica quale è la variabile nel regedit da cancellare in modo da riportare Qgis2.0.1 indietro pirma del mio misfatto.

strano, comunque la variabile è “customEnvVarsUse”, credo sia sufficiente un search in regedit ed impostare la chiave a “false”.

Dopo aver avviato QGIS dovresti trovare la checkbox disattivata permettendoti di eliminare o modificare la variabile insertia. Il problema
credo avvebga quando sceglie “Sovrascrivi” e non “Accoda” per la variabile ??

Anche prova a creare una macro che all’apertura del progetto inserisce il pythonpath che vuoi provare.

Per attivare la macro, vai in Impostazioni → Opzioni, nella scheda Generale trovi (in fondo) un menu a tendina per abilitare le macro, scegli Sempre. Nelle proprietà di progetto, alla voce Macro, abilita macro python e copia incolla il seguente codice nella funzione openProject():

import sys
sys.path.append(‘<tuo_pythonpath>’)

Salva e riapri il progetto, verrà aggiunto il path appena insertito alla variabile PYTHONPATH.

Anche vedi se riesci a capire cosa appare in quella “finestrina”.

Saluti,

-SL

Lo segnalerei non come baco, ma almeno come Warning perchè viene molto naturale provare a puntare dentro alla cartella di Site-packages di C:\Pythonxy per chi sviluppa. Chiaro che andare a toccare tutte le variabili è a proprio rischio e pericolo, ma il fatto che ti mandino in un buco nero senza possibilità di ripristino è un po’ un macello.

Ciao e grazie

Luca


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666 iscritti al 22.7.2013


Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

strano, comunque la variabile è "customEnvVarsUse", credo sia sufficiente
un search in regedit ed impostare la chiave a "false".
Dopo aver avviato QGIS dovresti trovare la checkbox disattivata
permettendoti di eliminare o modificare la variabile insertia. Il problema
credo avvebga quando sceglie "Sovrascrivi" e non "Accoda" per la variabile
??

Ottimo ora si riavvia.
Ho scelto Accoda segnalando che volevo aggiungerla alla variabile
PYTHONPATH. Forse è per quello che si incasinava?

Ho provato a settare una mia variabile: PYARCHINITPATH puntando a
C:\Python27\Lib\site-packages ma dalla console se chiamo un modulo che ho
nella cartella di python sotto C ma non in python dentro Osgeo il modulo
non viene trovato.

Ho provato anche il metodo macro, ma quando riapro il progetto il
pezzettino di codice per aggiungere il path a sys.path è sparito, non è
stato salvato e anche la flag delle macro non è attiva.

Ho ricreato anche l'errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.

Traceback (most recent call last):
  File "", line 1, in
RuntimeError: the sip module implements API v8.0 but the qgis.core
module requires API v8.1

Questo avviene perchè in site-packages di C:\\python27 ho un modulo
sip installato tempo fa per lavorare con le QT fuori da Qgis è
chiaramente non compatibile.

Ergo ne dedurrei che c'è in primis un problema di salvataggio dei
settaggi Macro a livello di progetto e poi che sarebbe bello che, in
caso di settaggi alle variabili di ambiente che impediscono a QGis di
funzionare, il sistema flaggasse su false la customEnvVarsUse in modo
da permettere all'utente di rimediare agli errori, anche se non so se
tale cosa può essere fatta da QGis all'avvio.

Ciao e grazie

Luca

Ciao,

···

2013/10/28 Luca Mandolesi <mandoluca@gmail.com>

Accoda va bene e non è il problema, forse scegliendo Sovrascrivi potrebbe generare conflitti con qualche plugin installato.

Dalla console puoi richiamare i packages presenti nel PYTHONPATH, la variabile che imposti tu credo sia qualcosa di personalizzato,

perciò non saprei se va a finire all’interno del path del pitone. Se è necessario creare quella variabile credo dovresti richiamarla direttamente dal tuo plugin.

Potresti anche provare ad aggiungere il percorso direttamente dalla console python (con le stesse righe di codice della macro).

Le macro vengono salvate nel file XML di progetto (.qgs), così è necessario salvare e riaprire lo stesso progetto.

L’ho appena testato è funziona in entrambe le versioni, 2.0 e master.

mmm…, non capisco perchè quell’errore, prima di aprire eventualmente un bug, fai una prova con la macro e vedi se ottieni lo stesso identico errore.

Saluti,

-SL


Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

Ottimo ora si riavvia.
Ho scelto Accoda segnalando che volevo aggiungerla alla variabile PYTHONPATH. Forse è per quello che si incasinava?

strano, comunque la variabile è “customEnvVarsUse”, credo sia sufficiente un search in regedit ed impostare la chiave a “false”.

Dopo aver avviato QGIS dovresti trovare la checkbox disattivata permettendoti di eliminare o modificare la variabile insertia. Il problema
credo avvebga quando sceglie “Sovrascrivi” e non “Accoda” per la variabile ??

Ho provato a settare una mia variabile: PYARCHINITPATH puntando a C:\Python27\Lib\site-packages ma dalla console se chiamo un modulo che ho nella cartella di python sotto C ma non in python dentro Osgeo il modulo non viene trovato

.

Ho provato anche il metodo macro, ma quando riapro il progetto il pezzettino di codice per aggiungere il path a sys.path è sparito, non è stato salvato e anche la flag delle macro non è attiva.

Ho ricreato anche l’errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.


Traceback (most recent call last):
  File "", line 1, in 
RuntimeError: the sip module implements API v8.0 but the qgis.core module requires API v8.1

Questo avviene perchè in site-packages di C:\\python27 ho un modulo sip installato tempo fa per lavorare con le QT fuori da Qgis è chiaramente non compatibile.

Ergo ne dedurrei che c'è in primis un problema di salvataggio dei settaggi Macro a livello di progetto e poi che sarebbe bello che, in caso di settaggi alle variabili di ambiente che impediscono a QGis di funzionare, il sistema flaggasse su false la customEnvVarsUse in modo da permettere all'utente di rimediare agli errori, anche se non so se tale cosa può essere fatta da QGis all'avvio.



Ciao e grazie
Luca

Dalla console puoi richiamare i packages presenti nel PYTHONPATH, la

variabile che imposti tu credo sia qualcosa di personalizzato,
perciò non saprei se va a finire all'interno del path del pitone. Se è
necessario creare quella variabile credo dovresti richiamarla direttamente
dal tuo plugin.
Potresti anche provare ad aggiungere il percorso direttamente dalla
console python (con le stesse righe di codice della macro).

Il mio PYTHONPATH punta solo su C:\OSGeo4W\apps\qgis\python\ mentre ignora
C:\Python27. Appena però punto a quello arriva il modulo SIP che fa danni.

Ho provato anche il metodo macro, ma quando riapro il progetto il
pezzettino di codice per aggiungere il path a sys.path è sparito, non è
stato salvato e anche la flag delle macro non è attiva.

Le macro vengono salvate nel file XML di progetto (.qgs), così è
necessario salvare e riaprire lo stesso progetto.
L'ho appena testato è funziona in entrambe le versioni, 2.0 e master.

Fatto un reinstall..effettivamente ora funziona prima invece riaprendo il
medesimo progetto la modifica spariva...mah... Una domanda:
devo semplicemente aggiugere le righe
import sys
sys.path.append('miopath')

oppure le macro esigono sempre una def?

def mytest():
    import sys
    sys.path.append('miopath')

Ho ricreato anche l'errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.

Traceback (most recent call last):
  File "", line 1, in
RuntimeError: the sip module implements API v8.0 but the qgis.core module requires API v8.1

Questo avviene perchè in site-packages di C:\\python27 ho un modulo sip installato tempo fa per lavorare con le QT fuori da Qgis è chiaramente non compatibile.

Ergo ne dedurrei che c'è in primis un problema di salvataggio dei settaggi Macro a livello di progetto e poi che sarebbe bello che, in caso di settaggi alle variabili di ambiente che impediscono a QGis di funzionare, il sistema flaggasse su false la customEnvVarsUse in modo da permettere all'utente di rimediare agli errori, anche se non so se tale cosa può essere fatta da QGis all'avvio.

mmm...., non capisco perchè quell'errore, prima di aprire eventualmente

un bug, fai una prova con la macro e vedi se ottieni lo stesso identico
errore.

Saluti,
-SL

Ok, proverò. Intanto grazie mille.
Luca

Il 28/ott/2013 17:14 “Luca Mandolesi” <mandoluca@gmail.com> ha scritto:

Dalla console puoi richiamare i packages presenti nel PYTHONPATH, la variabile che imposti tu credo sia qualcosa di personalizzato,
perciò non saprei se va a finire all’interno del path del pitone. Se è necessario creare quella variabile credo dovresti richiamarla direttamente dal tuo plugin.
Potresti anche provare ad aggiungere il percorso direttamente dalla console python (con le stesse righe di codice della macro).

Il mio PYTHONPATH punta solo su C:\OSGeo4W\apps\qgis\python\ mentre ignora C:\Python27. Appena però punto a quello arriva il modulo SIP che fa danni.

Ho provato anche il metodo macro, ma quando riapro il progetto il pezzettino di codice per aggiungere il path a sys.path è sparito, non è stato salvato e anche la flag delle macro non è attiva.

Le macro vengono salvate nel file XML di progetto (.qgs), così è necessario salvare e riaprire lo stesso progetto.
L’ho appena testato è funziona in entrambe le versioni, 2.0 e master.

Fatto un reinstall…effettivamente ora funziona prima invece riaprendo il medesimo progetto la modifica spariva…mah… Una domanda:
devo semplicemente aggiugere le righe
import sys
sys.path.append(‘miopath’)

oppure le macro esigono sempre una def?

def mytest():
import sys
sys.path.append(‘miopath’)

La macro crea un modulo python che sarà caricato nel tuo progetto con il quale puoi eseguire specifiche funzioni solo per gli eventi openProject, saveProject e closeProject. Quindi quelle funzioni devono rimanere, in sostanza devi solo sostituire ‘pass’ con qualche linea di codice. Nel tuo caso devi solamente modificare la funzione openProject:

def openProject():
import sys
sys.path.append(‘tuopath’)

Per le funzioni saveProject e closeProject lascia le stringhe di default.

Ciao,
-SL

Ho ricreato anche l’errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.

Traceback (most recent call last):
File “”, line 1, in
RuntimeError: the sip module implements API v8.0 but the qgis.core module requires API v8.1

Questo avviene perchè in site-packages di C:\python27 ho un modulo sip installato tempo fa per lavorare con le QT fuori da Qgis è chiaramente non compatibile.

Ergo ne dedurrei che c’è in primis un problema di salvataggio dei settaggi Macro a livello di progetto e poi che sarebbe bello che, in caso di settaggi alle variabili di ambiente che impediscono a QGis di funzionare, il sistema flaggasse su false la customEnvVarsUse in modo da permettere all’utente di rimediare agli errori, anche se non so se tale cosa può essere fatta da QGis all’avvio.

mmm…, non capisco perchè quell’errore, prima di aprire eventualmente un bug, fai una prova con la macro e vedi se ottieni lo stesso identico errore.

Saluti,
-SL

Ok, proverò. Intanto grazie mille.
Luca

Ciao Salvatore,
ho fatto la prova nel modo corretto che mi hai segnalato e funziona.

Unico problema: chiamando un modulo da path di C:\Python27\Lib\site-packages che a sua volta sfrutta un modulo che Qgis ha di default dentro al suo site-packages viene sollevato un errore per problemi di versione. Quindi c’è sempre da stare attenti a mischiare i path.

Domandona:
quando abilito il mio plugin pyarchinit, questo avrebbe bisogno di settare la famosa variabile Globale con un bel Accoda per pescare i .exe del programma GRaphviz. Sai per caso se c’è in pyqgis la classe relativa per poter manipolare da plugin quella path, senza chiedere all’utente che lo faccia dalle impostazioni di QGis. Vorrei prevedere nel pannello di configurazione del mio plugin anche una variabile in cui settare manualmente il path a Graphviz nel caso vi fosse installata una versione difforme da quella consigliata nella nostra documentazione.

Ciao e grazie
Luca

···

2013/10/28 Salvatore Larosa <lrssvtml@gmail.com>

Il 28/ott/2013 17:14 “Luca Mandolesi” <mandoluca@gmail.com> ha scritto:

Dalla console puoi richiamare i packages presenti nel PYTHONPATH, la variabile che imposti tu credo sia qualcosa di personalizzato,
perciò non saprei se va a finire all’interno del path del pitone. Se è necessario creare quella variabile credo dovresti richiamarla direttamente dal tuo plugin.
Potresti anche provare ad aggiungere il percorso direttamente dalla console python (con le stesse righe di codice della macro).

Il mio PYTHONPATH punta solo su C:\OSGeo4W\apps\qgis\python\ mentre ignora C:\Python27. Appena però punto a quello arriva il modulo SIP che fa danni.

Ho provato anche il metodo macro, ma quando riapro il progetto il pezzettino di codice per aggiungere il path a sys.path è sparito, non è stato salvato e anche la flag delle macro non è attiva.

Le macro vengono salvate nel file XML di progetto (.qgs), così è necessario salvare e riaprire lo stesso progetto.
L’ho appena testato è funziona in entrambe le versioni, 2.0 e master.

Fatto un reinstall…effettivamente ora funziona prima invece riaprendo il medesimo progetto la modifica spariva…mah… Una domanda:
devo semplicemente aggiugere le righe
import sys
sys.path.append(‘miopath’)

oppure le macro esigono sempre una def?

def mytest():
import sys
sys.path.append(‘miopath’)

La macro crea un modulo python che sarà caricato nel tuo progetto con il quale puoi eseguire specifiche funzioni solo per gli eventi openProject, saveProject e closeProject. Quindi quelle funzioni devono rimanere, in sostanza devi solo sostituire ‘pass’ con qualche linea di codice. Nel tuo caso devi solamente modificare la funzione openProject:

def openProject():
import sys
sys.path.append(‘tuopath’)

Per le funzioni saveProject e closeProject lascia le stringhe di default.

Ciao,
-SL

Ho ricreato anche l’errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.

Traceback (most recent call last):
File “”, line 1, in
RuntimeError: the sip module implements API v8.0 but the qgis.core module requires API v8.1

Questo avviene perchè in site-packages di C:\python27 ho un modulo sip installato tempo fa per lavorare con le QT fuori da Qgis è chiaramente non compatibile.

Ergo ne dedurrei che c’è in primis un problema di salvataggio dei settaggi Macro a livello di progetto e poi che sarebbe bello che, in caso di settaggi alle variabili di ambiente che impediscono a QGis di funzionare, il sistema flaggasse su false la customEnvVarsUse in modo da permettere all’utente di rimediare agli errori, anche se non so se tale cosa può essere fatta da QGis all’avvio.

mmm…, non capisco perchè quell’errore, prima di aprire eventualmente un bug, fai una prova con la macro e vedi se ottieni lo stesso identico errore.

Saluti,
-SL

Ok, proverò. Intanto grazie mille.
Luca

Ciao Luca

···

2013/10/30 Luca Mandolesi <mandoluca@gmail.com>

Ciao Salvatore,
ho fatto la prova nel modo corretto che mi hai segnalato e funziona.

Unico problema: chiamando un modulo da path di C:\Python27\Lib\site-packages che a sua volta sfrutta un modulo che Qgis ha di default dentro al suo site-packages viene sollevato un errore per problemi di versione. Quindi c’è sempre da stare attenti a mischiare i path.

Domandona:
quando abilito il mio plugin pyarchinit, questo avrebbe bisogno di settare la famosa variabile Globale con un bel Accoda per pescare i .exe del programma GRaphviz. Sai per caso se c’è in pyqgis la classe relativa per poter manipolare da plugin quella path, senza chiedere all’utente che lo faccia dalle impostazioni di QGis. Vorrei prevedere nel pannello di configurazione del mio plugin anche una variabile in cui settare manualmente il path a Graphviz nel caso vi fosse installata una versione difforme da quella consigliata nella nostra documentazione.

non esiste la classe relativa da utilizzare con python, in QGIS tali variabili vengono scritte sul file delle impostazioni (in .config/QGIS/QGIS2.conf, per linux, nel regedit in caso di sistemi Windows) così è sufficiente usare QSettings, con il valore della chiave corrispondente che in questo caso è “qgis/customEnvVars”, per aggiungere o eliminare variabili d’ambiente.

Un esempio su come impostare la variabile PYTHONPATH dalla console python è:

from PyQt4.QtCore import QSettings

s = QSettings()
customVars = [‘append|PYTHONPATH=/mio/path’]

s.setValue(“qgis/customEnvVars”, customVars)

attento, il codice sopra sovrascrive le varibili che eventualmente sono state già impostate nelle opzioni di QGIS, se vuoi aggiugere una nuova a quelle esistenti:

customVars = s.value(“qgis/customEnvVars”)

tuaVar = ‘append|PYARCHINIT=C:\Python27\Lib’

customVars.append(tuaVar)

Potresti dare un’occhiata anche al modulo os.environ con il quale puoi definire una tua variabile semplicemente:

import os

os.environ[‘PYARCHINIT’] = ‘tuopath’

Mentre se il problema è semplicemente il caricamento di un modulo specifico che porta ad errore perchè non trovato

nel PYTHONPATH, allora potrebbe bastare anche:

import sys

if dir not in sys.path:

sys.path.append(dir)

dove dir è la directory che vorresti impostare dal tuo plugin.

In ogni caso credo ci sia bisogno di un riavvio di QGIS.

Spero di non essere stato troppo dispersivo e che queste indicazioni possano tornarti utili. (spero anche di aver focalizzato il problema :slight_smile:

Saluti,

-SL

Ciao e grazie

Luca


Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

2013/10/28 Salvatore Larosa <lrssvtml@gmail.com>

Il 28/ott/2013 17:14 “Luca Mandolesi” <mandoluca@gmail.com> ha scritto:

Dalla console puoi richiamare i packages presenti nel PYTHONPATH, la variabile che imposti tu credo sia qualcosa di personalizzato,
perciò non saprei se va a finire all’interno del path del pitone. Se è necessario creare quella variabile credo dovresti richiamarla direttamente dal tuo plugin.
Potresti anche provare ad aggiungere il percorso direttamente dalla console python (con le stesse righe di codice della macro).

Il mio PYTHONPATH punta solo su C:\OSGeo4W\apps\qgis\python\ mentre ignora C:\Python27. Appena però punto a quello arriva il modulo SIP che fa danni.

Ho provato anche il metodo macro, ma quando riapro il progetto il pezzettino di codice per aggiungere il path a sys.path è sparito, non è stato salvato e anche la flag delle macro non è attiva.

Le macro vengono salvate nel file XML di progetto (.qgs), così è necessario salvare e riaprire lo stesso progetto.
L’ho appena testato è funziona in entrambe le versioni, 2.0 e master.

Fatto un reinstall…effettivamente ora funziona prima invece riaprendo il medesimo progetto la modifica spariva…mah… Una domanda:
devo semplicemente aggiugere le righe
import sys
sys.path.append(‘miopath’)

oppure le macro esigono sempre una def?

def mytest():
import sys
sys.path.append(‘miopath’)

La macro crea un modulo python che sarà caricato nel tuo progetto con il quale puoi eseguire specifiche funzioni solo per gli eventi openProject, saveProject e closeProject. Quindi quelle funzioni devono rimanere, in sostanza devi solo sostituire ‘pass’ con qualche linea di codice. Nel tuo caso devi solamente modificare la funzione openProject:

def openProject():
import sys
sys.path.append(‘tuopath’)

Per le funzioni saveProject e closeProject lascia le stringhe di default.

Ciao,
-SL

Ho ricreato anche l’errore e questo è il messaggio in finestra:

Impossibile caricare PyQGIS.
Il supporto Python verrà disabilitato.

Traceback (most recent call last):
File “”, line 1, in
RuntimeError: the sip module implements API v8.0 but the qgis.core module requires API v8.1

Questo avviene perchè in site-packages di C:\python27 ho un modulo sip installato tempo fa per lavorare con le QT fuori da Qgis è chiaramente non compatibile.

Ergo ne dedurrei che c’è in primis un problema di salvataggio dei settaggi Macro a livello di progetto e poi che sarebbe bello che, in caso di settaggi alle variabili di ambiente che impediscono a QGis di funzionare, il sistema flaggasse su false la customEnvVarsUse in modo da permettere all’utente di rimediare agli errori, anche se non so se tale cosa può essere fatta da QGis all’avvio.

mmm…, non capisco perchè quell’errore, prima di aprire eventualmente un bug, fai una prova con la macro e vedi se ottieni lo stesso identico errore.

Saluti,
-SL

Ok, proverò. Intanto grazie mille.
Luca