Lỗi nghiêm trọng của Python: Py_Initialize: Không thể nhận được mã hóa miền địa phương SyntaxError: cú pháp không hợp lệ Bị hủy bỏ (lõi bị hủy)


16

Tôi đã cài đặt Anaconda bằng cách chạy

bash Anaconda-2.2.0-Linux-x86_64.sh

lệnh trên hệ thống Ubuntu 14.04 của tôi, đã cài đặt thành công, sau đó tôi được yêu cầu xuất /home/username/anaconda/binbiến môi trường $ PATH mới của mình .

Khi làm như vậy, tôi đã có thể sử dụng tất cả các tính năng của Anaconda bao gồm cả IDE cũng như sử dụng tất cả các lệnh dựa trên conda thành công.

Lần sau khi tôi khởi động hệ thống của mình, mọi lệnh bị gõ đều thấy một

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)

lỗi. (Tất cả các lệnh ngoại trừ pythonđể được cụ thể)

Sau khi theo dõi một vài bài đăng trên stackexchange và Askubfox và cũng nhận thấy rằng tôi $PYTHONPATHđã được đặt usr/local/lib/python2.7, tôi đã cố gắng để

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

nhưng nó không giúp được gì

Điều này đã cho tôi trải qua toàn bộ câu chuyện gỡ bỏ gói và cài đặt lại, và tất nhiên, rất nhiều bản cập nhật và nâng cấp, để tự mình thử và khắc phục sự cố.

conda info -a trả về:

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

Lệnh

which python

trả lại

/home/username/anaconda/bin/python

echo "$PATH"

trả lại

/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

Tôi biết đó là một cái gì đó có liên quan đến cách tôi đặt các biến đường dẫn, cụ thể là ~/.bashrctrong đó Anaconda tự động đưa thư mục / home / username / anaconda / bin của tôi vào $PATHbiến (Điều này xảy ra trong lần cài đặt thứ hai của Anaconda sau khi tôi gỡ bỏ nó trước ).

Tôi đã không sửa đổi bất kỳ biến môi trường khác trong một ~/.profilehoặc ~/.bashrc.


Tôi đã thêm dòng xuất $ PYTHONPATH vào ~/.bashrctrước khi khởi động lại.

Hiện tại tất cả các tính năng của Anaconda đều hoạt động, mặc dù cùng một Fatal Python error: Py_Initialize: Unable to get the locale encodinglỗi vẫn hiển thị thay vì lỗi lệnh không xác định thông thường, đối với hầu hết các lệnh bị nhập sai.

Tôi sẽ tiếp tục xem xét điều này và chỉnh sửa câu trả lời của tôi (hoặc tham khảo các câu trả lời hiện có, nếu có) ngay khi tôi tìm hiểu lý do tại sao điều này xảy ra.

Câu trả lời:


11

Tôi khuyên bạn nên bỏ chọn PYTHONPATH. Nói chung là không cần thiết và nó khiến mọi thứ bị phá vỡ như thế này bằng cách tạo một Python tải mọi thứ từ một Python khác (trong trường hợp này, có vẻ như Python 3 của hệ thống đang cố tải một cái gì đó được viết cho Python 2).


3
Xin lỗi chân thành vì đã trả lời trễ, thưa ông. Bằng cách bỏ đặt PYTHONPATH, bạn có nghĩa là thiết lập thủ công khi khởi động mọi lúc? Anaconda hiện chạy Python 2.7.10 và tôi chưa cài đặt Python 3, vậy tại sao lỗi này lại xuất hiện? Lý do tại sao tôi hỏi là thông tin của Conda cho các thư mục trang web của người dùng chỉ định biến PYTHONPATH là PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7. Nếu tôi xóa PYTHONPATH: / home / usrnme / anaconda .. từ ~ / .bashrc của tôi, lỗi vẫn sẽ tồn tại và cũng không có tính năng nào của Anaconda hoạt động, cho đến khi tôi đặt lại.
samirzach

3

Tôi đã gặp vấn đề tương tự trong vài ngày qua, vì vậy tôi đã truy tìm lại cách bash xử lý "lệnh không tìm thấy". Trong Ubuntu 14.04 (và Linux Mint 17, mà tôi sử dụng tập lệnh 14.04), /etc/bash.bashrc có chức năng sau:

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

Tuy nhiên, / usr / lib / lệnh không tìm thấy đã được viết lại cho Python 3. Nó xử lý lệnh /etc/bash.bashrc với:

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)

Điều này gọi "python3" từ đường dẫn thay vì đưa đường dẫn trực tiếp. Để sửa lỗi này, nên thay đổi dòng 22 của / usr / lib / lệnh không tìm thấy

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

đến

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

Đây dường như là một lỗi với Ubuntu chứ không phải Anaconda. Tôi sẽ kiểm tra xem nếu nó xuất hiện trong các bản phân phối sau.


1

Sau khi cài đặt python3 ở các vị trí tiêu chuẩn và nhận ra tôi cần sudo để sử dụng nó, tôi đã cài đặt cục bộ bằng cách sử dụng nó trong thư mục nhà của mình:

python3 -m venv env_py3
source env_py3/bin/activate

Nhưng có nhiều lỗi hơn. Đơn giản chỉ cần bỏ đặt PYTHONPATH trên phiên bản Amazon Linux của AWS hoạt động rất tốt đối với tôi.


0

Vấn đề của tôi hơi khác một chút: Là một người dùng, tôi có thể chạy python, nhưng với tư cách là một người dùng khác, thì không (tôi gặp lỗi tương tự như OP). Cuối cùng, tôi phát hiện ra rằng các quyền và quyền sở hữu của /usr/lib/python3.5 đã bị lừa. Lý do cho điều này là vì tôi đã thiết lập đệ quy các quyền và quyền sở hữu trên virtualenv, kết quả là sửa đổi các mục tiêu liên kết tượng trưng (targetin /usr/lib/python3.5 ).

Mẹo: Sử dụng strace pythonđể tìm hiểu những gì đang diễn ra trong quá trình khởi động Python. Khi tôi sử dụng strace, tôi có thể thấy rõ PERMISSION_DENIED trên /usr/lib/python3.5 .



-3

Tôi gặp vấn đề tương tự trên windows - Tôi đã xóa biến hệ thống PYTHONHOME. Tôi sẽ cố gắng dịch các giải pháp sang tiếng Anh. Máy tính của tôi> Thuộc tính> Cài đặt hệ thống nâng cao> Biến môi trường, tìm biến PYTHONHOME và xóa nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.