Kesalahan Fatal Python: Py_Initialize: Tidak dapat mendapatkan pengkodean lokal ... Sintaksis: Korupsi tidak valid dibatalkan (inti dibuang)

16

Saya menginstal anaconda dengan menjalankan

bash Anaconda-2.2.0-Linux-x86_64.sh

perintah pada sistem Ubuntu 14.04 saya, yang berhasil diinstal, setelah itu saya diminta untuk mengekspor /home/username/anaconda/binvariabel lingkungan $ PATH saya yang baru .

Saat melakukannya, saya dapat menggunakan semua fitur anaconda termasuk IDE serta menggunakan semua perintah berbasis konda dengan sukses.

Lain kali saya boot sistem saya, setiap perintah salah ketik melihat a

Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/local/lib/python2.7/encodings/__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax
Aborted (core dumped)

kesalahan. (Semua perintah kecuali pythonspesifik)

Setelah mengikuti beberapa stackexchange dan askubuntu posting dan juga memperhatikan bahwa saya $PYTHONPATHtelah diatur untuk usr/local/lib/python2.7, saya mencoba

export PYTHONPATH=$PYTHONPATH:/home/username/anaconda/lib/python2.7

tapi itu tidak membantu.

Ini membuat saya membaca seluruh kisah pemindahan paket dan menginstal ulang, dan tentu saja, banyak pembaruan dan peningkatan, untuk mencoba dan memperbaiki masalah sendiri.

conda info -a pengembalian:

CIO_TEST: <not set>
CONDA_DEFAULT_ENV: <not set>
CONDA_ENVS_PATH: <not set>
LD_LIBRARY_PATH: <not set>
PATH: /home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin
PYTHONHOME: <not set>
PYTHONPATH: /usr/local/lib/python2.7:/home/username/anaconda/bin/python

Perintah

which python

kembali

/home/username/anaconda/bin/python

dan

echo "$PATH"

kembali

/home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin

Saya tahu ini ada hubungannya dengan cara saya mengatur variabel path, khususnya di ~/.bashrcmana Anaconda secara otomatis menambahkan folder saya / home / username / anaconda / bin ke $PATHvariabel (Ini terjadi saat instalasi Anaconda kedua setelah saya menghapusnya terlebih dahulu ).

Saya belum mengubah variabel lingkungan lain di salah satu ~/.profileatau ~/.bashrc.


Saya menambahkan baris ekspor $ PYTHONPATH ke saya ~/.bashrcsebelum memulai kembali.

Semua fitur Anaconda bekerja sekarang, meskipun Fatal Python error: Py_Initialize: Unable to get the locale encodingkesalahan yang sama terus muncul alih-alih kesalahan perintah yang tidak diketahui biasanya, untuk sebagian besar perintah yang salah ketik.

Saya akan terus melihat ini dan mengedit jawaban saya (atau merujuk ke jawaban yang ada, jika ada) segera setelah saya mencari tahu mengapa ini terjadi.

samirzach
sumber

Jawaban:

11

Saya akan merekomendasikan unsetting PYTHONPATH. Biasanya tidak diperlukan, dan menyebabkan hal-hal seperti ini dengan membuat satu Python memuat sesuatu dari Python lain (dalam hal ini, sepertinya sistem Python 3 sedang mencoba memuat sesuatu yang ditulis untuk Python 2).

penilai
sumber
3
Permintaan maaf yang tulus atas jawaban yang terlambat, tuan. Dengan membatalkan pengaturan PYTHONPATH, maksud Anda mengaturnya secara manual setiap kali startup? Anaconda menjalankan Python 2.7.10 saat ini dan saya belum menginstal Python 3, jadi mengapa kesalahan ini muncul? Alasan mengapa saya bertanya adalah bahwa info Conda untuk dir situs pengguna menentukan variabel PYTHONPATH sebagai PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7. Jika saya menghapus baris PYTHONPATH: / home / usrnme / anaconda .. dari my ~ / .bashrc, kesalahan masih akan tetap ada, dan juga tidak ada fitur Anaconda yang berfungsi, sampai saya mengaturnya lagi.
samirzach
3

Saya telah mengalami masalah serupa dalam beberapa hari terakhir, jadi saya menelusurinya kembali ke bagaimana bash menangani "perintah tidak ditemukan". Di Ubuntu 14.04 (dan Linux Mint 17, yang saya gunakan skrip 14.04), /etc/bash.bashrc memiliki fungsi sebagai berikut:

if [ -x /usr/lib/command-not-found ]; then
    function command_not_found_handle {
        # check because c-n-f could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
            /usr/bin/python /usr/lib/command-not-found -- $1
            return $?
        else
           return 127
        fi
    }
fi

Namun, / usr / lib / command-not-found telah ditulis ulang untuk Python 3. Ia menangani perintah /etc/bash.bashrc dengan:

if sys.version < '3':                                                       
    # We might end up being executed with Python 2 due to an old            
    # /etc/bash.bashrc.                                                     
    import os                                                               
    if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:                 
        os.execvp("python3", [sys.argv[0]] + sys.argv)

Ini memanggil "python3" dari path daripada memberikan path langsung. Untuk memperbaikinya, baris 22 dari / usr / lib / command-not-found harus diubah dari

os.execvp("python3", [sys.argv[0]] + sys.argv)

untuk

os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)

Tampaknya ini adalah bug dengan Ubuntu daripada Anaconda. Saya akan memeriksa untuk melihat apakah itu muncul di distribusi nanti.

rymac
sumber
1

Setelah menginstal python3 di lokasi standar dan menyadari bahwa saya memerlukan sudo untuk menggunakannya, saya menginstal secara lokal menggunakan ini di direktori home saya:

python3 -m venv env_py3
source env_py3/bin/activate

Tetapi memiliki lebih banyak kesalahan. Cukup mereset PYTHONPATH di instance Amazon Linux AWS bekerja sangat bagus untuk saya.

Rigger
sumber
0

Masalah saya agak berbeda: Sebagai satu pengguna, saya bisa menjalankan python, tetapi sebagai pengguna lain, tidak (saya mendapat kesalahan yang sama dengan OP). Akhirnya, saya mengetahui bahwa izin dan kepemilikan dari /usr/lib/python3.5 kacau. Alasan untuk ini adalah bahwa saya telah secara rekursif mengatur izin dan kepemilikan pada virtualenv, yang akhirnya memodifikasi target symlink (targetin / usr/lib/python3.5 ) juga.

Kiat: Gunakan strace pythonuntuk mencari tahu apa yang terjadi selama Python startup. Ketika saya menggunakan strace, saya bisa melihat dengan jelas PERMISSION_DENIED di /usr/lib/python3.5 .

Juuso Ohtonen
sumber
0

Ini berhasil untuk saya

/programming//a/39097003/823282

rm -rf venv
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt
Diaktifkanecay
sumber
-3

Saya memiliki masalah serupa di windows - Saya menghapus variabel sistem PYTHONHOME. Saya akan mencoba menerjemahkan solusinya ke bahasa Inggris. Komputer Saya> Properti> Pengaturan Sistem Lanjut> Variabel Lingkungan, cari variabel PYTHONHOME dan hapus.

pengguna790300
sumber