Shell OSGeo4W dengan python3


16

Saya ingin menggunakan shell OSGeo4W dengan Python3 tetapi ketika mengetik python3saya mendapatkan kesalahan berikut:

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

Bagaimana saya bisa menggunakan Python3?

Jawaban:


23

Tidak perlu mengedit file batch (dan memecah python 2.7 dalam proses) atau mengatur variabel lingkungan secara manual.

Jalankan saja py3_envyang mengatur shell untuk Python 3 secara otomatis, kemudian jalankan python3.

Dari shell OSGeo4W dengan hanya python 2 & 3 diinstal:

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.
>>>

12

Ada perintah build yang tidak terdokumentasi dengan baik ke dalam OSGeo4W Shell yang mengatur shell hingga python3 seperti yang disebutkan oleh Luke

py3_env

Pada dasarnya itu mengatur PYTHONHOME Anda dan PATH yang benar. Maka Anda dapat memanggil Python3 dengan 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.
>>>

Perbarui dengan komentar auslander:

Untuk menggunakan Python3 dengan shell OSGeo4W yang datang dengan QGIS 2 Anda harus mengubah file {path you installed qgis}\etc\ini\python-core.bat:

SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36
PATH %OSGEO4W_ROOT%\apps\Python36\Scripts;%PATH%

Jika Anda ingin melakukan ini pada Windows dengan shell OSGeo4W yang datang dengan QGIS 3, Anda harus masuk {path you installed qgis}\etc\inidan memodifikasi python-core.batreferensi Python36sebagai ganti Python27dalam skrip batch yang mengatur PYTHONHOMEdan PATH. Kemudian telepon python3dari CLI. Namun perhatikan ini akan memutus tautan ke python 2.7 dan memberikan Anda kesalahan sintaks jika Anda mencoba menelepon saja python.
auslander

@Auslander melanggar python 2.7 bukan cara untuk melakukan ini. Lihat jawaban saya, jalankan saja py3_envyang mengatur shell untuk Python 3 secara otomatis.
user2856

@ Lukas pintar! Saya berdiri dikoreksi.
auslander

@ Lukas Saya sudah memperbarui jawaban saya. Saya mengabaikan perintah di shell dan google tidak memberi saya jawaban. Namun, shell OSGeo4W yang datang dengan QGIS 2 tidak memilikipy3_env
bennos

Sebelum qgis 3 (yang membutuhkan python 3) dirilis, hanya ada kebutuhan untuk satu versi python karena qgis 2 memerlukan python 2. OSGeo4W tidak dapat benar-benar menjatuhkan qgis 2 sehingga mereka harus menemukan cara untuk mendukung kedua qgis 2 + python 2 dan qgis 3 + python 3.
user2856

2

Jika Anda ingin menjadikan perubahan itu permanen, Anda dapat memodifikasi file batch OSGeo4W.bat yang terdapat di direktori QGIS (atau OSGEO) Anda dan tambahkan saja:

call "py3_env"

di bawah garis panggilan

call "%~dp0\bin\o4w_env.bat"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.