Оболочка OSGeo4W с python3

16

Я хотел бы использовать оболочку OSGeo4W с Python3, но при вводе python3я получаю следующую ошибку:

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

Как я могу использовать Python3?

bennos
источник

Ответы:

23

Нет необходимости редактировать командные файлы (и разбивать python 2.7 в процессе) или устанавливать переменные среды вручную.

Просто запустите, py3_envчтобы автоматически настроить оболочку для Python 3, а затем запустите python3.

Из оболочки OSGeo4W с установленными только 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
источник
12

В оболочке OSGeo4W есть плохо документированная сборка команд, которая устанавливает оболочку на python3, как упоминает Люк

py3_env

В основном это устанавливает ваш PYTHONHOME и правильный путь. Затем вы можете вызвать Python3 с помощью 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.
>>>

Обновление с комментарием аусландера:

Чтобы использовать Python3 с оболочкой OSGeo4W, которая поставляется с QGIS 2, вам нужно изменить файл {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%
bennos
источник
Если вы хотите сделать это в Windows с оболочкой OSGeo4W, которая поставляется с QGIS 3, вам придется перейти {path you installed qgis}\etc\iniи изменить python-core.batссылку, Python36а не Python27в пакетном скрипте, который устанавливает PYTHONHOMEи PATH. Затем позвоните python3из CLI. Однако обратите внимание, что это разорвет ссылки на python 2.7 и даст вам синтаксическую ошибку, если вы попытаетесь вызвать просто python.
аусландер
@Auslander ломать Python 2.7 не способ сделать это. Смотрите мой ответ, просто запустите, py3_envчто автоматически устанавливает оболочку для Python 3.
user2856
@ Люк умный! Я стою исправлено.
аусландер
@ Лука, я обновил свой ответ. Я пропустил команду в оболочке и гугл не дал мне никакого ответа. Тем не менее, оболочка OSGeo4W, поставляемая с QGIS 2, не имеетpy3_env
bennos
Перед выпуском qgis 3 (для которого требуется python 3) требовалась только одна версия python, так как qgis 2 требует python 2. OSGeo4W не мог действительно удалить qgis 2, поэтому им пришлось найти какой-то способ поддержки обоих qgis 2 +. python 2 и qgis 3 + python 3.
user2856
2

Если вы хотите сделать изменение постоянным, вы можете изменить командный файл OSGeo4W.bat, расположенный в вашем каталоге QGIS (или OSGEO), и просто добавить:

call "py3_env"

ниже линии вызова

call "%~dp0\bin\o4w_env.bat"
brodegon
источник