OSGeo4W-Shell mit Python3

15

Ich möchte die OSGeo4W-Shell mit Python3 verwenden, erhalte jedoch beim Tippen python3die folgende Fehlermeldung:

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

Wie kann ich Python3 verwenden?

bennos
quelle

Antworten:

21

Es ist nicht erforderlich, Batchdateien zu bearbeiten (und dabei Python 2.7 zu unterbrechen) oder Umgebungsvariablen manuell festzulegen.

Führen Sie einfach aus, py3_envwodurch die Shell automatisch für Python 3 eingerichtet wird, und führen Sie dann aus python3.

Von einer OSGeo4W-Shell mit nur Python 2 & 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.
>>>
user2856
quelle
12

In OSGeo4W Shell ist ein nicht gut dokumentierter Befehl eingebaut, der die Shell auf python3 einrichtet, wie Luke erwähnt

py3_env

Grundsätzlich wird Ihr PYTHONHOME und der richtige PFAD eingestellt. Dann können Sie Python3 mit aufrufen 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.
>>>

Update mit dem Kommentar von auslander:

Um Python3 mit der in QGIS 2 enthaltenen OSGeo4W-Shell zu verwenden, müssen Sie die Datei ändern {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
quelle
Wenn Sie diese auf Windows mit dem OSGeo4W Shell tun wollen , die mit QGIS kommt 3, werden Sie in gehen müssen {path you installed qgis}\etc\iniund modifizieren , python-core.batum Referenz Python36statt Python27im Batch - Skript , dass Sets PYTHONHOMEund PATH. Rufen Sie dann python3von der CLI aus an. Beachten Sie jedoch, dass dies Verknüpfungen zu Python 2.7 unterbricht und Sie einen Syntaxfehler erhalten, wenn Sie versuchen, nur aufzurufen python.
Ausländer
@Auslander Breaking Python 2.7 ist nicht der Weg, dies zu tun. Siehe meine Antwort, einfach ausführen, py3_envwodurch die Shell für Python 3 automatisch eingerichtet wird.
user2856
@Luke schlau! Ich stehe korrigiert.
Ausländer
@ Luke Ich habe meine Antwort aktualisiert. Ich habe den Befehl in der Shell übersehen und Google hat mir keine Antwort gegeben. Die OSGeo4W-Shell, die mit QGIS 2 geliefert wird, hat jedoch nicht diepy3_env
bennos
Vor der Veröffentlichung von qgis 3 (für das Python 3 erforderlich ist) war nur eine einzige Version von Python erforderlich, da für qgis 2 Python 2 erforderlich war. OSGeo4W konnte qgis 2 nicht wirklich löschen, sodass beide Versionen von qgis 2 + unterstützt werden mussten python 2 und qgis 3 + python 3.
user2856
2

Wenn Sie die Änderung permanent machen möchten, können Sie die Batch-Datei OSGeo4W.bat in Ihrem QGIS- (oder OSGEO-) Verzeichnis ändern und einfach Folgendes hinzufügen:

call "py3_env"

unter der Leitung anrufen

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