Я написал скрипт, который устанавливает Python 2 (в котором отсутствуют удобные возможности, предоставляемые Python 3 для пользовательских установок) и Pip 2 в каталог пользователя, чтобы обычный пользователь мог быть администратором своих модулей и т. Д.
#!/bin/bash
VERSION="2.7.11"
BUILDDIR=~/"build/python"
INSTALLDIR=~/"python/Python-$VERSION"
mkdir -p ${BUILDDIR}
cd ${BUILDDIR}
if [ ! -f $BUILDDIR/Python-$VERSION.tgz ]
then
wget https://www.python.org/ftp/python/$VERSION/Python-$VERSION.tgz
tar zxfv Python-$VERSION.tgz
fi
find $BUILDDIR -type d | xargs chmod 0755
cd Python-$VERSION
mkdir -p ${INSTALLDIR}
./configure --prefix=${INSTALLDIR}
make && make install
# Append to user PATH or create symbolic link to .local/bin
# [[ ":$PATH:" != *":$HOME/python/Python-$VERSION/bin:"* ]] && printf "export PATH=$HOME/python/Python-$VERSION/bin:$PATH\n" >> ~/.bashrc
if [ ! -d ~/.local/bin ]; then mkdir -p ~/.local/bin; fi
ln -s ~/python/Python-"$VERSION"/bin/python ~/.local/bin/
source ~/.bashrc
# Install local pip
cd ..
wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | python - --user
[[ ":$PATH:" != *":$HOME/.local/bin:"* ]] && printf "export PATH=$HOME/.local/bin:$PATH\n" >> ~/.bashrc
# Install modules like this:
# pip install --target="$HOME/.local/lib/python$VERSION/site-packages"
# Add those modules to PYTHONPATH
[[ ":$PYTHONPATH:" != *":$HOME/.local/lib/python$VERSION/site-packages:"* ]] && printf "export PYTHONPATH=$HOME/.local/lib/python$VERSION/site-packages:$PYTHONPATH\n" >> ~/.bashrc
source ~/.bashrc
Предостережение: этот сценарий, по общему признанию, самоуверен в том, что он добавит несколько строк к вашему ~/.bashrc
для переменной PATH ENV. Если это нежелательно, просто закомментируйте соответствующие строки в скрипте.
Пример. Генератор служебных файлов для служебных файлов Airprint для использования в Avahi не поддерживает Python 3. Чтобы поддерживать чистоту системы, я просто устанавливаю локальную версию Python 2 и запускаю airprint-generate.py
, а затем удаляю вся установка (экономит место на маленьком Raspberry Pi Zero W).