Shell OSGeo4W con python3


16

Vorrei usare la shell OSGeo4W con Python3 ma durante la digitazione python3ottengo il seguente errore:

Fatal Python error: Py_Initialize: unable to load the file system codec
  File "C:\OSGEO4~1\apps\Python27\lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax

Come posso usare Python3?

Risposte:


23

Non è necessario modificare i file batch (e rompere Python 2.7 nel processo) o impostare manualmente le variabili di ambiente.

Basta eseguire py3_envche imposta automaticamente la shell per Python 3, quindi eseguire python3.

Da una shell OSGeo4W con installato solo Python 2 e 3:

C:\> o-help
                   -={ OSGeo4W Shell Commands }=-

       dllupdate           pip3                sqlite3
       easy_install3       python              textreplace
       nircmd              python3             vcredist_2015_x64
       nircmdc             pythonw             xxmklink
       osgeo4w-setup       pythonw3


       make-bat-for-py   py3_env  <<<=== This is the command you want
       o-help            setup-test
       o4w_env           setup



C:\>python3
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Current thread 0x000013e8 (most recent call first):
^C

C:\>py3_env
C:\>python3

Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

12

C'è un comando non ben documentato integrato in OSGeo4W Shell che imposta la shell su python3 come menziona Luke

py3_env

Fondamentalmente imposta il tuo PYTHONHOME e il PERCORSO corretto. Quindi puoi chiamare Python3 con python3.

C:\>py3_env
C:\>SET PYTHONPATH=
C:\>SET PYTHONHOME=C:\OSGEO4~1\apps\Python36
C:\>PATH C:\OSGEO4~1\apps\Python36;C:\OSGEO4~1\apps\Python36\Scripts;C:\OSGEO4~1\apps\Python27\Scripts;C:\OSGEO4~1\bin;C:\Windows\system32;C:\Windows;C:\Windows\WBem
C:\>python3
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Aggiornamento con il commento di auslander:

Per usare Python3 con la shell OSGeo4W fornita con QGIS 2 devi cambiare il file {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%

Se vuoi farlo su Windows con la shell OSGeo4W fornita con QGIS 3, dovrai andare {path you installed qgis}\etc\inie modificare python-core.batcome riferimento Python36invece che Python27nello script batch che imposta PYTHONHOMEe PATH. Quindi chiamare python3dalla CLI. Tuttavia nota che questo interromperà i collegamenti a Python 2.7 e ti darà un errore di sintassi se provi a chiamare just python.
auslander,

@Auslander breaking python 2.7 non è il modo per farlo. Vedi la mia risposta, basta eseguire py3_envche imposta automaticamente la shell per Python 3.
user2856

@Luke clever! Sono corretto.
auslander,

@Luke ho aggiornato la mia risposta. Ho trascurato il comando nella shell e google non mi ha dato alcuna risposta. Tuttavia, la shell OSGeo4W fornita con QGIS 2 non hapy3_env
bennos

Prima di rilasciare qgis 3 (che richiede python 3) c'era solo la necessità di una singola versione di python poiché qgis 2 richiede python 2. OSGeo4W non è riuscito a rilasciare qgis 2, quindi hanno dovuto trovare un modo per supportare entrambi qgis 2 + python 2 e qgis 3 + python 3.
user2856

2

Se si desidera rendere permanente la modifica, è possibile modificare il file batch OSGeo4W.bat situato nella directory QGIS (o OSGEO) e aggiungere semplicemente:

call "py3_env"

sotto la linea chiamante

call "%~dp0\bin\o4w_env.bat"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.