I’ve been using and working with Python in a professional context for around 8 years. So it came sort of a shock that something so useful, so obvious, was unfamiliar to me until around a week and a half ago.
It involves a little file called
.pythonrc that lives in your home directory. To get it to work, you’ll need to define an environment variable called
PYTHONSTARTUP, like so:
If you’re a Python developer, no doubt you open up a Python shell countless times per day. Whether you use the regular Python shell, or another one such as IPython, it’s all the same. Open up the shell, import a few useful modules, and start playing around.
Maybe you find yourself importing the same modules over and over again. Maybe you leave a single shell open all the time since it’s such a pain to re-type those commands.
I spend a lot of time working with Django, so I’d gotten pretty used to typing
./manage.py shell and then
from app import models to start playing around with objects in my database.
Well, I got to wondering what this
.pythonrc could do to help me out with this, so I dumped in the following code:
Not expecting this to work at all, I ran my trusty Django shell, and voilà:
It’s like magic. No more reverse searching my shell history to import commonly-used modules. If I find myself using one often enough, I just add it into my
.pythonrc and it’s there for me every time.
I play around Redis a bunch, so here’s another chunk of code I plopped in there.
Now, I can just open up the shell and use
r to play with Redis.
Here’s another one I’m pretty fond of. I’m a big fan of tab-completion and readline support. So I put this in my
Works like a charm.
Below is my full
.pythonrc, in all of its glory (also available as a Gist).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 # vim: set ft=python : from __future__ import print_function import json import sys import datetime from redis import StrictRedis as Redis r = Redis() try: import readline except ImportError: print("Module readline not available.") else: import rlcompleter if 'libedit' in readline.__doc__: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") try: from app import models from django.conf import settings except: print("\nCould not import Django modules.") else: print("\nImported Django modules.") try: from dateutil.parser import parse as parse_date except ImportError: print("\nCould not import dateutil.")