Базовая статья: «Установка модулей 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)
Многие модули, размещённые на PyPi, можно устанавливать и удалять с помощью программы pip (или pip3), что есть не что иное, как вызов модуля pip. Следующие две команды просмотра установленных пакетов эквивалентны (в Windows Python3 и его pip скорее всего называется просто «python» и «pip»):
$ pip3 list
$ python3 -m pip list
Вот такая команда поищет среди модулей строку «pep8»:
$ python3 -m pip search pep8
Если Python установлен с правами пользователя (часто в Windows), то для установки, например. модуля pep8, достаточно выполнить команду «pip install pep8». Если с правами администратора, то для каждой ОС в Python определён свой каталог пользовательских модулей в который будет производиться установка с ключом "--user":
$ python3 -m pip list --user $ python3 -m pip install pep8 --user $ python3 -m pip list --user $ python3 -c "import sys; print(sys.path)"
После первой же установки этот каталог сам появится в sys.path (точнее, Python обнаружит, что каталог существует, и включит его туда, сравним выдачу последней команды с предыдущей такой же).
Кстати сказать, установленный нами модуль проверяет выполнение рекомендаций PEP8 в предложенной ему программе на Python:
$ echo -e "import os, sys" > o.py $ echo -e "print(os,sys)" >> o.py $ python3 -m pep8 o.py $ python3 o.py
В полученной программе из двух строк модуль pep8 нашёл два недочёта, хотя сама программа работает без ошибок.
Посмотреть информацию о модуле можно командой pip show (не путать с peep show!), а ключ "-f" вдобавок покажет, из каких файлов модуль состоит:
$ pip3 show pep8 -f --- Metadata-Version: 2.0 Name: pep8 Version: 1.6.2 Summary: Python style guide checker Home-page: http://pep8.readthedocs.org/ Author: Johann C. Rocholl Author-email: johann@rocholl.net License: Expat license Location: /home/altlinux/.local/lib/python3.3/site-packages Requires: Files: ../../../bin/pep8 __pycache__/pep8.cpython-33.pyc pep8-1.6.2.dist-info/DESCRIPTION.rst pep8-1.6.2.dist-info/METADATA pep8-1.6.2.dist-info/RECORD pep8-1.6.2.dist-info/WHEEL pep8-1.6.2.dist-info/entry_points.txt pep8-1.6.2.dist-info/metadata.json pep8-1.6.2.dist-info/namespace_packages.txt pep8-1.6.2.dist-info/top_level.txt pep8.py
Оказывается, вместе с пакетом приехал и запускаемый файл, который лежит в каталоге /home/altlinux/.local/lib/python3.3/site-packages/../../../bin/, то есть в подкаталоге .local/bin домашнего каталога (напоминаем, что в linux домашний каталог и его подкаталоги — единственное место, где пользователь может хранить файлы).
Наконец, для удаления модуля достаточно выполнить команду pip uninstall <имя_модуля>.