Update for 2015:
I would use a combination of pdfkit and Python-Markdown. While this isn't a pure Python solution, but I've found it works best, especially if you're using Python 3.
First, install a prereq (or download here: http://wkhtmltopdf.org/downloads.html):
# Ubuntu
apt-get install wkhtmltopdf
Then, the necessary Python packages:
pip install pdfkit
pip install markdown
Then it is really simple:
from markdown import markdown
import pdfkit
input_filename = 'README.md'
output_filename = 'README.pdf'
with open(input_filename, 'r') as f:
html_text = markdown(f.read(), output_format='html4')
pdfkit.from_string(html_text, output_filename)