По большей части это попытка взглянуть на упаковку / дистрибуцию, а не на механику import
. К сожалению, упаковка - это место, где Python предоставляет несколько способов сделать это. Я просто пытаюсь заставить мяч двигаться вперед, надеюсь, другие помогут заполнить то, что я пропустил, или укажут на ошибки.
Прежде всего, здесь есть некоторая грязная терминология. Каталог, содержащий файл __init__.py
, является пакетом. Тем не менее, большинство из того, о чем мы здесь говорим, это конкретные версии пакетов, опубликованные в PyPI, одном из его зеркал, или в системе управления пакетами, специфичной для поставщика, такой как Debian Apt, Redhat's Yum, Fink, Macports, Homebrew или ActiveState.
Эти опубликованные пакеты - это то, что люди пытаются называть «Распределениями», пытаясь использовать «Пакет» только в качестве языковой конструкции Python. Вы можете увидеть некоторые из этого использования в PEP-376 PEP-376 .
Теперь ваш список ключевых слов относится к нескольким различным аспектам экосистемы Python:
Поиск и публикация дистрибутивов Python:
- PyPI (он же магазин сыра)
- Зеркала PyPI
- Различные инструменты / системы управления пакетами: apt, yum, fink, macports, homebrew
- pypm (альтернатива ActiveState PyPI)
Выше перечислены все сервисы, которые предоставляют место для публикации дистрибутивов Python в различных форматах. Некоторые, такие как зеркала PyPI и репозитории apt / yum, могут быть запущены на вашем локальном компьютере или в сети вашей компании, но люди обычно используют официальные. Большинство, если не все, предоставляют инструмент (или несколько инструментов в случае PyPI) для поиска и загрузки дистрибутивов.
Библиотеки, используемые для создания и установки дистрибутивов:
setuptools
/ Распределить
distutils
Distutils - это стандартная инфраструктура, в которой пакеты Python компилируются и встраиваются в дистрибутивы. В distutils
есть тонна функциональности, но большинство людей просто знают:
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='gward@python.net',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
И в некоторой степени это большая часть того, что вам нужно. В предыдущих 9 строках кода у вас достаточно информации для установки чистого пакета Python, а также минимальных метаданных, необходимых для публикации этого пакета в дистрибутиве PyPI.
Setuptools предоставляет ловушки, необходимые для поддержки формата Egg, а также всех его функций и возможностей. Распространение является альтернативой Setuptools, которая добавляет некоторые функции, пытаясь быть в основном обратно совместимыми. Я верю, что Distribute будет включен в Python 3 как преемник Distutil from distutils.core import setup
.
И Setuptools, и Distribute предоставляют пользовательскую версию distutils
команды установки
это делает полезные вещи, такие как поддержка формата Egg.
Форматы распространения Python:
Дистрибутивы обычно предоставляются в виде исходных архивов (tarball или zipfile). Стандартный способ установки исходного дистрибутива - загрузить и распаковать архив, а затем запустить файл setup.py
внутри.
Например, следующее загрузит, соберет и установит библиотеку подсветки синтаксиса Pygments:
curl -O -G http://pypi.python.org/packages/source/P/Pygments/Pygments-1.4.tar.gz
tar -zxvf Pygments-1.4.tar.gz
cd Pygments-1.4
python setup.py build
sudo python setup.py install
Также вы можете скачать файл Egg и установить его. Обычно это достигается с помощью easy_install или pip:
sudo easy_install pygments
or
sudo pip install pygments
Яйца были вдохновлены Jarfiles Java, и у них есть довольно много функций, о которых вы должны прочитать здесь
Форматы пакетов Python:
- несжатых каталогов
- zipimport (сжатые zip-каталогами)
Обычный пакет python - это просто каталог, содержащий файл __init__.py
и произвольное количество дополнительных модулей или подпакетов. Python также поддерживает поиск и загрузку исходного кода в файлах * .zip, если они включены в PYTHONPATH
(sys.path
).
Установка пакетов Python:
easy_install
: оригинальный инструмент для установки яиц, зависит от setuptools
pip
: в настоящее время самый популярный способ установки пакетов Python. Аналогичен easy_install
, но более гибок и обладает некоторыми приятными функциями, такими как файлы требований, которые помогают документировать зависимости и воспроизводить развертывания.
pypm
, apt
, yum
, fink и т. Д.
Управление средой / Автоматическое развертывание:
bento
buildout
virtualenv
(и virtualenvwrapper
)
Вышеуказанные инструменты используются для автоматизации и управления зависимостями для проекта Python. По сути, они предоставляют вам инструменты для описания того, какие дистрибутивы требуются вашему приложению, и автоматизируют установку этих конкретных версий ваших зависимостей.
Расположение пакетов / дистрибутивов:
- сайт-пакеты
PYTHONPATH
- текущий рабочий каталог (зависит от вашей ОС и настроек среды)
По умолчанию при установке дистрибутива Python он помещается в каталог site-packages. Этот каталог обычно выглядит как /usr/lib/pythonX.Y/site-packages
.
Простой программный способ найти каталог вашего сайта-пакетов:
from distuils import sysconfig
print sysconfig.get_python_lib()
Способы изменения вашего PYTHONPATH:
Оператор импорта Python найдет только те пакеты, которые находятся в одном из каталогов, включенных в PYTHONPATH
.
Вы можете проверить и изменить свой путь из Python, выполнив:
import sys
print sys.path
sys.path.append("/home/myname/lib")
Кроме того, вы можете установить переменную окружения PYTHONPATH
так же, как любую другую переменную среды в вашей ОС, или вы можете использовать:
- .pth файлы: * .pth файлы, расположенные в каталогах, которые уже находятся в вашем
PYTHONPATH
, читаются, и каждая строка * .pth файла добавляется в ваш PYTHONPATH
. По сути, в любое время, когда вы копируете пакет в каталог на PYTHONPATH
, вы можете вместо этого создать mypackages.pth
. Подробнее о * .pth файлах: модуль сайта
- файлы яичных ссылок: внутренняя структура яиц питона они являются кроссплатформенной альтернативой символическим ссылкам. Создание файла ссылки на яйцо аналогично созданию файла pth.
site.py
модификации
Чтобы добавить вышеупомянутые /home/myname/lib
к пакетам сайта с файлом * .pth, вы должны создать файл * .pth. Название файла не имеет значения, но вы все равно должны выбрать что-нибудь разумное.
Давайте создадим myname.pth
:
# myname.pth
/home/myname/lib
Вот и все. Перетащите это в sysconfig.get_python_lib()
в вашей системе или в любой другой каталог в вашем PYTHONPATH
, и /home/myname/lib
будет добавлен в путь.