Базовая статья: «Установка модулей Python».

В состав «обычной полной» установки Python3 входит порядка 300 модулей. На сайте Python Package Index(PyPi) — более 90000 модулей (под свободной лицензией). Не все модули с сайта совместимы со всеми версиями Python и со всеми операционными системами.

В некоторых (например, основанных на Linux) операционных системах есть возможность оформить модуль Python как пакет ОС и добавить его в общее хранилище пакетов. Затем можно будет получать пакет из хранилища и устанавливать/удалять/обновлять стандартными для ОС методами.

Кроме того, сам Python предоставляет инструмент установки и удаления своих модулей — distutils (с расширением по имени setuptioos) и инструмент доставки — pip.

Примечание: в Linux, как правило, установлены обе версии Python — Python2 и Python3. Пока что инструменты для python3 менее распространены, поэтому имена программ имеют либо версию Python в конце (pip3, python3.3 и т. п.), либо «python3-» в начале. Модули для различных версий Python располагаются в различных каталогах (например, /usr/lib64/python3), поэтому в модификации имён не нуждаются.

Примечание 2: Все дальнейшие примеры приведены для linux-систем, строка «$ » в начале примера означает, что команда вводится в ответ на приглашение интерпретатора командной строки linux. На самом деле примеры кроссплатформенны, и работают на любых ОС с установленным Python3.

Выполняя оператор import, Python3 ищет модули в каталогах, перечисленных в списке sys.path (из модуля sys). В начале этого списка есть пустая строка, что означает поиск в текущем каталоге. В примере интерпретатору передаётся с помощью ключа "-c" программа-«однострочник»:

$ python3 -c 'import sys; print(sys.path)'
['', '/usr/lib64/python33.zip', '/usr/lib64/python3.3', '/usr/lib64/python3.3/plat-linux', '/usr/lib64/python3.3/lib-dynload', '/usr/lib64/python3.3/site-packages', '/usr/lib64/python3.3/site-packages/yieldfrom', '/usr/lib/python3.3/site-packages']

Никакой из этих каталогов не обязан существовать. Обратите внимание на zip-архив среди названий каталогов. Да, python может «заходить» в архивы в поисках нужного модуля!

Если python установлен с правами администратора (для Linux это норма, для Windows — как когда), обычному пользователю запрещено модифицировать системный каталоги с модулями Python3, поэтому стоит создать собственный (например, в домашнем каталоге — /home/altlinux/python) и добавлять его в sys.path в программе.

Можно добавить этот каталог в переменную окружения PYTHONPATH до запуска Python3, тогда его имя попадёт в sys.path на первое место (после пустой строки):

$ mkdir /home/altlinux/python
$ echo 'print("QQ")' > /home/altlinux/python/DUMMY.py
$ PYTHONPATH=/home/altlinux/python python3
Python 3.3.1 (default, Apr 15 2013, 23:57:19) [GCC 4.7.2 20121109 (ALT Linux 4.7.2-alt7)] on linux Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/altlinux/python', '/usr/lib64/python3.3', … ]
>>> import DUMMY
QQ

Обратите внимание на то, что нулевой элемент sys.path — это пустая срока: первым делом Python будет искать модули в текущем каталоге.

Пополнить sys.path можно и безо всякого Linux — просто добавляя туда нужный путь из python:

Python 3.5.1 (default, May  5 2016, 10:50:17)
[GCC 5.3.1 20151207 (ALT Linux 5.3.1-alt3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(*sys.path)
 /usr/lib64/python35.zip /usr/lib64/python3.5 /usr/lib64/python3.5/plat-linux /usr/lib64/python3.5/lib-dynload /home/altlinux/.local/lib/python3/site-packages /usr/lib64/python3/site-packages /usr/lib64/python3/site-packages/gtk-2.0 /usr/lib/python3/site-packages
>>> sys.path.append('/home/altlinux/python')
>>> print(*sys.path)
 … /usr/lib/python3/site-packages /home/altlinux/python
>>> import DUMMY
QQ

Умением Python искать модули в различных каталогах можно воспользоваться, чтобы не запоминать путь к программам. Дело в том, что команда вида "python -m <имя модуля>" найдёт модуль с соответствующим именем (в простом случае — <имя модуля>.py) среди PYTHONPATH и запустит его как программу (при этом глобальное имя name будет указывать на строку "main"). Многие модули проверяют, не запустили ли их как программу, и делают что-нибудь полезное в этом случае, примерно так:

$ cat /usr/lib/python3/site-packages/easy_install.py

"""Run the EasyInstall command"""

if __name__ == '__main__':
    from setuptools.command.easy_install import main
    main()

Вот так, например, можно прочитать документацию по функции shuffle из модуля random:

$ python3 -m pydoc random.shuffle

А вот так — запустить полноценный WWW-сервер, который «отдаст» по адресу http://localhost:12345 все файлы текущего каталога:

$ python3 -m http.server 12345

Кстати, pydoc тоже может работать как WWW-вервер, показывая все строки документации, находящиеся во всех доступных модулях (в том числе и в наших программах, если они оказались в PYTHONPATH)