4053
Comment:
|
7615
Add some pip package management command sequences; general cleanup
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
#rev 2018-08-28 davidsch | #rev 2020-09-10 bonaccos <<TableOfContents()>> |
Line 5: | Line 7: |
We provide some modules that come with the current Debian GNU/Linux stable release, but usually this is because they are dependencies of an installed software. For python we strongly recommend to build own python environments with the desired python versions and modules. | We provide some packages that come with the current Debian GNU/Linux stable release, but usually this is because they are dependencies of an installed software. For python we strongly recommend to build own python environments with the desired python versions and packages. |
Line 7: | Line 9: |
Our recommended way to install such environments is trough Conda, alternatively via building an environment via `pyenv` is as well possible. Additional module can then either be installed by conda itself or trough `pip`. | Our recommended way to install such environments is trough `conda`, especially if you want to build a tool or toolchain where the setup will possibly be published in a paper. Alternatively, building an environment via `pyenv` is possible. For just quickly trying out some python tool a local installation of `pip` is recommended. |
Line 11: | Line 15: |
For a detailed overview for conda please follow to the [[Programming/Languages/Conda|Conda documentation]]. | For a detailed overview of `conda` please follow the [[Programming/Languages/Conda|Conda documentation]]. |
Line 15: | Line 19: |
`Pyenv` is a collection of tools that allow users to manage different versions of python. In the simplest case you will need it to simply get an installation of python in your user space. Using that custom python installation, you will then be able to install additional modules in a very comfortable way, since you can install them in the "system path" (which is then somewhere within your home). | `pyenv` is a collection of tools that allow users to manage different versions of python. The simplest case is to install python in your user space. Using this custom python installation, you will be able to install additional packages in a comfortable way, since you can install them in the "system path" (which is then somewhere within your home). |
Line 17: | Line 21: |
Here is a small howto for installing python 2.7.15 in your home: | The documentation on `pyenv` can be found on its Github page at [[https://github.com/pyenv/pyenv|github.com/pyenv/pyenv]]. |
Line 19: | Line 23: |
* Install pyenv: {{{ curl https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer -o pyenv-installer}}} Check what the script is doing and then execute it: {{{ |
Here is a small howto for installing python 3.9.1 in your home: * Install pyenv: {{{#!highlight bash numbers=disable curl https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer -o pyenv-installer }}} Check what the script is doing and then execute it: {{{#!highlight bash numbers=disable |
Line 27: | Line 32: |
* Add the following three lines to your ~/.bash_profile: {{{ export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"}}} |
* Add the following lines to your `~/.profile` before sourcing `~/.bashrc`: {{{#!highlight bash numbers=disable export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" }}} * In the `~/.bashrc`: {{{#!highlight bash numbers=disable eval "$(pyenv init -)" }}} * If you want to pyenv-virtualenv automatically (in the `~/.bashrc`): {{{#!highlight bash numbers=disable eval "$(pyenv virtualenv-init -)" }}} |
Line 33: | Line 44: |
* Restart your shell so the path changes take effect: {{{ exec $SHELL}}} |
* You need a new login shell for all settings to take effect (when logged in on a Desktop environment logoff and login again) |
Line 37: | Line 46: |
* Install some python version, e.g. for python 2.7.15: {{{ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.15 |
* Install some python version, e.g. for python 3.9.1: {{{#!highlight bash numbers=disable env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.1 |
Line 43: | Line 51: |
* Make sure that this new python version will be used when you run python. You only need to run this command once: {{{ pyenv global 2.7.15}}} |
* Make sure that this new python version will be used when you run python. You only need to run this command once: {{{#!highlight bash numbers=disable pyenv global 3.9.1}}} |
Line 47: | Line 54: |
* In order to update {{{pyenv}}} run: {{{ |
* In order to update `pyenv` run: {{{#!highlight bash numbers=disable |
Line 55: | Line 61: |
== Installation of a local pip == `pip` can be installed in a user's environment and work with the `python` version installed on the system. Every package will be installed for the user only in one location, there is no separation with virtual environments.<<BR>> Set up a local `pip` installation with the following commands: {{{#!highlight bash numbers=disable mkdir -p ~/.local/bin export PYTHONUSERBASE=~/.local export PIP_USER=true export PATH=$PYTHONUSERBASE/bin:$PATH wget https://bootstrap.pypa.io/get-pip.py -O ~/.local/bin/get-pip.py python3 ~/.local/bin/get-pip.py -vvv --user }}} Set default installations to the user's environment permanently (stored in `~/.config/pip/pip.conf`): {{{#!highlight bash numbers=disable pip config set install.user true }}} |
|
Line 56: | Line 76: |
== Installation of additional or newer modules with pip == | The exported environment variables will be lost after closing the shell. To enable local pip on demand, add the following function to your `.bashrc`: {{{#!highlight bash numbers=disable function localpip { PYTHONUSERBASE=~/.local PATH=$PYTHONUSERBASE/bin:$PATH export PYTHONUSERBASE PATH } }}} When you open a new shell, entering the command `localpip` will call the function and initialize your local pip installation. |
Line 58: | Line 85: |
Once you installed your custom python with the explanations given above, you are ready to install additional or newer modules the easy way. The usage of {{{pip}}} is very easy. The following command installs the module {{{numpy}}} {{{ pip install numpy}}} while the next command would upgrade an existing installation of {{{numpy}}} {{{ pip install --upgrade numpy}}} |
=== pip cache === `pip` uses a cache which is by default stored under `~/.cache/pip` or `$XDG_CACHE_HOME/pip` if it is set to a non-default location. This cache tends to fill up quickly and should occasionally be cleared with {{{#!highlight bash numbers=disable pip cache purge }}} It is advisable to set the cache's location to the local scratch disk to avoid using up quota: |
Line 65: | Line 92: |
For advanced usage of {{{pip}}}, please consult the manuals: https://pip.pypa.io/en/latest/ | 1. Create a directory for the cache: {{{#!highlight bash numbers=disable mkdir -p /scratch/$USER/pip_cache }}} 1. Temporarily set the environment variable to tell `pip` to use a different cache location: {{{#!highlight bash numbers=disable export PIP_CACHE_DIR=/scratch/$USER/pip_cache/ }}} or store the location permanently (in `~/.config/pip/pip.conf`): {{{#!highlight bash numbers=disable pip config set global.cache-dir /scratch/$USER/pip_cache }}} 1. Check if the cache location is correct: {{{#!highlight bash numbers=disable pip cache info }}} |
Line 67: | Line 105: |
=== Installation of additional or newer packages with pip === | |
Line 68: | Line 107: |
== Installation of Python modules that are not available in the archives of pip == | Once you installed your custom python with the explanations given above, you are ready to install additional or newer packages the easy way. The usage of `pip` is very easy. The following command installs the package `numpy`. {{{#!highlight bash numbers=disable pip install numpy }}} while the next command would upgrade an existing installation of `numpy` {{{#!highlight bash numbers=disable pip install --upgrade numpy }}} |
Line 70: | Line 116: |
Here we provide some shell script snippets for installing frequently asked modules which cannot be installed through {{{pip}}}. These scripts just provide an example installation. You might have to adapt some paths in order to make the module work correctly with the version of python you are using (e.g. if you run your custom python provided through {{{pyenv}}}). | === pip package management === Show installed packages: {{{#!highlight bash numbers=disable pip list --user }}} Show installed packages with their dependencies: {{{#!highlight bash numbers=disable pip freeze user | cut -d '=' -f 1 | xargs -r pip show | grep -E '^(Name|Required-by):' }}} Show outdated packages {{{#!highlight bash numbers=disable pip list --user --outdated }}} Update all outdated packages: {{{#!highlight bash numbers=disable pip list --user --outdated | awk '{if ($2 ~ /[0-9\.]+/) print $1}' | xargs -r pip install --user --upgrade }}} For advanced usage of `pip`, please consult the [[https://pip.pypa.io/en/stable/user_guide/|official user guide]]. == Installation of Python packages that are not available in the archives of pip == Here we provide some shell script snippets for installing frequently asked packages which cannot be installed through `pip`. These scripts just provide an example installation. You might have to adapt some paths in order to make the package work correctly with the version of python you are using (e.g. if you run your custom python provided through `pyenv`). |
Line 73: | Line 146: |
{{{#!highlight bash | {{{#!highlight bash numbers=disable |
Contents
Python
We provide some packages that come with the current Debian GNU/Linux stable release, but usually this is because they are dependencies of an installed software. For python we strongly recommend to build own python environments with the desired python versions and packages.
Our recommended way to install such environments is trough conda, especially if you want to build a tool or toolchain where the setup will possibly be published in a paper. Alternatively, building an environment via pyenv is possible.
For just quickly trying out some python tool a local installation of pip is recommended.
Installing your own python environment with Conda
For a detailed overview of conda please follow the Conda documentation.
Installing your own python versions with pyenv
pyenv is a collection of tools that allow users to manage different versions of python. The simplest case is to install python in your user space. Using this custom python installation, you will be able to install additional packages in a comfortable way, since you can install them in the "system path" (which is then somewhere within your home).
The documentation on pyenv can be found on its Github page at github.com/pyenv/pyenv.
Here is a small howto for installing python 3.9.1 in your home:
Install pyenv:
curl https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer -o pyenv-installer
Check what the script is doing and then execute it:
You can remove the installer file afterwards.bash ./pyenv-installer
Add the following lines to your ~/.profile before sourcing ~/.bashrc:
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)"
In the ~/.bashrc:
eval "$(pyenv init -)"
If you want to pyenv-virtualenv automatically (in the ~/.bashrc):
eval "$(pyenv virtualenv-init -)"
- You need a new login shell for all settings to take effect (when logged in on a Desktop environment logoff and login again)
Install some python version, e.g. for python 3.9.1:
env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.1 pyenv rehash
Note, that settting of PYTHON_CONFIGURE_OPTS="--enable-shared" is needed if you need to link against the libpython shared library.
Make sure that this new python version will be used when you run python. You only need to run this command once:
pyenv global 3.9.1
In order to update pyenv run:
pyenv update
Documentation of pyenv
Website of pyenv
Website of pyenv installer
Installation of a local pip
pip can be installed in a user's environment and work with the python version installed on the system. Every package will be installed for the user only in one location, there is no separation with virtual environments.
Set up a local pip installation with the following commands:
mkdir -p ~/.local/bin
export PYTHONUSERBASE=~/.local
export PIP_USER=true
export PATH=$PYTHONUSERBASE/bin:$PATH
wget https://bootstrap.pypa.io/get-pip.py -O ~/.local/bin/get-pip.py
python3 ~/.local/bin/get-pip.py -vvv --user
Set default installations to the user's environment permanently (stored in ~/.config/pip/pip.conf):
pip config set install.user true
The exported environment variables will be lost after closing the shell. To enable local pip on demand, add the following function to your .bashrc:
function localpip {
PYTHONUSERBASE=~/.local
PATH=$PYTHONUSERBASE/bin:$PATH
export PYTHONUSERBASE PATH
}
When you open a new shell, entering the command localpip will call the function and initialize your local pip installation.
pip cache
pip uses a cache which is by default stored under ~/.cache/pip or $XDG_CACHE_HOME/pip if it is set to a non-default location. This cache tends to fill up quickly and should occasionally be cleared with
pip cache purge
It is advisable to set the cache's location to the local scratch disk to avoid using up quota:
Create a directory for the cache:
mkdir -p /scratch/$USER/pip_cache
Temporarily set the environment variable to tell pip to use a different cache location:
export PIP_CACHE_DIR=/scratch/$USER/pip_cache/
or store the location permanently (in ~/.config/pip/pip.conf):
pip config set global.cache-dir /scratch/$USER/pip_cache
Check if the cache location is correct:
pip cache info
Installation of additional or newer packages with pip
Once you installed your custom python with the explanations given above, you are ready to install additional or newer packages the easy way. The usage of pip is very easy. The following command installs the package numpy.
pip install numpy
while the next command would upgrade an existing installation of numpy
pip install --upgrade numpy
pip package management
Show installed packages:
pip list --user
Show installed packages with their dependencies:
pip freeze user | cut -d '=' -f 1 | xargs -r pip show | grep -E '^(Name|Required-by):'
Show outdated packages
pip list --user --outdated
Update all outdated packages:
pip list --user --outdated |
awk '{if ($2 ~ /[0-9\.]+/) print $1}' |
xargs -r pip install --user --upgrade
For advanced usage of pip, please consult the official user guide.
Installation of Python packages that are not available in the archives of pip
Here we provide some shell script snippets for installing frequently asked packages which cannot be installed through pip. These scripts just provide an example installation. You might have to adapt some paths in order to make the package work correctly with the version of python you are using (e.g. if you run your custom python provided through pyenv).
nlopt
#!/bin/bash
# Installation script for nlopt library
VERSION=2.3
INSTALLDIR=$HOME/.local
BUILDDIR=/scratch/$USER/nlopt
mkdir -p $BUILDDIR
cd $BUILDDIR
wget "http://ab-initio.mit.edu/nlopt/nlopt-${VERSION}.tar.gz"
tar -xvvzkf nlopt-${VERSION}.tar.gz
cd nlopt-${VERSION}
./configure \
--enable-shared \
--prefix=$INSTALLDIR \
OCT_INSTALL_DIR=$INSTALLDIR/octave/oct \
M_INSTALL_DIR=$INSTALLDIR/octave/m/ \
MEX_INSTALL_DIR=$INSTALLDIR/mex \
GUILE_INSTALL_DIR=$INSTALLDIR/guile
make
make install