Önemli Python hatası: Py_Initialize: Yerel kodlama alınamadı… Sözdizimi Hatası: geçersiz sözdizimi Durduruldu (çekirdek dökümü)


16

Anaconda'yı

bash Anaconda-2.2.0-Linux-x86_64.sh

başarıyla yüklenen Ubuntu 14.04 sistemime komut verdikten sonra yeni /home/username/anaconda/bin$ PATH ortam değişkenimi dışa aktarmam istendi .

Bunu yaparken, IDE'ler de dahil olmak üzere anaconda'nın tüm özelliklerini kullanabildim ve tüm conda tabanlı komutları başarıyla kullandım.

Sistemimi bir sonraki başlatışımda, her miss-type komutu bir

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)

hata. ( pythonSpesifik olmak dışında tüm komutlar )

Birkaç stackexchange ve askubuntu gönderilerini takip ettiğimde ve aynı zamanda benim $PYTHONPATHiçin ayarlandığını fark ettikten sonra usr/local/lib/python2.7,

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

ama yardımcı olmadı.

Bu, sorunu kendim çözmeye çalışmak için paket kaldırma ve yeniden yükleme ve elbette bir çok güncelleme ve yükseltmelerden oluşan bir destandan geçmemi sağladı.

conda info -a İadeler:

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

Komuta

which python

İadeler

/home/username/anaconda/bin/python

ve

echo "$PATH"

İadeler

/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

Yol değişkenlerini ayarlama ~/.bashrcşeklimle ilgili bir şey biliyorum, özellikle Anaconda otomatik olarak / home / kullanıcı adı / anaconda / bin klasörünü $PATHdeğişkene otomatik olarak eklediğinde (Bu, ilk olarak kaldırdıktan sonra Anaconda'nın ikinci yüklemesi sırasında oldu) ).

~/.profileVeya öğesinde başka herhangi bir ortam değişkenini değiştirmedim ~/.bashrc.


Yeniden ~/.bashrcbaşlatmadan önce ihracat $ PYTHONPATH satırını ekledim .

Anaconda'nın tüm özellikleri şimdi çalışıyor, ancak Fatal Python error: Py_Initialize: Unable to get the locale encodingçoğu yanlış yazılan komut için aynı bilinmeyen komut hatası yerine aynı hata görünmeye devam ediyor.

Bunun nedenini öğrenir öğrenmez bunu araştırmaya devam edeceğim ve cevabımı düzenleyeceğim (veya varsa mevcut cevaplara bakacağım).

Yanıtlar:


11

PYTHONPATH ayarını kaldırmanızı tavsiye ederim. Genellikle gerekli değildir ve başka bir Python'dan bir Python yükü yükleyerek bu gibi şeylerin kırılmasına neden olur (bu durumda, sistemin Python 3'ü Python 2 için yazılmış bir şey yüklemeye çalışıyor gibi görünüyor).


3
Geç cevap için içten özür dilerim, efendim. PYTHONPATH ayarını kaldırarak, başlangıçta her seferinde manuel olarak kurmak mı demek istediniz? Anaconda şu anda Python 2.7.10'u çalıştırıyor ve Python 3'ü kurmadım, neden bu hata ortaya çıksın? Sormamın nedeni Conda'nın kullanıcı site dirs'leri için bilgisinin PYTHONPATH değişkenini belirtmesidir PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7. PYTHONPATH: / home / usrnme / anaconda .. hattını ~ / .bashrc dosyamdan kaldıracaksam, hata hala devam eder ve Anaconda'nın özelliklerinden hiçbiri yeniden ayarlanıncaya kadar işe yaramaz.
samirzach

3

Ben son birkaç gündür benzer sorunları yaşıyorum, bu yüzden bash "komut bulunamadı" nasıl işlediğini geri izledi. Ubuntu 14.04'te (ve 14.04 komut dosyalarını kullandığım Linux Mint 17'de) /etc/bash.bashrc aşağıdaki işleve sahiptir:

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

Ancak, / usr / lib / command-not-found Python 3 için yeniden yazılmıştır. /Etc/bash.bashrc komutunu:

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)

Bu, doğrudan yolu vermek yerine yoldan "python3" adını verir. Bunu düzeltmek için / usr / lib / command-not found bulunamadığı satır 22

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

için

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

Bu Anaconda yerine Ubuntu ile ilgili bir hata gibi görünüyor. Daha sonraki dağıtımlarda görünüp görünmediğini kontrol edeceğim.


1

Standart yerlerde python3 yükledikten ve kullanmak için sudo gerekli olduğunu fark ettikten sonra, yerel olarak bu benim ana dizininde kullanarak yükledim:

python3 -m venv env_py3
source env_py3/bin/activate

Ancak daha fazla hata vardı. AWS'nin Amazon Linux örneğindeki PYTHONPATH'i basitçe ayarlamak benim için harika çalıştı.


1

Benim sorunum biraz farklıydı: Bir kullanıcı pythonolarak çalışabilirim , ama başka bir kullanıcı olarak değil, (OP ile aynı hatayı aldım). Son olarak, /usr/lib/python3.5 izinlerinin ve sahipliklerinin berbat olduğunu öğrendim . Bunun nedeni, syenink hedeflerini (targetin /usr/lib/python3.5 ) de değiştirerek sonuçlanan virtualenv'de izinleri ve sahipliği yinelemeli olarak ayarlamamdı .

İpucu: strace pythonPython başlatılırken neler olduğunu anlamak için kullanın . Kullandığımda , /usr/lib/python3.5 üzerinde PERMISSION_DENIED'istrace açıkça görebiliyordum .



-3

Windows'da benzer bir sorunum vardı - PYTHONHOME sistem değişkenini sildim. Çözümü İngilizceye çevirmeye çalışacağım. Bilgisayarım> Özellikler> Gelişmiş Sistem Ayarları> Ortam Değişkenleri, PYTHONHOME değişkenini arayın ve silin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.