2012-03-27 21 views
6

Sadece bir ortamı Django 1.4'e güncelledim.OSX'de Python os.getenv (Django 1.4)

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

Bu hata django/contrib/auth/management/init tarafından tetiklenir: syncdb ilk çalıştırmada aşağıdaki hatayı alıyorum this Django bilet okuduktan sonra

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 döner None

, ben gayri resmi yama çalıştı hangi çalıştı, ancak ne olacağını anlayarak daha iyi yapabileceğini düşünüyorum.Bu yüzden bir piton komut satırı açtı ve denedi:

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

Ben OSX kendi içinde bu sorunu çözmek olabilir mi? İpuçları Eğer kabuk olarak bash kullanıyorsanız varsayarak, bunun için

+0

Django'da açık bir hata var. https://code.djangoproject.com/ticket/16017 – Eduardo

cevap

13

acil çözünürlük açıktır:

$ export LC_ALL=en_US.UTF-8

$ export LANG=en_US.UTF-8

Bu, o oturum için yerel ayarlar ve syncdb çalışacaktır. Bunu profilinize ekleyebilir ve mermileriniz için kalıcı hale getirebilirsiniz.

Geçerli ayarları görmek için locale komutunu ve yerel olarak kullanılabilen yerleri görmek için locale -a komutunu kullanabilirsiniz. en_US.UTF-8 genel olarak güvenli olanıdır, ancak başka tercihleriniz de olabilir.

+0

Bir ihracat bayrağı çalışacağını düşündüm, ancak OSX'in bunu dahili olarak yapmamalı mı diye merak ediyordum. Açıkçası senin bekarın Django'nun çekirdeğini kesmek daha iyidir, teşekkürler –

+0

Teşekkür ederim! Sonunda birisi bunu nasıl düzelteceğini açıklıyor. :) –