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

django, pycharm, python

Solution

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:

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

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)

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.

Problem

OSX 10.7.3, PyCharm version 2.5 build PY 117.200 I'll run through how I get the error: - I start a new project - Create a new VirtualEnv and select Python 2.7 as my base interpreter (leave inherit global packages un-ticked) - Click Install and choose Django v1.4 - Select `Django` project type - Tick `Enable Admin` - Open `settings.py` and add `sqlite3` to `DATABASES:ENGINE` - Run `sync.db` - Get to the point of creating a database superuser - 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 ```

Original source