2012-03-27 15 views
6

環境をDjango 1.4に更新しました。Python os.getenv on OSX(Django 1.4)

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

このエラーはdjango/contrib/auth/management/initによってトリガーされます。:syncdbの実行の最初の実行では、私は次のエラーを取得this Djangoのチケットを読んだ後

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

を、私は非公式パッチを試してみましたしかし、私は、何が起こったのかを理解することで、もっとうまくいくと思う。

だから私は、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自体の中でこの問題を解決してもらえますか?ヒントは、あなたのシェルとしてbashのを使用していると仮定すると、このため

+0

これはdjangoのオープンバグです。 https://code.djangoproject.com/ticket/16017 – Eduardo

答えて

13

即時解像度歓迎されています:

$ 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のコアをハックする方が良いです。ありがとうございました –

+0

ありがとう!最後に誰かがこれを修正する方法を説明します。 :) –