OSGeo4W shell con python3

16

Me gustaría usar el shell OSGeo4W con Python3, pero al escribir python3recibo el siguiente error:

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

¿Cómo puedo usar Python3?

bennos
fuente

Respuestas:

23

No es necesario editar archivos por lotes (y romper Python 2.7 en el proceso) o establecer variables de entorno manualmente.

Simplemente ejecute lo py3_envque configura el shell para Python 3 automáticamente, luego ejecute python3.

Desde un shell OSGeo4W con solo python 2 y 3 instalado:

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.
>>>
usuario2856
fuente
12

Hay una compilación de comandos no bien documentada en OSGeo4W Shell que establece el shell en python3 como Luke menciona

py3_env

Básicamente establece tu PYTHONHOME y la RUTA correcta. Entonces puedes llamar a 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.
>>>

Actualización con el comentario de auslander:

Para usar Python3 con el shell OSGeo4W que viene con QGIS 2, debe cambiar el archivo {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
fuente
Si desea hacer esto en Windows con el shell OSGeo4W que viene con QGIS 3, deberá ingresar {path you installed qgis}\etc\iniy modificar la python-core.batreferencia en Python36lugar de hacerlo Python27en el script por lotes que establece PYTHONHOMEy PATH. Luego llame python3desde la CLI. Sin embargo, tenga en cuenta que esto romperá los enlaces a Python 2.7 y le dará un error de sintaxis si intenta llamar solo python.
auslander
@Auslander romper Python 2.7 no es la forma de hacer esto. Vea mi respuesta, solo ejecute lo py3_envque configura el shell para Python 3 automáticamente.
user2856
@Luke inteligente! Estoy corregido.
auslander
@Luke He actualizado mi respuesta. Pasé por alto el comando en el shell y google no me dio ninguna respuesta. Aún así, el shell OSGeo4W que viene con QGIS 2 no tiene elpy3_env
bennos
Antes de que se lanzara qgis 3 (que requiere python 3), solo era necesaria una versión única de python, ya que qgis 2 requiere python 2. OSGeo4W realmente no podía soltar qgis 2, por lo que tenían que encontrar alguna forma de soportar ambos qgis 2 + python 2 y qgis 3 + python 3.
user2856
2

Si desea que el cambio sea permanente, puede modificar el archivo por lotes OSGeo4W.bat ubicado en su directorio QGIS (u OSGEO) y simplemente agregar:

call "py3_env"

debajo de la línea llamando

call "%~dp0\bin\o4w_env.bat"
Brodegon
fuente