2012-03-27 59 views
6

我剛更新了一個環境到Django 1.4。在執行syncdb的第一次運行,我得到以下錯誤:OSX上的Python os.getenv(Django 1.4)

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

此錯誤是由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回報None

閱讀this Django的車票後,我試着非官方的補丁,它但我認爲我可以通過弄清楚發生了什麼事情來做得更好..

所以,我打開一個Python的命令行,並試圖:

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." 

我能解決內OSX本身這個問題?溫馨提示歡迎

+0

這是一個關於django的開放bug。 https://code.djangoproject.com/ticket/16017 – Eduardo 2012-07-15 13:28:08

回答

13

的立即解決這一點,假設你使用bash作爲你的shell:

$ export LC_ALL=en_US.UTF-8

$ export LANG=en_US.UTF-8

這將設置您的區域設置爲會話,並執行syncdb會工作。您可以將其添加到您的個人資料中,並將其永久保存在您的外殼中。

您可以使用locale命令查看當前設置,並使用locale -a查看可用的區域設置。 en_US.UTF-8是一個通用安全的,但您可能有其他偏好。

+0

我想出口標誌可以工作,但我想知道如果OSX不應該已經在內部做到這一點。顯然,你的awnser比攻擊Django的核心更好,謝謝 – 2012-03-27 09:11:21

+0

謝謝!最後有人解釋如何解決這個問題。 :) – 2012-08-06 05:35:38