in the process of packaging pgAdmin4 in Arch Linux I ran into trouble getting it to start, which I reduced to a bad sys.path.
The attached patch simplifies the Python initialization. If the program name is set to match the venv's interpreter executable, Py_Initialize will set up sys.path to match the virtualenv.
This means that, assuming the venv is in the right directory, no further configuration of the PythonPath should be necessary.
I tested this using Python 2.7.13 and Python 3.6. I could not test this on Windows or OSX, but I made an effort at supporting them. Since this patch offloads all the path gathering to Python itself, the differences between the platforms are minimal.