Powłoka OSGeo4W z python3

17

Chciałbym użyć powłoki OSGeo4W z Python3, ale podczas pisania pojawia python3się następujący błąd:

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

Jak mogę używać Python3?

bennos
źródło

Odpowiedzi:

24

Nie ma potrzeby edytowania plików wsadowych (i przerywania procesu w Pythonie 2.7) ani ręcznego ustawiania zmiennych środowiskowych.

Po prostu uruchom, py3_envktóry automatycznie ustawia powłokę dla Pythona 3, a następnie uruchom python3.

Z powłoki OSGeo4W z zainstalowanym tylko pytonem 2 i 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.
>>>
użytkownik2856
źródło
12

Nie ma dobrze udokumentowanej komendy wbudowanej w powłokę OSGeo4W, która ustawia powłokę na Python3, jak wspomina Luke

py3_env

Zasadniczo ustawia PYTHONHOME i prawidłową ŚCIEŻKĘ. Następnie możesz wywołać Python3 za pomocą 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.
>>>

Aktualizacja z komentarzem auslandera:

Aby używać Python3 z powłoką OSGeo4W dostarczoną z QGIS 2, musisz zmienić plik {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
źródło
Jeśli chcesz to zrobić w systemie Windows z powłoką OSGeo4W, która jest dostarczana z QGIS 3, będziesz musiał wejść {path you installed qgis}\etc\inii zmodyfikować python-core.batreferencje Python36zamiast Python27w skrypcie wsadowym, który ustawia PYTHONHOMEi PATH. Następnie zadzwoń python3z CLI. Pamiętaj jednak, że spowoduje to zerwanie łączy do Pythona 2.7 i wystąpi błąd składniowy, jeśli spróbujesz wywołać tylko python.
auslander
@Auslander łamanie Pythona 2.7 nie jest na to sposobem. Zobacz moją odpowiedź, po prostu uruchom, py3_envktóry automatycznie ustawia powłokę dla Pythona 3.
user2856
@Luke sprytne! Poprawiono mnie.
auslander
@Luke Zaktualizowałem swoją odpowiedź. Zignorowałem polecenie w powłoce, a Google nie dał mi żadnej odpowiedzi. Mimo to powłoka OSGeo4W dostarczana z QGIS 2 nie mapy3_env
bennos
Przed wydaniem qgis 3 (który wymaga Pythona 3) potrzebna była tylko jedna wersja Pythona, ponieważ qgis 2 wymaga Pythona 2. OSGeo4W nie mógł naprawdę upuścić qgis 2, więc musieli znaleźć sposób na obsługę obu qgis 2 + python 2 i qgis 3 + python 3.
user2856
2

Jeśli chcesz, aby zmiana była trwała, możesz zmodyfikować plik wsadowy OSGeo4W.bat znajdujący się w katalogu QGIS (lub OSGEO) i po prostu dodać:

call "py3_env"

poniżej linii telefonicznej

call "%~dp0\bin\o4w_env.bat"
brodegon
źródło