VirtualEnv Builds in Sublime Text 3
Back in 1999 I was a relatively happy Emacs user, and was beginning work at a startup where I was one of the first employees after the founders. Like many startups, in addition to owning the company, the founders were hackers, and were routinely working on the servers. When I asked if Emacs could be installed on one of the machines I was told to learn Vi … which I proceeded to do. I needed the job.
Here I am 15 years later, and am finally starting to use Sublime Text 3 a bit more in my work. I’m not be a cool kid anymore, but I can still pretend to be one, eh? The Vintageous plugin lets my fingers feel like they are in Vim, while being able to take advantage of other packages for editing Markdown, interacting with Git and the lovely eye-pleasing themes that are available. I still feel a bit dirty because unlike Vim, Sublime is not opensource ; but at the same time it does feel good to support a small software publisher who is doing good work. Maybe I’ll end up switching back to Vim and supporting it.
Anyway, as a Python developer one thing I immediately wanted to be able
to do was to use my project’s VirtualEnv during development, and to run
the test suite from inside Sublime. The
Virtualenv
package makes creating, activating, deactivating, deleting a virtualenv
a snap. But I couldn’t seem to get the build to work properly with the
virtualenv, even after setting the Build System
to
Python - Virtualenv
After what felt like a lot of googling around (it was probably just 20
minutes) I didn’t seem to find an answer until I discovered in the
Project
documentation that I could save my Project, and then go to
Project -> Edit Project
and add a
build_systems
stanza like this:
{
"folders":
[
{
"path": "."
}
],
"virtualenv": "/Users/ed/.virtualenvs/curio",
"build_systems": [
{
"name": "Test",
"shell_cmd": "/Users/ed/.virtualenvs/curio/bin/python setup.py test"
}
]
}
Notice how the shell_cmd is using the Python executable in my
VirtualEnv? After saving that I was able to go into Tools ->
Build System
and set the build system to Test
, which
matches the name of the build system you added in the JSON. Now a
command-B will run my test suite with the VirtualEnv.
I guess it would be nice if the VirtualEnv plugin for Sublime did something to make this easier. But rather than go down that rabbit hole I decided to write it down here for the benefit of my future self (and perhaps you).
If you know of a better way to do this please let me know.