This installs the binary whack-run to /usr/local/bin. Once
whack-run has been installed, you can install Whack as an ordinary
Python package:

pip install whack

How does Whack work?

Many Linux applications can be compiled and installed by running the
following commands, or similar:

$ ./configure
$ make
$ make install

This usually installs the application under /usr/local. However,
sometimes we want to install isolated instances of an application
without being root. For instance, if we’re developing a web application
that uses Apache, it’s helpful to have an isolated installation of
Apache. We can change the installation prefix when running
./configure:

While this works, it requires us to re-compile the application whenever
we want to install it in a different location. Depending on the
application, compilation can take a quite a while.

Whack solves this problem by using unshare and mount to change
the filesystem for a single process. Each application is compiled with
its prefix set to /usr/local/whack. Before running the binary for an
application, Whack uses the unshare syscall to create a private
mount namespace. This means that any mount calls only have visible
effects within that process. We then mount the directory that the
application was installed in onto /usr/local/whack, and exec the
binary.

The actual nginx binary can be found in ~/web-app/nginx/.sbin (note
that the binary is in a directory called .sbin, not sbin). If we
try to run ~/web-app/nginx/.sbin/nginx directly, we’ll get an error: