I use a Virtual Private Server on DreamHost to run the Toastmasters District 101 website. For the most part, I’m happy with their service, and with a shell prompt, it’s usually easy to install whatever software I need.
Except Python 3.7. Python 3.7 requires a newer level of OpenSSL than DreamHost offers, and since I don’t have root access on a VPS, I can’t just replace OpenSSL. Compiling a current version and installing it in a directory (
$HOME/usr/local) was easy enough:
./config --prefix=$HOME/usr/local --openssldir=$HOME/usr/local/openssl make make test make install
Building Python 3.7 was also easy, but getting it to use my copy of OpenSSL was not.
At first, I tried adding my OpenSSL to
LD_LIBRARY_PATH, which worked, but it made
no version information available (required by ssh), and that seemed unfortunate (and made me worry that I might break other things).
After much searching, I found Python issue 21541, which had the hints I needed to statically-link my copy of OpenSSL into the Python executable.
./configure --prefix=$HOME/opt/python-3.7.0 --with-openssl=$HOME/usr/local/
Then uncomment and change the section of
Modules/Setup dealing with SSL to this:
# Socket module helper for SSL support; you must comment out the other # socket line above, and possibly edit the SSL variable: SSL=$HOME/usr/local _ssl _ssl.c \ DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ L$(SSL)/lib -Wl,-Bsymbolic $(SSL)/lib/libssl.a $(SSL)/lib/libcrypto.a
After that, the usual
make && make install worked.