Python
Contents
Category
Development, Scripting, PythonDescription
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development, as well as for use as a scripting or glue language to connect existing components together. Python supports modules and packages, which encourages program modularity and code reuse.Available versions (Euler, old software stack)
Legacy versions | Supported versions | New versions |
---|---|---|
2.7.12, 2.7.13, 2.7.6, 2.7.9, 3.3.3, 3.4.3, 3.6.0 | 2.7.14, 2.7.6_UCS4, 3.6.1, 3.7.1 |
Please note that this page refers to installations from the old software stack. There are two software stacks on Euler. Newer versions of software are found in the new software stack.
Environment modules (Euler, old software stack)
Version | Module load command | Additional modules loaded automatically |
---|---|---|
2.7.12 | module load gcc/4.8.2 python/2.7.12 | openblas/0.2.13_seq |
2.7.13 | module load gcc/4.8.2 python/2.7.13 | openblas/0.2.13_seq sqlite/3.15.0 |
2.7.6 | module load gcc/4.8.2 python/2.7.6 | openblas/0.2.13_seq |
2.7.9 | module load gcc/4.8.2 python/2.7.9 | openblas/0.2.13_seq |
3.3.3 | module load gcc/4.8.2 python/3.3.3 | openblas/0.2.13_seq |
3.4.3 | module load gcc/4.8.2 python/3.4.3 | openblas/0.2.13_seq |
3.6.0 | module load gcc/4.8.2 python/3.6.0 | openblas/0.2.13_seq sqlite/3.15.0 |
2.7.14 | module load new gcc/4.8.2 python/2.7.14 | openblas/0.2.13_seq |
2.7.6_UCS4 | module load new gcc/4.8.2 python/2.7.6_UCS4 | openblas/0.2.13_seq |
3.6.1 | module load new gcc/4.8.2 python/3.6.1 | openblas/0.2.13_seq |
3.7.1 | module load new gcc/4.8.2 python/3.7.1 | openblas/0.2.13_seq |
Please note that this page refers to installations from the old software stack. There are two software stacks on Euler. Newer versions of software are found in the new software stack.
Interactive session
In order to start an interactive Python session on one of the login nodes, you can use the command python to start the Python interpreter.[sfux@eu-login-06 ~]$ module load gcc/4.8.2 python/2.7.6 Autoloading openblas/0.2.13_seq [sfux@eu-login-06 ~]$ python Python 2.7.6 (default, Jan 20 2014, 14:02:29) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> import a_module_that_is_not_installed_yet Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named a_module_that_is_not_installed_yet >>>Interactive sessions can be used to check if a particular package is already installed or not (if a package is not installed yet, the import statement will result in an error message).
How to submit a job
For small tests, pre- and post-processing with Python, you can start an interactive sessions on one of the login nodes. All other Python jobs have to be submitted through the batch system. You can submit a Python job (my_python_script.py) in batch mode with the following command:sbatch [Slurm options] --wrap="python my_python_script.py"
Here you need to replace [Slurm options] with Slurm parameters for the resource requirements of the job. Please find a documentation about the parameters of sbatch on the wiki page about the batch system.
When you specify the Python interpreter on the first line of your script, then please use
#!/usr/bin/env python
instead of
#!/usr/bin/python
Otherwise the Python interpreter from the operating system will be called when you directly execute the script with
./my_python_script.py
instead of
python ./my_python_script.pyThe Python interpreter from the operating system is older and does not have the additional packages installed.
Example
As an example for running a Python script on the cluster, we use the built-in tests of the scientific Python packages numpy and scipy.[leonhard@euler02 ~]$ module load python/3.3.3 Autoloading openblas/0.2.13_seq [leonhard@euler02 ~]$ cat test_python.py import numpy import scipy numpy.test() scipy.test() [leonhard@euler02 ~]$ bsub -n 1 -W 4:00 -R "rusage[mem=1024]" python ./test_python.py Generic job. Job <25518323> is submitted to queue <normal.4h>. [leonhard@euler02 ~]$ bjobs JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 25518323 leonhard PEND normal.4h euler02 *python.py Aug 23 15:05 [leonhard@euler02 ~]$ bjobs JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 25518323 leonhard RUN normal.4h euler02 e1408 *python.py Aug 23 15:05 [leonhard@euler02 ~]$ bjobs No unfinished job found [leonhard@euler02 ~]$ grep Ran lsf.o25518323 Ran 6139 tests in 114.985sRan 20195 tests in 366.931s
Extensions
The Python programming language can make use of packages, which extend the functionality of the core language. We provide a central Python package repository, with a range of installed packages that are available to all cluster users. If a package is not installed centrally, or if you need a newer version than the centrally installed one, then you can also install a Python package locally in your home directory, that can then be used together with the centrally installed Python interpreter.Checking installed packages with pip
Before installing a new package locally with pip, you might want to check first if the package is already available. For Python 3.4.3 and newer versions, all centrally installed packages were installed with pip. To check the available packages for a particular Python version, you would need to first load the corresponding Python module and then run the command
pip3 list
The output will display a list of all installed Python packages.
Installing a Python package, using PIP
Additionally, you can also install a package locally using pip
pip3 install --user package
The packages will be installed in a local repository at $HOME/.local. Since this is the default path for user-installed python packages, there is no need to adjust PYTHONPATH.
In order to install a particular version of a package, you can use the command
pip3 install --user package==version
Where "version" denotes the version number that you would like to install.
But be aware that using pip to install a newer version of a package that has originally been installed with easy_install causes problems in the loading order, such that always the version that was installed with easy_install will be loaded unless you change the sys.path in the current Python session.
Installing a Python package locally, using distutils
Please don't install packages with distutils any more. Since Python 3.4 only pip should be used to install packages
You can create your personal Python package repository. As an example, we create this directory in $HOME:
mkdir $HOME/python
You are free to choose any other location for your package repository, but it has to contain a given sub-directory structure (which is shown here for python/2.7.6. In case of python/3.3.3, exchange the version number in the directory names from 2.7 to 3.3):
cd $HOME/python mkdir -p lib64/python2.7/site-packages
In order to make python aware of the local package repository, you should add a line to the $HOME/.bash_profile file:
export PYTHONPATH=$HOME/python/lib64/python2.7/site-packages:$PYTHONPATH
and run this same command on the command line to make your current interactive shell aware of the additional python path. All of the the above steps should be done only once: before you install your first package.
After this preparation, one needs to load the Python module:
module load python/2.7.6
As a next step, you can download and extract the tarball with the source code of the additional package. Go into the directory containing the setup.py file (the directory is usually named package-version). Finally, you can run the command to install the package:
python setup.py install --prefix=$HOME/python
Here the prefix option assures that the package is installed in your local package repository.
With this setup, it is possible to have two versions of a package side-by-side. Python will always search in the locations given in PYTHONPATH first, and if a package is not found there, it will fall back to the central repository.License information
Open source (http://www.opensource.org), GPL compatible https://www.python.org/download/releases/2.7/license/Links
Python packages that are non-trivial to install locallyhttps://www.python.org/
http://planetpython.org/
https://en.wikipedia.org/wiki/Python_(programming_language)