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

Salvatore Larosa lrssvtml a gmail.com
Mer 30 Ott 2013 20:52:58 CET


Ciao Luca

2013/10/30 Luca Mandolesi <mandoluca a 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 :-)

Saluti,
-SL



> Ciao e grazie
> Luca
>
>
>
>
> 2013/10/28 Salvatore Larosa <lrssvtml a gmail.com>
>
>> Il 28/ott/2013 17:14 "Luca Mandolesi" <mandoluca a 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
>> >
>>
>
>


-- 
Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode
-------------- parte successiva --------------
Un allegato HTML ? stato rimosso...
URL: <http://lists.gfoss.it/pipermail/gfoss/attachments/20131030/afc7fa08/attachment-0001.html>


Maggiori informazioni sulla lista Gfoss