Базовая статья: «Установка модулей 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)