# Python
# ======
# Slackware 13.37: python 2.6.6
# Slackware 14.0: python 2.7.3
# Slackware 14.1: python 2.7.5
# Slackware 14.2: python 2.7.11
#
# Some of them include security-patched versions in 'patches'.
#
# Slackware 9.1 and up also include 'python-demo' and 'python-tools'
# packages, but they were merged back into 'python' in 11.0
#
# Slackware 14.2 and up include python-pillow (instead of pil) and
# python-setuptools packages. Those are covered here:
# PIL
# setuptools
# Below I include the latest 3.7 and 2.7 releases.
# Though 3.0.1, for example, was released in 2009, there are many things
# that will not work with Python 3.x, so consider everything Python-based
# that you will be using before deciding what version(s) to install/upgrade.
#
# If you are using Mailman 2.x, you need Python 2.7
# If you are using Mailman 3.x, you need Python >= 3.4 for the core and
# 2.7 for the web UI and archiver
# As long as your shebang (1st line of a script) uses the path to the
# specific version, you should be able to have multiple major versions of
# Python installed.
#
# #!/usr/bin/python2
# #!/usr/bin/python2.7
# #!/usr/bin/python3
#
# You should also run programs like 'pip' as the specific
# version, like 'pip2.7' or 'pip2' if you have one 2.x and one 3.x version
# installed.
# If you want to make sure there are no old files left over from previous
# releases that may cause issues when upgrading, skip down to the bottom
# for uninstall instructions.
# Python 3.7.1
# ============
# If you're about to upgrade from 3.6.x to 3.7.x, read this:
# http://docs.python.org/whatsnew/3.7.html
# for info about changes between the two versions. For more info read
# Misc/NEWS.
# Get it
cd
test -f installed/Python-3.7.1.tar.xz && mv installed/Python-3.7.1.tar.xz .
test ! -f Python-3.7.1.tar.xz &&
wget http://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
# Extract it
mkdir -p -m 0700 ~/src
cd ~/src
find -maxdepth 1 -type d -name "Python-3.*" -exec rm -r {} \;
tar xJvf ~/Python-3.7.1.tar.xz
cd Python-3.7.1
test $UID = 0 && chown -R root:root .
# If you are 64-bit, get this patch so you don't end up with both
# /usr/lib/python3.7 and /usr/lib64/python3.7 directories because they
# appear to hard-code /lib/ in the source without using configure's
# --libdir
test $(uname -m) = 'x86_64' &&
wget -nc http://englanders.us/pub/linux/patches/python-3.7.1-x86_64.patch &&
cat python-3.7.1-x86_64.patch | patch -p1
## Configure the build
# If you don't need pip, leave off --with-ensurepip=install
# You could just install it later, but every way I tried to do it a while
# back with 2.x, I'd get stuck with a dependency loop between the get-pip.py
# script needing urllib3, not having it, that requires something else, ...
# If you have source-installed OpenSSL under /usr/local/ssl and are 64-bit:
# (as with < 1.1.0)
test $(uname -m) = 'x86_64' -a -d /usr/local/ssl/lib64 &&
LDFLAGS=-L/usr/local/ssl/lib64 ./configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --enable-shared --with-ensurepip=install
# If you are 64-bit but do not have a /usr/local/ssl/lib64
# (as with 1.1.0)
test $(uname -m) = 'x86_64' -a ! -d /usr/local/ssl/lib64 &&
./configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --enable-shared --with-ensurepip=install
# Any other situation:
test $(uname -m) != 'x86_64' &&
./configure --prefix=/usr --enable-shared --mandir=/usr/man --with-ensurepip=install
# Build it
make
# Test the build
make test
# Become root to clean up old files and to install it
su
# Remove the Slackware packages:
test -x /sbin/removepkg &&
/sbin/removepkg python python-demo python-pillow python-setuptools python-tools
# I don't do this when upgrading from one minor version to another (3.7.0 to
# 3.7.1), but when I upgrade from one major version to another (3.6.x to
# 3.7.x) I sometimes like to blow everything away from the old version(s) to
# make sure there aren't old files lying around that will cause problems
# later. Skip down to the bottom if you want to zap everything before
# proceeding ...which may break lots of things for you.
# Install the new version
#
# Use 'make install' for whatever you want your default version of
# Python to be. i.e. what you get when you run 'python'.
#
# If you use 'make altinstall' instead, that will leave existing python
# and python-config (usually in /usr/bin) pointing to whatever it was
# already pointing to. In that case, you would need to run 'python3.7'
# this is the only 3.x one, or 'python3.7' if there are others like 3.6.x
make install
ldconfig
# If this is your only Python 3.x, create symlinks so you can run
# python3, python3-config, pip3, pydoc3, ...
( cd /usr/bin
test -L easy_install3 && rm easy_install3
test -L pip3 && rm pip3
test -L pydoc3 && rm pydoc3
test -L python3 && rm python3
test -L python3-config && rm python3-config
ln -s easy-install-3.7 easy_install3
ln -s pip3.7 pip3
ln -s pydoc3.7 pydoc3
ln -s python3.7 python3
ln -s python3.7m-config python3-config )
# Make sure your non-root user can remove the source later
chown -R $(logname) .
chmod -R u+w .
# If you used 'make altinstall' and already had Python 2.x installed, then
# the python and python-config symlinks should still point to Python 2.x
# If you used 'make install' and you want 'python' to be 2.x, you may
# need to do this:
# ln -sf /usr/bin/python2 /usr/bin/python
# ln -sf /usr/bin/python2-config /usr/bin/python-config
# If you want to upgrade pip, with pip, run the following:
# (you may get a message saying there is a newer version of pip while using
# it)
pip install --upgrade pip
# For pip usage:
pip --help
pip install --help
# Become yourself again
exit
# Keep the tarball for later
cd
mkdir -p -m 0700 installed
rm -f installed/Python-3.*.tgz installed/Python-3.*.tar.*
mv Python-3.7.1.tar.xz installed/
# Skip down to the bottom for a list of some common Python-using apps
# Python 2.7.15
# =============
# If you're about to upgrade from 2.6.x to 2.7.x, read this:
# http://docs.python.org/whatsnew/2.7.html
# for info about changes between the two versions. For more info read
# Misc/NEWS.
# Get it
cd
test -f installed/Python-2.7.15.tar.xz && mv installed/Python-2.7.15.tar.xz .
test ! -f Python-2.7.15.tar.xz &&
wget http://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz
# Extract it
mkdir -p -m 0700 ~/src
cd ~/src
find -maxdepth 1 -type d -name "Python-2.*" -exec rm -r {} \;
tar xJvf ~/Python-2.7.15.tar.xz
cd Python-2.7.15
test $UID = 0 && chown -R root:root .
# If you are 64-bit, get the Slackware x86_64 patch so we don't end up with
# /usr/lib/python2.7 and /usr/lib64/python2.7 because they hard code /lib/
# in the Python source without listening to their own configure --libdir
#
# Expect "Hunk #? succeeded" messages, the same patch has been used for
# a while, this one starting with Python 2.7.9
test $(uname -m) = 'x86_64' &&
wget -nc ftp://ftp.slackware.com/pub/slackware/slackware64-current/source/d/python/python.x86_64.diff.gz &&
zcat python.x86_64.diff.gz | patch -p1
## Configure the build
# If you don't need pip, leave off --with-ensurepip=install
# You could install it later, and I did not try with 2.7.15, but in the
# past, every way I tried to do install it separate from the Python
# installation itself, I would get stuck with a dependency loop between the
# get-pip.py script needing urllib3, not having it, that requires something
# else, ...
# If you have source-installed OpenSSL under /usr/local/ssl and are 64-bit:
test $(uname -m) = 'x86_64' -a -d /usr/local/ssl/lib64 &&
LDFLAGS=-L/usr/local/ssl/lib64 ./configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --enable-shared --with-ensurepip=install
# If you are 64-bit but do not have a /usr/local/ssl/lib64
test $(uname -m) = 'x86_64' -a ! -d /usr/local/ssl/lib64 &&
./configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --enable-shared --with-ensurepip=install
# Any other situation:
test $(uname -m) != 'x86_64' &&
./configure --prefix=/usr --enable-shared --mandir=/usr/man --with-ensurepip=install
# Build it
make
# Become root to clean up old files and to install it
su
# Remove the Slackware packages, if there are any:
test -x /sbin/removepkg &&
/sbin/removepkg python python-demo python-pillow python-setuptools python-tools
# I don't do this when upgrading from one minor version to another (2.7.14 to
# 2.7.15), but when I upgrade from one major version to another (2.6.x to
# 2.7.x) I sometimes like to blow everything away from the old version(s) to
# make sure there aren't old files lying around that will cause problems
# later. Skip down to the bottom if you want to zap everything before
# proceeding ...which may break lots of things for you.
# Install the new version
make install
ldconfig
## If you already had Python 3.x and just installed 2.x, but want the
## 'python' and 'python-config' symlinks to point to 3.x:
# ln -sf /usr/bin/python3 /usr/bin/python
# ln -sf /usr/bin/python3-config /usr/bin/python-config
# Make sure your non-root user can remove the source later
chown -R $(logname) .
chmod -R u+w .
# If you want to upgrade pip, with pip, run the following:
# (you may get a message saying there is a newer version of pip while using
# it)
pip install --upgrade pip
# For pip usage:
pip --help
pip install --help
# Become yourself again
exit
# Keep the tarball for later
cd
mkdir -p -m 0700 installed
rm -f installed/Python-2.*.tgz installed/Python-2.*.tar.*
mv Python-2.7.15.tar.xz installed/
# Skip down to the bottom for a list of some common Python-using apps