17db96d56Sopenharmony_ci.. highlight:: sh 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci.. _using-on-unix: 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ci******************************** 67db96d56Sopenharmony_ci Using Python on Unix platforms 77db96d56Sopenharmony_ci******************************** 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci.. sectionauthor:: Shriphani Palakodety 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ciGetting and installing the latest version of Python 137db96d56Sopenharmony_ci=================================================== 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciOn Linux 167db96d56Sopenharmony_ci-------- 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ciPython comes preinstalled on most Linux distributions, and is available as a 197db96d56Sopenharmony_cipackage on all others. However there are certain features you might want to use 207db96d56Sopenharmony_cithat are not available on your distro's package. You can easily compile the 217db96d56Sopenharmony_cilatest version of Python from source. 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ciIn the event that Python doesn't come preinstalled and isn't in the repositories as 247db96d56Sopenharmony_ciwell, you can easily make packages for your own distro. Have a look at the 257db96d56Sopenharmony_cifollowing links: 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci.. seealso:: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci https://www.debian.org/doc/manuals/maint-guide/first.en.html 307db96d56Sopenharmony_ci for Debian users 317db96d56Sopenharmony_ci https://en.opensuse.org/Portal:Packaging 327db96d56Sopenharmony_ci for OpenSuse users 337db96d56Sopenharmony_ci https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-creating-rpms.html 347db96d56Sopenharmony_ci for Fedora users 357db96d56Sopenharmony_ci http://www.slackbook.org/html/package-management-making-packages.html 367db96d56Sopenharmony_ci for Slackware users 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ciOn FreeBSD and OpenBSD 407db96d56Sopenharmony_ci---------------------- 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci* FreeBSD users, to add the package use:: 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci pkg install python3 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci* OpenBSD users, to add the package use:: 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci pkg_add -r python 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci For example i386 users get the 2.5.1 version of Python using:: 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ciOn OpenSolaris 587db96d56Sopenharmony_ci-------------- 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ciYou can get Python from `OpenCSW <https://www.opencsw.org/>`_. Various versions 617db96d56Sopenharmony_ciof Python are available and can be installed with e.g. ``pkgutil -i python27``. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci.. _building-python-on-unix: 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ciBuilding Python 677db96d56Sopenharmony_ci=============== 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ciIf you want to compile CPython yourself, first thing you should do is get the 707db96d56Sopenharmony_ci`source <https://www.python.org/downloads/source/>`_. You can download either the 717db96d56Sopenharmony_cilatest release's source or just grab a fresh `clone 727db96d56Sopenharmony_ci<https://devguide.python.org/setup/#get-the-source-code>`_. (If you want 737db96d56Sopenharmony_cito contribute patches, you will need a clone.) 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ciThe build process consists of the usual commands:: 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci ./configure 787db96d56Sopenharmony_ci make 797db96d56Sopenharmony_ci make install 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci:ref:`Configuration options <configure-options>` and caveats for specific Unix 827db96d56Sopenharmony_ciplatforms are extensively documented in the :source:`README.rst` file in the 837db96d56Sopenharmony_ciroot of the Python source tree. 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci.. warning:: 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci ``make install`` can overwrite or masquerade the :file:`python3` binary. 887db96d56Sopenharmony_ci ``make altinstall`` is therefore recommended instead of ``make install`` 897db96d56Sopenharmony_ci since it only installs :file:`{exec_prefix}/bin/python{version}`. 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ciPython-related paths and files 937db96d56Sopenharmony_ci============================== 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ciThese are subject to difference depending on local installation conventions; 967db96d56Sopenharmony_ci:option:`prefix <--prefix>` and :option:`exec_prefix <--exec-prefix>` 977db96d56Sopenharmony_ciare installation-dependent and should be interpreted as for GNU software; they 987db96d56Sopenharmony_cimay be the same. 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ciFor example, on most Linux systems, the default for both is :file:`/usr`. 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci+-----------------------------------------------+------------------------------------------+ 1037db96d56Sopenharmony_ci| File/directory | Meaning | 1047db96d56Sopenharmony_ci+===============================================+==========================================+ 1057db96d56Sopenharmony_ci| :file:`{exec_prefix}/bin/python3` | Recommended location of the interpreter. | 1067db96d56Sopenharmony_ci+-----------------------------------------------+------------------------------------------+ 1077db96d56Sopenharmony_ci| :file:`{prefix}/lib/python{version}`, | Recommended locations of the directories | 1087db96d56Sopenharmony_ci| :file:`{exec_prefix}/lib/python{version}` | containing the standard modules. | 1097db96d56Sopenharmony_ci+-----------------------------------------------+------------------------------------------+ 1107db96d56Sopenharmony_ci| :file:`{prefix}/include/python{version}`, | Recommended locations of the directories | 1117db96d56Sopenharmony_ci| :file:`{exec_prefix}/include/python{version}` | containing the include files needed for | 1127db96d56Sopenharmony_ci| | developing Python extensions and | 1137db96d56Sopenharmony_ci| | embedding the interpreter. | 1147db96d56Sopenharmony_ci+-----------------------------------------------+------------------------------------------+ 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ciMiscellaneous 1187db96d56Sopenharmony_ci============= 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ciTo easily use Python scripts on Unix, you need to make them executable, 1217db96d56Sopenharmony_cie.g. with 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci.. code-block:: shell-session 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci $ chmod +x script 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ciand put an appropriate Shebang line at the top of the script. A good choice is 1287db96d56Sopenharmony_ciusually :: 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci #!/usr/bin/env python3 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ciwhich searches for the Python interpreter in the whole :envvar:`PATH`. However, 1337db96d56Sopenharmony_cisome Unices may not have the :program:`env` command, so you may need to hardcode 1347db96d56Sopenharmony_ci``/usr/bin/python3`` as the interpreter path. 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ciTo use shell commands in your Python scripts, look at the :mod:`subprocess` module. 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci.. _unix_custom_openssl: 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ciCustom OpenSSL 1417db96d56Sopenharmony_ci============== 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci1. To use your vendor's OpenSSL configuration and system trust store, locate 1447db96d56Sopenharmony_ci the directory with ``openssl.cnf`` file or symlink in ``/etc``. On most 1457db96d56Sopenharmony_ci distribution the file is either in ``/etc/ssl`` or ``/etc/pki/tls``. The 1467db96d56Sopenharmony_ci directory should also contain a ``cert.pem`` file and/or a ``certs`` 1477db96d56Sopenharmony_ci directory. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci .. code-block:: shell-session 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci $ find /etc/ -name openssl.cnf -printf "%h\n" 1527db96d56Sopenharmony_ci /etc/ssl 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci2. Download, build, and install OpenSSL. Make sure you use ``install_sw`` and 1557db96d56Sopenharmony_ci not ``install``. The ``install_sw`` target does not override 1567db96d56Sopenharmony_ci ``openssl.cnf``. 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci .. code-block:: shell-session 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci $ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz 1617db96d56Sopenharmony_ci $ tar xzf openssl-VERSION 1627db96d56Sopenharmony_ci $ pushd openssl-VERSION 1637db96d56Sopenharmony_ci $ ./config \ 1647db96d56Sopenharmony_ci --prefix=/usr/local/custom-openssl \ 1657db96d56Sopenharmony_ci --libdir=lib \ 1667db96d56Sopenharmony_ci --openssldir=/etc/ssl 1677db96d56Sopenharmony_ci $ make -j1 depend 1687db96d56Sopenharmony_ci $ make -j8 1697db96d56Sopenharmony_ci $ make install_sw 1707db96d56Sopenharmony_ci $ popd 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci3. Build Python with custom OpenSSL 1737db96d56Sopenharmony_ci (see the configure ``--with-openssl`` and ``--with-openssl-rpath`` options) 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci .. code-block:: shell-session 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci $ pushd python-3.x.x 1787db96d56Sopenharmony_ci $ ./configure -C \ 1797db96d56Sopenharmony_ci --with-openssl=/usr/local/custom-openssl \ 1807db96d56Sopenharmony_ci --with-openssl-rpath=auto \ 1817db96d56Sopenharmony_ci --prefix=/usr/local/python-3.x.x 1827db96d56Sopenharmony_ci $ make -j8 1837db96d56Sopenharmony_ci $ make altinstall 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci.. note:: 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci Patch releases of OpenSSL have a backwards compatible ABI. You don't need 1887db96d56Sopenharmony_ci to recompile Python to update OpenSSL. It's sufficient to replace the 1897db96d56Sopenharmony_ci custom OpenSSL installation with a newer version. 190