Работа с модулями в Python

Материал из Xgu.ru

Перейти к: навигация, поиск
Короткий URL: python/modules

Про Python часто говорят, что это язык, который идёт с батарейками в комплекте. Это означает, что кроме собственно языка, вы получаете ещё множество библиотек, использующихся во всех случаях жизни.

Прежде всего для работы в таких областях:

  • Файловая система
  • Процессы
  • Дата и время
  • Случайные числа
  • Регулярные выражения
  • TCP/IP
  • XML
  • JSON

Импорт любого модуля выполняется командой import (она имеет несколько форм):

import os

Кроме собственно встроенной библиотеки языка, доступны ещё десятки тысяч пакетов к инсталляции из внешнего репозитория PyPI (38350 на конец 2013 года).

Первая десятка наиболее популярных модулей (по количеству загрузок):

1st 	distribute       35,957,324 	
2nd 	virtualenv       31,956,769 	
3rd 	setuptools       29,579,733 	
4th 	certifi          28,271,429
5th 	requests         28,090,908 	
6th 	boto             27,397,110 	
7th 	wincertstore     25,402,949 	
8th 	pip              23,449,879 	
9th 	six              21,289,715 	
10th 	pbr              20,756,750

Весь список:

Инсталляция внешнего модуля выполняется одной командой:

pip install

Лучше использовать так называемую виртуальную среду virtualenv, в этом случае пакет инсталлируется не глобально в систему, а в локальном каталоге, собственно в виртуальной среде, в которой вы работаете.

Содержание

[править] Вопросы и ответы

[править] Как посмотреть список загруженных модулей?

import types
def imports():
    for name, val in globals().items():
        if isinstance(val, types.ModuleType):
            yield val.__name__

или просто

sys.modules

Подробнее:

[править] Как загрузить модуль динамически?

module = __import__('module')


[править] Как посмотреть список доступных модулей?

   help('modules')

Или:

   pip freeze

Или:

   from pkgutil import iter_modules
   for module in iter_modules():
       ...

Ещё хорошая вещь: yolk.

[править] Как обновить существующие пакеты?

$ pip install pip-review
$ pip-review --local --interactive

Другие варианты: [1]

[править] Как использовать virtualenv?

При использовании virtualenv локально из исходников:

$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
$ tar xvfz virtualenv-X.X.tar.gz
$ cd virtualenv-X.X
$ python virtualenv.py myVE


[править] Как сделать virtualenv перемещаемым?

Использовать ключ --relocatable. Окружение становится перемещаемым. Минус. что нужно вызывать virtualenv после каждой инсталляции нового модуля.

Подробнее:

[править] Когда выполняешь тестирование, можно ли подменять функции или классы и подсовывать нужные результаты?

Да, можно. Есть несколько модулей для этого, например mocker.

Дополнительная информация:


[править] Как посмотреть список доступных модулей?

help('modules')

Если есть pip:

pip freeze


[править] Как посмотреть, какая версия пакета доступна для импорта?

>>> import pkg_resources
>>> pkg_resources.get_distribution("blogofile").version
'0.7.1'

Подробнее: [2].


[править] Как поднять локальный репозиторий eggs?

Для этого лучше всего использовать collective.eggproxy (англ.). После того как он поднимется, можно указывать локальный репозиторий например в pip и в easy_install.

easy_install -i http://localhost:8888/ -H "*localhost*" iw.fss
env/bin/pip install -v --index-url http://127.0.0.1:48888/ six

Или в конфигурационных файлах:

~/.pip/pip.conf

[global]
index-url = http://localhost:8888/

setuptools, ~/.pydistutils.cfg:

[easy_install]
index_url = http://localhost:8888/

buildout, buildout.cfg:

[buildout]
index = http://localhost:8888/


[править] Как перезагрузить уже загруженный модуль, если он был изменен в ходе работы программы?

import module1

#....
# Later on:

module1 = reload( module1 )

Подробнее: