2012-03-27 12 views
6

Acabo de actualizar un entorno para Django 1.4. En la primera ejecución de syncdb me sale el siguiente error:Python os.getenv en OSX (Django 1.4)

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

Este error es provocado por 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 vuelve None

Después de leer this billete de Django, probé el parche no oficial, que funcionó, sin embargo, creo que podría hacerlo mejor averiguando qué pasa ...

Así que abrió una línea de comandos de Python, y trató:

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

Podría resolver este problema dentro de sí misma OSX? Consejos son bienvenidos

+0

Es un error abierto en django. https://code.djangoproject.com/ticket/16017 – Eduardo

Respuesta

13

La solución inmediata para esto, suponiendo que está utilizando bash como shell:

$ export LC_ALL=en_US.UTF-8

$ export LANG=en_US.UTF-8

Esto establecerá la configuración regional para esa sesión, y syncdb va a funcionar. Puede agregar esto a su perfil y hacerlo permanente para sus proyectiles.

Puede usar el comando locale para ver la configuración actual, y locale -a para ver qué configuraciones regionales están disponibles para usted. en_US.UTF-8 es seguro genérico, pero puede tener otras preferencias.

+0

Pensé que un indicador de exportación funcionaría, pero me preguntaba si OSX no debería hacerlo internamente. Obviamente tu respuesta es mejor que piratear el núcleo de Django, gracias –

+0

¡Gracias! Finalmente, alguien explica cómo solucionar esto. :) –

Cuestiones relacionadas