2009-12-02 32 views
28

Vì vậy, hôm nay tôi nâng cấp lên 2.0.2 Bazaar, và tôi bắt đầu nhận được thông báo này (Tôi đang trên tuyết, btw):lỗi trăn địa phương lạ. những gì đang xảy ra ở đây chính xác?

bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

rất lạ, vì LANG tôi là thực sự trống rỗng. Điều tương tự xảy ra khi tôi cố gắng để tinker với các module locale

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 443, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 375, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 

xuất khẩu LANG không giúp

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ bzr 
bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

Tuy nhiên, điều này đã giải quyết được vấn đề

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ export LC_ALL=en_US.UTF-8 

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
('en_US', 'UTF8') 

Ông có thể vui lòng giải thích những gì đang xảy ở đây, để có khả năng tốt hơn?

+0

Mọi thông tin chi tiết khác về sự cố của bạn? –

+0

+1 hai dòng "xuất" đã làm cho "ValueError: locale không xác định: ..." của tôi biến mất. – Bogatyr

+0

Cảm ơn bạn rất nhiều vì hai dòng cuối cùng. Đã lưu tôi và tôi chắc chắn có rất nhiều người dùng Mac khác rất nhiều thời gian. –

Trả lời

16

2016 CẬP NHẬT: Hóa ra rằng this is a Python bug kể từ ít nhất năm 2013, rất có thể sớm hơn, bao gồm trong Python không phản ứng tốt với ngôn ngữ không phải GNU - như được tìm thấy trong Mac OS X và BSD. Lỗi này vẫn mở vào tháng 9 năm 2016 và ảnh hưởng đến mọi phiên bản Python.


Nếu không có biến LANG môi trường thiết lập, rất có thể bạn đã hoặc một LC_CTYPE (biến key) hoặc LC_ALL (mà ghi đè nếu bộ) biến môi trường thiết lập để UTF-8, mà không phải là một miền địa phương OS X có giá trị . Thật dễ dàng để tái sản xuất với Apple cung cấp /usr/bin/python hoặc với một con trăn tùy chỉnh, như trong trường hợp của bạn, được xây dựng với SDK 10.6 (có lẽ cũng là 10.5 SDK). Bạn sẽ không thể tái tạo nó theo cách đó với python.org python; chúng hiện được xây dựng với SDK 10.4 nơi các API miền địa phương hoạt động khác nhau.

$ unset LANG 
$ env | grep LC_ 
$ export LC_CTYPE="UTF-8" 
$ /usr/bin/python # Apple-supplied python 
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 
^D 
$ /usr/local/bin/python2.6 # python.org python 
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
(None, 'mac-roman') 
>>> 

EDIT:

Có thể có một mảnh để câu đố. Xem nhanh số bzr 2.0.1 mà tôi đã cài đặt cho biết rằng thông báo bạn trích dẫn chỉ hiển thị nếu locale.getpreferredencoding() tăng số locale.Error. Một cách có thể xảy ra là nếu không thể tải tiện ích mở rộng python _locale.so C và có thể xảy ra nếu có sự cố về quyền đối với nó. Ví dụ: MacPorts hiện được biết là có problems setting permissions if you have a customized umask; Tôi đã bị chính bản thân mình đốt cháy. Kiểm tra các điều khoản của _locale.so trong python lib/python2.5/lib-dynload thư mục và đảm bảo nó là 755. Đường dẫn đầy đủ cho MacPorts phải là:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/ 
+0

Con trăn sử dụng được cài đặt bằng tay, nó không phải là cài đặt python chuẩn đi kèm với OSX. Ngoài ra, có vẻ như tôi không có _locale.so hoặc _locale.dylib .... uh? –

+0

Nên có một _locale.so trong lib-dynlib. Nếu không, python của bạn không được xây dựng đúng trên OS X và locale.py sẽ quay trở lại một số hành vi mặc định. –

+0

@NedDeily, có vẻ như bây giờ bạn đã biết rõ hơn câu trả lời này cho thấy, vì bạn đã đưa ra một giải thích rất tốt trong https://bugs.python.org/issue18378#msg215215. Có lẽ bạn có thể sửa chữa câu trả lời của bạn? (Đối với googlability, như OP hỏi) – hmijail

4

Đó là sự cố với Mac OS X. Để xem cài đặt ngôn ngữ của bạn, hãy chạy locale trong thiết bị đầu cuối. locale -a nên liệt kê tất cả các ngôn ngữ mà bạn đã xác định (mà bạn có thể sử dụng làm đối số cho LC_ALL).

Lưu ý rằng LC_ALL và các biến số LC_* khác được ưu tiên hơn LANG khi được xác định.

+0

Cụ thể hơn đây là vấn đề với môi trường không chỉ với Mac OS X. Linux và các bản sao UNIX khác dễ bị các vấn đề tương tự nếu bạn tùy chỉnh môi trường của mình và vô tình bỏ mọi thứ ra ngoài. Đôi khi các vấn đề xuất hiện ngay lập tức và các thời điểm khác không phải cho đến khi bạn thực sự cần chúng hoạt động. Tuy nhiên, một triệu chứng khác có quá nhiều cách để làm điều tương tự ... – jathanism

+1

@synack: Đây là thứ đã xuất hiện trước đó với OS X, đó là lý do tại sao * Tôi không * nghĩ đó là vì Stefano đã thay đổi môi trường của mình. – u0b34a0f6ae

+0

@ kaiser.se: Tại sao bạn nghĩ rằng đây là một vấn đề và tại sao với OS X? Việc có tập LC_CTYPE hoặc LC_ALL giải thích hành vi mà OP thấy và đang hoạt động như được ghi lại. Ví dụ tôi đưa ra không chính xác giống như trên hệ thống Debian Linux hiện tại với ngoại lệ là bash mới hơn trên hệ thống đó thực sự cảnh báo bạn khi xuất LC_CTYPE thành giá trị không hợp lệ "UTF-8". –

1

Tôi gặp phải vấn đề tương tự. Khi tôi chạy locale, tôi nhận thấy rằng LANGLC_ALL không được đặt.Vì vậy, tôi cố định này bằng cách thêm các dòng sau trong file .bash_profile:

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 

Sau đó, tôi chỉ đơn giản là chạy:

source ~/.bash_profile 

Và vấn đề này đã được cố định sau đó trên máy Mac của tôi.

Các vấn đề liên quan