
.. blogpost::
    :title: Install Python 3.9 and many packages on Linux Debian 10
    :keywords: python, debian
    :date: 2021-01-09
    :categories: installation

    **Password**

    ::

        sudo passwd

    **sudo, git, valgrind, nodejs**

    ::

        apt-get install sudo git valgrind nodejs npm

    **Firewall**

    Let's start with the firewall:

    ::

        apt-get install ufw
        sudo ufw enable
        sudo ufw allow ssh
        sudo ufw allow 8080/tcp

    Another series of packages to install:

    ::

        apt-get install intel-mkl
        apt-get install cmake apt-transport-https clang
        apt-get install protobuf-compiler libprotoc-dev
        apt-get install chromium-driver
        apt-get install dvipng p7zip-full inkscape graphviz unrar

    **Python**

    Then `Python 3.9 <https://tecadmin.net/how-to-install-python-3-9-on-debian-10/>`_.
    Some package require a different build because they need shared libraries.
    About --enable-shared, see `Relocation R_X86_64_32S against _Py_NotImplementedStruct
    can not be used when making a shared object; recompile with -fPIC
    <https://stackoverflow.com/questions/42582712/relocation-r-x86-64-32s-against-py-notimplementedstruct-can-not-be-used-when>`_,
    `How to configure python with --enable-shared on Ubuntu 18.04
    <https://stackoverflow.com/questions/53463903/how-to-configure-python-with-enable-shared-on-ubuntu-18-04>`_
    Option `--enable-shared --prefix=/opt/python` is needed when to embed python
    interpreter in a C application, see
    `Embedding the Python interpreter
    <https://pybind11.readthedocs.io/en/stable/compiling.html#embedding-the-python-interpreter>`_.

    ::

        sudo apt update && sudo apt upgrade
        sudo apt install wget build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev software-properties-common
        wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
        tar xzf Python-3.9.1.tgz
        cd Python-3.9.1
        ./configure --enable-optimizations --with-ensurepip=install --enable-shared --prefix=/opt/python
        make
        make altinstall

    If needed, do it again with:

    ::
        ./configure --enable-optimizations --with-ensurepip=install --enable-shared
        make
        make altinstall

    These settings must be added every time python is run
    or a python module is compiled:

    ::

        export LD_LIBRARY_PATH=/usr/local/lib/

    **/etc/environment/**

    You may add the following two lines in file
    ``/etc/environment/**:

    ::

        export LLVM_CONFIG=/usr/bin/llvm-config
        export LD_LIBRARY_PATH=/usr/local/lib/

    **llvmlite**

    ::

        wget https://apt.llvm.org/llvm.sh
        chmod +x llvm.sh
        sudo ./llvm.sh 10
        ls /usr/bin/llvm*
        sudo ln -s /usr/bin/llvm-config-8 /usr/bin/llvm-config
        python3.9 -m pip install llvmlite

    These settings must be also added:

    ::

        export LLVM_CONFIG=/usr/bin/llvm-config

    **GEOS**

    Useful to draw maps.

    ::

        apt-get install libgeos-dev libproj-dev proj-data graphviz libblas-dev liblapack-dev
        python3.9 -m pip install shapely pyproj shapely cartopy

    **Latex**

    ::

        apt-get install texlive texlive-latex-extra texlive-xetex

    **pandoc**

    ::

        apt-get install pandoc

    **Jenkins**

    Then `Jenkins
    <https://linuxize.com/post/how-to-install-jenkins-on-debian-10/>`_:

    ::

        sudo apt update
        sudo apt install default-jdk
        wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
        sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
        sudo apt update
        sudo apt install jenkins
        sudo systemctl enable --now jenkins

    To retrieve the password:

    ::

        sudo cat /var/lib/jenkins/secrets/initialAdminPassword

    **Website**

    See `Installation of nginx <blog-nginx-install>`.

    **FTP server**

    See `Install FTP server on debian <blog-ftp-vsftpd>`.

    **profile**

    Edit file:

    ::

        ~/.profile

    **pypiserver**

    ::

        nohup python3.9 -m pypiserver --port=8067 --root=/var/lib/jenkins/workspace/local_pypi/local_pypi_server/ > pypi.log &

    **keyring**

    Something is missing here. Maybe for the next installation.

    ::

        apt-get install libdbus-glib-1-2 libdbus-glib-1-dev dbus-tests dbus-launch gnome-keyring
        python3.9 -m pip install dbus-python keyring keyrings.cryptfile

        export $(dbus-launch)

    **pycurl**

    ::

        apt-get install libcurl4-openssl-dev libssl-dev
        python3.9 -m pip install pycurl
