Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getdefaultlocale returning None when running sync.db on Django project in PyCharm

OSX 10.7.3, PyCharm version 2.5 build PY 117.200

I'll run through how I get the error:

  1. I start a new project
  2. Create a new VirtualEnv and select Python 2.7 as my base interpreter (leave inherit global packages un-ticked)
  3. Click Install and choose Django v1.4
  4. Select Django project type
  5. Tick Enable Admin
  6. Open settings.py and add sqlite3 to DATABASES:ENGINE
  7. Run sync.db
  8. Get to the point of creating a database superuser
  9. locale error

The problem seems to be that getdefaultlocale() method is not returning anything (well, None).

return getpass.getuser().decode(locale.getdefaultlocale()[1])
    TypeError: decode() argument 1 must be string, not None

However if I enable the virtualenv workon MyApplication and run python with the following code:

Python 2.7.2 (default, Feb  7 2012, 23:16:02) 
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.10.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> print locale.getdefaultlocale()
('en_GB', 'UTF-8')

So does anybody know what's going on?

Full Output:

bash -cl "/Users/ash/.virtualenvs/Tester/bin/python /Applications/PyCharm.app/helpers/pycharm/django_manage.py syncdb"
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Traceback (most recent call last):
  File "/Applications/PyCharm.app/helpers/pycharm/django_manage.py", line 17, in <module>
    run_module(manage_file, None, '__main__')
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 180, in run_module
    fname, loader, pkg_name)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/Users/ash/Development/PycharmProjects/Tester/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal
    interactive=interactive, db=db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 73, in create_superuser
    call_command("createsuperuser", interactive=True, database=db)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command
    return klass.execute(*args, **defaults)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 70, in handle
    default_username = get_default_username()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 105, in get_default_username
    default_username = get_system_username()
  File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 85, in get_system_username
    return getpass.getuser().decode(locale.getdefaultlocale()[1])
TypeError: decode() argument 1 must be string, not None

Process finished with exit code 1
like image 945
Ashley Avatar asked Apr 26 '12 19:04

Ashley


1 Answers

Basically the reason this occurs is that PyCharm doesn't, by default, have access to environmental variables.

I've found 3 solutions to this problem:

  1. Set a global environmental variable, using the link CrazyCoder suggests in the comments to this question.

  2. Run PyCharm from a terminal window by changing to the PyCharm application directory and running ./pycharm (possibly create a symlink in your PATH to make this less inconvenient)

  3. Open PyCharm preferences, browse to Console > Django Console, type in your required environmental variables as you would in your bash profile e.g. LC_ALL=en_US.UTF-8

I'd suggest the 3rd way as most elegant, although it's annoying that variables aren't loaded by default.

like image 150
Ashley Avatar answered Sep 21 '22 00:09

Ashley