Shell OSGeo4W com python3

16

Gostaria de usar o shell OSGeo4W com Python3, mas ao digitar python3, recebo o seguinte erro:

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

Como posso usar o Python3?

bennos
fonte

Respostas:

22

Não há necessidade de editar arquivos em lote (e interromper o python 2.7 no processo) ou definir variáveis ​​de ambiente manualmente.

Basta executar o py3_envque configura o shell para o Python 3 automaticamente e depois executar python3.

De um shell OSGeo4W com apenas python 2 e 3 instalados:

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.
>>>
user2856
fonte
12

Existe um comando não muito bem documentado incorporado ao OSGeo4W Shell que define o shell para python3, como Lucas menciona

py3_env

Basicamente, ele define seu PYTHONHOME e o CAMINHO correto. Então você pode chamar o Python3 com 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.
>>>

Atualização com o comentário de auslander:

Para usar o Python3 com o shell OSGeo4W que acompanha o QGIS 2, é necessário alterar o arquivo {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
fonte
Se você quiser fazer isso no Windows com o shell OSGeo4W que vem com o QGIS 3, precisará entrar {path you installed qgis}\etc\inie modificar python-core.batpara fazer referência, em Python36vez de Python27no script em lote que define PYTHONHOMEe PATH. Em seguida, ligue python3da CLI. No entanto, observe que isso quebrará os links para o python 2.7 e fornecerá um erro de sintaxe se você tentar chamar just python.
Auslander
Auslander que quebra o python 2.7 não é a maneira de fazer isso. Veja minha resposta, basta executar o py3_envque configura o shell para o Python 3 automaticamente.
precisa saber é o seguinte
@Luke inteligente! Eu estou corrigido.
Auslander
@ Luke Atualizei minha resposta. Eu ignorei o comando no shell e o Google não me deu nenhuma resposta. Ainda assim, o shell OSGeo4W que vem com QGIS 2 não tem apy3_env
Bennos
Antes do qgis 3 (que requer o python 3) ser lançado, havia apenas uma necessidade de uma única versão do python, pois o qgis 2 requer o python 2. O OSGeo4W não conseguia descartar o qgis 2, então eles tiveram que encontrar uma maneira de oferecer suporte ao qgis 2 + pitão 2 e 3 qgis + pitão 3.
user2856
2

Se desejar tornar a alteração permanente, você pode modificar o arquivo em lote OSGeo4W.bat localizado no diretório QGIS (ou OSGEO) e apenas adicionar:

call "py3_env"

abaixo da linha chamando

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