headshot of Chris Tonkinson
Chris Tonkinson

tech {enthusiast, practitioner, leader, podcaster, mentor, entrepreneur}


Refactored Podcast

I co-host Refactored, a casual, ongoing conversation between two technology leaders trying to suck a little less every day.

Career Schema Project

I founded the Career Schema Project with the mission of developing open standards and technology to reduce the hassle of online jobseeking.

RSS Subscribe

© 2021 Chris Tonkinson

Jekyll, Pygments, and Python

Want to use Pygments with Jekyll, but can’t get passed the Failed to get header (MentosError) exception?

You’ve read the documentation. You’ve run bundle install, you’ve got Python installed, and you double-checked that all of your files are named appropriately. Everything was working until you added this to your _config.yml:

highlighter:  pygments

That’s when things blew up:

Configuration from /home/chris/website/_config.yml
Building site: /home/chris/website -> /home/chris/website/_site
/home/chris/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/pygments.rb-0.3.7/lib/pygments/popen.rb:357:in `rescue in get_header': Failed to get header. (MentosError)
  from /home/chris/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/pygments.rb-0.3.7/lib/pygments/popen.rb:338:in `get_header'
  from /home/chris/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/pygments.rb-0.3.7/lib/pygments/popen.rb:235:in `block in mentos'

Turns out, there’s one more step. Pygments requires Python 2.x and you’re probably using 3.x by default.

In may case, changing the system default wouldn’t work because I have dependencies on 3.x elsewhere in my system. The quick and dirty workaround is to set Python 2 as the default for your shell while you’re messing with Jekyll:

which python2
# => /usr/bin/python2
ln -s /usr/bin/python2 ~/bin/python

Or, in compact form (if you know there is a python2 binary in your $PATH):

ln -s `which python2` ~/bin/python