Posts about python

How to Rebuild a Virtualenv in Heroku

Today I managed to get myself a little bit stuck with Heroku’s otherwise seamless Python support. In an earlier revision of my app, I had used -e to install an editable version of a package (the version of the package I needed had not yet been released to PyPI, so I pointed pip at Github). Since then, the version I need has been released.

So, update requirements.txt, then git push heroku master, and all is well, right? Not so fast...

python, heroku, virtualenv


What the heck is an xrange?

Pop quiz: how would you implement Python’s xrange (known in Python 3.x as range) in Python and without making a list or any other sequence type?

If you answered “with a generator,” you’d be wrong! And it’s likely because you’ve only ever used an xrange in code like:

for i in xrange(10):
    # do something 10 times

In this case (where the xrange is only used as an “argument” to a for loop), a generator would probably suffice. But, in fact, xrange is implemented as an object, not a function or generator. Why? Let’s find out.

python, internals


A Python "Cast Constructor"

Very occasionally, I write code where I’m given an object of some class (usually from a library call), but I wish to use additional methods on that class as though they had been defined there. In some languages (Objective-C shines in this regard with categories), you can do this very naturally. In Python, most people probably resort to monkey patching to accomplish this.

python, anti-pattern


Exploring Python Code Objects

Inspired by David Beazley’s Keynote at PyCon, I’ve been digging around in code objects in Python lately. I don’t have a particular axe to grind, nor some particular task to solve (yet?), so consider this post just some notes and ramblings that might be of interest (and my apologies if not).

Disclaimer: This post is about CPython version 2.7, though much of it is also likely true for other CPython versions (including 3.x). I make no claims to its accuracy or applicability to PyPy, Jython, IronPython, etc.

python, internals, tinkering


Hitchhiker's Guide to Python

I first heard about The Hitchhiker’s Guide to Python at PyCodeConf a few months ago. It’s a fantastic idea: open source, community-driven documentation on how to do Python right: everything from how to learn Python, to how to write idiomatic code, to how to distribute your projects, to surveys of best-of-breed open source projects and libraries you can build projects and applications on top of. Many many thanks to Kenneth Reitz for creating and maintaining the project, which is hosted at GitHub.

At this time, the Hitchhiker’s guide is a little rough around the edges: many sections are only outlined, and need content written; other sections may not even exist yet. We can safely consider it a first draft, or, if you prefer, an alpha.

This sort of undertaking is effectively impossible for one person to maintain—one person can’t possibly know of every project, library, and idiom. Moreover, it’s unfair as a user of the Guide to demand that one person must do all the work.

Therefore, a call to action: in order to make the Python community great, everyone should fork the Hitchhiker’s Guide today, find (or add) a section of interest, and submit a pull request. If you’re lucky, Kenneth will give you a sparkly cake.

And a pledge: time allowing (for, sadly, contributing to Python documentation is not my day job), I will make one contribution to the Hitchhiker’s Guide per week until it reaches completion, or until there’s nothing left to which I can conscientiously contribute (I won’t attempt to document things which I know too little about).

Finally, since this is a community effort, I want to give a shout-out to all those who’ve contributed to the Guide so far:

Thanks to everyone who’s helping to make Python a better place!

(To the folks above, if you’d like me to add or correct any of the contact information, please leave a comment.)

python, community

Keystone: A Simple Python Web Framework

After a conversation with my friend and co-worker Jesse Davis last week about Python web frameworks, I had an idea: what if there were a Python web framework that combined some of the simplicity of workflow and deployment of PHP with the readability and embodiment of best practices of Python? This should be a framework targeted towards folks who want to (or need to) learn web development, but don’t have the background, interest, or time to learn one of the heavy-weight frameworks (like Pyramid or Django) or middle-weight frameworks (like Flask or CherryPy). This framework should let you get started immediately, and let you move smoothly from static sites to dynamic sites, let you learn best practices of both Python and web programming, and should not stand in your way when it comes time to go live or scale up.

python, web development


Web A/B Testing with Dabble

Thanks to a series of recent posts on the SvN blog, I’ve been thinking more about my little Python A/B testing framework, Dabble.

I built Dabble to A/B test (sometimes also called “split test”) features on Following the advice of a blog post I’ve since lost track of, Dabble configures A/B test parameters entirely in code, follows procedure for independent testing, and generally works without much of a hassle.

python, web development