2012-03-27 55 views
6

Tôi vừa cập nhật môi trường cho Django 1.4. Trên chạy đầu tiên syncdb của tôi nhận được lỗi sau:Python os.getenv trên OSX (Django 1.4)

TypeError: decode() argument 1 must be string, not None 

Lỗi này được kích hoạt bởi django/contrib/auth/management/init:

try: 
    return getpass.getuser().decode(locale.getdefaultlocale()[1]) 
except (ImportError, KeyError, UnicodeDecodeError): 
    # KeyError will be raised by os.getpwuid() (called by getuser()) 
    # if there is no corresponding entry in the /etc/passwd file 
    # (a very restricted chroot environment, for example). 
    # UnicodeDecodeError - preventive treatment for non-latin Windows. 
    return u'' 

getdefaultlocale lợi nhuận None

Sau khi đọc this Django vé, tôi đã thử vá không chính thức mà đã làm việc, tuy nhiên tôi nghĩ rằng tôi có thể làm tốt hơn bằng cách tìm ra những gì đang chờ đợi ..

Vì vậy, tôi đã mở một dòng lệnh python và thử:

import os 
print os.getenv() 
None 
os.getenv.__doc__ 
"Get an environment variable, return None if it doesn't exist.\n The optional second argument can specify an alternate default." 

Tôi có thể giải quyết vấn đề này trong chính OSX không? Lời khuyên được hoan nghênh

+0

Đó là lỗi mở trên django. https://code.djangoproject.com/ticket/16017 – Eduardo

Trả lời

13

Nghị quyết ngay lập tức cho điều này, giả sử bạn đang sử dụng bash như vỏ của bạn:

$ export LC_ALL=en_US.UTF-8

$ export LANG=en_US.UTF-8

này sẽ thiết lập miền địa phương của bạn cho phiên họp đó, và syncdb sẽ làm việc. Bạn có thể thêm nó vào hồ sơ của bạn và làm cho nó vĩnh viễn cho vỏ của bạn.

Bạn có thể sử dụng lệnh locale để xem cài đặt hiện tại và locale -a để xem các ngôn ngữ nào có sẵn cho bạn. en_US.UTF-8 là loại an toàn chung, nhưng bạn có thể có các tùy chọn khác.

+0

Tôi đã tìm thấy một lá cờ xuất khẩu sẽ hoạt động, nhưng tôi đã tự hỏi nếu OSX không nên làm điều này trong nội bộ. Rõ ràng là awnser của bạn là tốt hơn sau đó hack lõi của Django, nhờ –

+0

Cảm ơn bạn! Cuối cùng, ai đó giải thích cách sửa lỗi này. :) –

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