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

2024/9/8 9:15:18

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_logYou 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_modulefname, loader, pkg_name)File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_codeexec code in run_globalsFile "/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_lineutility.execute()File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in executeself.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_argvself.execute(*args, **options.__dict__)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in executeoutput = self.handle(*args, **options)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handlereturn self.handle_noargs(**options)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargsemit_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_signalinteractive=interactive, db=db)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in sendresponse = 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_superusercall_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_commandreturn klass.execute(*args, **defaults)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/core/management/base.py", line 232, in executeoutput = self.handle(*args, **options)File "/Users/ash/.virtualenvs/Tester/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 70, in handledefault_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_usernamedefault_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_usernamereturn getpass.getuser().decode(locale.getdefaultlocale()[1])
TypeError: decode() argument 1 must be string, not NoneProcess finished with exit code 1
Answer

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.

https://en.xdnf.cn/q/73325.html

Related Q&A

Redirecting an old URL to a new one with Flask micro-framework

Im making a new website to replace a current one, using Flask micro-framework (based on Werkzeug) which uses Python (2.6 in my case).The core functionality and many pages are the same. However by using…

python decimals - rounding to nearest whole dollar (no cents) - with ROUND_HALF_UP

Im trying to use Decimal.quantize() to achieve the following: -For any amount of money, expressed as a python decimal of default precision, I want to round it using decimal.ROUND_HALF_UP so that it has…

How to use pytest fixtures in a decorator without having it as argument on the decorated function

I was trying to use a fixture in a decorator which is intended to decorate test functions. The intention is to provide registered test data to the test. There are two options:Automatic import Manual im…

Including Python standard libraries in your distribution [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.This question does not appear to be about programming within the scope defined in the help center.Cl…

Using watchdog of python to monitoring afp shared folder from linux

I want linux machine(Raspberry pi) to monitor a shared folder by AFP(Apple file protocol, macbook is host).I can mount shared folder by mount_afp, and installed watchdog python library to monitor a sha…

Fitting curve: why small numbers are better?

I spent some time these days on a problem. I have a set of data:y = f(t), where y is very small concentration (10^-7), and t is in second. t varies from 0 to around 12000.The measurements follow an est…

Fast numpy roll

I have a 2d numpy array and I want to roll each row in an incremental fashion. I am using np.roll in a for loop to do so. But since I am calling this thousands of times, my code is really slow. Can you…

IndexError: fail to coerce slice entry of type tensorvariable to integer

I run "ipython debugf.py" and it gave me error message as belowIndexError Traceback (most recent call last) /home/ml/debugf.py in <module>() 8 fff = …

How to detect lines in noisy line images?

I generate noisy images with certain lines in them, like this one:Im trying to detect the lines using OpenCV, but something is going wrong.Heres my code so far, including the code to generate the noisy…

How can I connect a StringVar to a Text widget in Python/Tkinter?

Basically, I want the body of a Text widget to change when a StringVar does.