Shell OSGeo4W avec python3

16

Je voudrais utiliser le shell OSGeo4W avec Python3 mais lors de la frappe, python3j'obtiens l'erreur suivante:

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

Comment utiliser Python3?

bennos
la source

Réponses:

23

Il n'est pas nécessaire de modifier les fichiers batch (et de casser python 2.7 dans le processus) ou de définir manuellement les variables d'environnement.

Exécutez simplement py3_envce qui configure le shell pour Python 3 automatiquement, puis exécutez python3.

À partir d'un shell OSGeo4W avec seulement python 2 et 3 installés:

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
la source
12

Il y a une construction de commandes pas bien documentée dans OSGeo4W Shell qui définit le shell sur python3 comme Luke le mentionne

py3_env

Fondamentalement, il définit votre PYTHONHOME et le bon chemin. Ensuite, vous pouvez appeler Python3 avec 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.
>>>

Mise à jour avec le commentaire d'Auslander:

Pour utiliser Python3 avec le shell OSGeo4W fourni avec QGIS 2, vous devez modifier le fichier {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
la source
Si vous souhaitez le faire sous Windows avec le shell OSGeo4W fourni avec QGIS 3, vous devrez entrer {path you installed qgis}\etc\iniet modifier python-core.batpour référencer Python36au lieu de Python27dans le script batch qui définit PYTHONHOMEet PATH. Appelez ensuite python3depuis la CLI. Cependant, notez que cela rompra les liens vers python 2.7 et vous donnera une erreur de syntaxe si vous essayez d'appeler simplement python.
auslander
@Auslander briser python 2.7 n'est pas le moyen de le faire. Voir ma réponse, exécutez simplement py3_envce qui configure le shell pour Python 3 automatiquement.
user2856
@Luke intelligent! Je me suis trompé.
auslander
@Luke, j'ai mis à jour ma réponse. J'ai ignoré la commande dans le shell et Google ne m'a donné aucune réponse. Pourtant, le shell OSGeo4W fourni avec QGIS 2 n'a pas lepy3_env
bennos
Avant la sortie de qgis 3 (qui nécessite python 3), il n'y avait besoin que d'une seule version de python car qgis 2 nécessite python 2. OSGeo4W ne pouvait pas vraiment supprimer qgis 2, ils ont donc dû trouver un moyen de prendre en charge les deux qgis 2 + python 2 et qgis 3 + python 3.
user2856
2

Si vous souhaitez rendre la modification permanente, vous pouvez modifier le fichier de commandes OSGeo4W.bat situé dans votre répertoire QGIS (ou OSGEO) et ajouter simplement:

call "py3_env"

sous la ligne appelant

call "%~dp0\bin\o4w_env.bat"
brodegon
la source