Python Tip of the Day - Simple HTTP Server

Posted on Tue 17 April 2018 in Posts

This is kind of an old tip, but back in the days of Python 2 (aka Legacy Python) a quick tip for sharing a folder of files was to use the built in SimpleHTTPServer module to quickly host a bunch of files:

python -m SimpleHTTPServer

which spins up a basic http server on port 8000 that by default shows all the files in the directory from where it is run. This is a very quick and handy way for sharing files with a coworker as (so long as they know and can reach your IP address), you just fire up this server, then they can grab files, then you turf the server.

Python 3 unfortunately (or fortunately, I dunno) renamed the module, leading to moments of confusion (ie "why doesn't that command not work anymore now that I'm in a virtual environment with Python 3?"). The equivalent in Python3 is:

python -m http.server

But y'know what, I don't want to have to think about which version of Python I'm running, I just want a simple command to fire up the server and have it figure out which module to run. Hence this StackOverflow answer, which indicates you can add this to your .bashrc file (or equivalent for your shell):

alias serve="python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')"

Now from any directory a simple serve will start up the appropriate simple http server.