Spec-Zone.ru › Python 3.11

Установка модулей Python (старая версия)

Автор

Greg Ward

Примечание

Весь пакет distutils устарел и будет удалён в Python 3.12. Данная документация сохраняется только для справки и будет удалена вместе с пакетом. Для получения дополнительной информации см. запись Что нового.

См. также

Установка модулей Python

Документация по установке модулей. Для обычного использования Python вы, скорее всего, захотите обратиться к этому документу, а не к этому.

Примечание

Данный документ сохраняется только до тех пор, пока документация setuptools по адресу https://setuptools.readthedocs.io/en/latest/setuptools.html самостоятельно не охватывает всю необходимую информацию, которая сейчас здесь включена.

Примечание

Это руководство охватывает только базовые инструменты для создания и распространения расширений, которые предоставляются в этой версии Python. Инструменты сторонних разработчиков предлагают более простые в использовании и более безопасные альтернативы. Обратитесь к разделу с рекомендациями в руководстве по использованию пакетов Python для получения дополнительной информации.

Введение

В Python 2.0 в стандартную библиотеку был добавлен API distutils. Это предоставило системным администраторам Linux-дистрибутивов стандартный способ преобразования проектов Python в пакеты Linux-дистрибутивов и системным администраторам – стандартный способ их непосредственной установки на целевые системы.

За много лет с момента выпуска Python 2.0 тесная связь системы сборки и установщика пакетов с циклом выпуска среды выполнения языка оказалась проблематичной, и теперь рекомендуется, чтобы проекты использовали установщик пакетов pip и систему сборки setuptools вместо непосредственного использования distutils.

Для получения более подробной информации см. Установка модулей Python и Распространение модулей Python.

Эта устаревшая документация сохраняется только до тех пор, пока мы не убедимся, что документация setuptools охватывает всё необходимое.

Распределения исходного кода, основанные на Distutils

Если вы загружаете дистрибутив модуля исходного кода, вы можете быстро понять, был ли он упакован и распространён стандартным способом, т.е. с использованием Distutils. Во-первых, имя и номер версии дистрибутива будут ярко выделены в имени загружаемого архива, например, foo-1.0.tar.gz или widget-0.9.7.zip. Далее, архив будет распакован в аналогичную папку: foo-1.0 или widget-0.9.7. Кроме того, дистрибутив будет содержать скрипт setup setup.py и файл с именем README.txt или, возможно, просто README, в котором будет объяснено, что сборка и установка дистрибутива модуля – это просто вопрос выполнения одной команды из терминала:

python setup.py install

Для Windows эту команду следует выполнить из окна командной строки (Пуск ‣ Стандартные):

setup.py install

Если всё это верно, то вы уже знаете, как собрать и установить загруженные модули: Выполните команду выше. Если вам не нужно устанавливать вещи нестандартным образом или настраивать процесс сборки, вам не нужно это руководство. Или, другими словами, команда выше – всё, что вам нужно из этого руководства.

Стандартная сборка и установка

Как описано в разделе Распределения исходного кода на основе Distutils, сборка и установка распределения модуля с использованием Distutils обычно выполняется одной простой командой в терминале:

python setup.py install

Различия платформ

Вы всегда должны запускать команду setup из корневой директории распределения, т.е. из верхнего уровня поддиректории, в которую распаковывается исходное распределение модуля. Например, если вы только что скачали исходное распределение модуля foo-1.0.tar.gz на систему Unix, то обычно нужно сделать следующее:

gunzip -c foo-1.0.tar.gz | tar xf -    # unpacks into directory foo-1.0
cd foo-1.0
python setup.py install

В Windows вы, скорее всего, скачали бы foo-1.0.zip. Если вы скачали архивный файл в C:\Temp, то он распакуется в C:\Temp\foo-1.0; вы можете использовать программу для работы с архивами с графическим интерфейсом (например, WinZip) или инструмент командной строки (такой как unzip или pkunzip) для распаковки архива. Затем откройте окно командной строки и выполните:

cd c:\Temp\foo-1.0
python setup.py install

Разбиение задачи

Запуск setup.py install собирает и устанавливает все модули за один проход. Если вы предпочитаете работать поэтапно (особенно полезно, если вы хотите настроить процесс сборки или если возникли проблемы), вы можете использовать скрипт setup, чтобы выполнять действия по одному. Это особенно полезно, когда сборку и установку будут выполнять разные пользователи — например, вы можете собрать распределение модуля и передать его системному администратору для установки (или сделать это самостоятельно, используя права суперпользователя).

Например, вы можете собрать все в один шаг, а затем установить всё во второй шаг, вызвав скрипт setup дважды:

python setup.py build
python setup.py install

Если вы сделаете это, вы заметите, что при запуске команды install сначала выполняется команда build, которая в данном случае быстро понимает, что ей нечего делать, так как всё в каталоге build является актуальным.

Вам, возможно, не часто понадобится эта возможность разбивать задачу, если вы просто устанавливаете модули, скачанные из сети, но она очень полезна для более сложных задач. Если вы начнете распространять свои собственные модули и расширения Python, вы будете часто запускать отдельные команды Distutils.

Как работает сборка

Как подразумевается выше, команда build отвечает за помещение файлов для установки в каталог сборки. По умолчанию это build в корневой директории распределения; если вы очень беспокоитесь о скорости или хотите сохранить исходное дерево неизменным, вы можете изменить каталог сборки с помощью опции --build-base. Например:

python setup.py build --build-base=/path/to/pybuild/foo-1.0

(Или вы можете сделать это постоянно с помощью директивы в вашем системном или личном файле конфигурации Distutils; см. раздел Файлы конфигурации Distutils.) Обычно это не требуется.

Стандартная структура дерева сборки такова:

--- build/ --- lib/
or
--- build/ --- lib.<plat>/
               temp.<plat>/

где <plat> представляет собой краткое описание текущей платформы ОС/аппаратного обеспечения и версии Python. Первый вариант с только каталогом lib используется для «чистых распределений модулей» — т.е. распределений модулей, которые содержат только модули на чистом Python. Если распределение модуля содержит какие-либо расширения (модули, написанные на C/C++), то используется второй вариант с двумя каталогами <plat>. В этом случае каталог temp.plat содержит временные файлы, созданные процессом компиляции/связывания, которые фактически не устанавливаются. В любом случае каталог lib (или lib.plat) содержит все модули Python (чистый Python и расширения), которые будут установлены.

В будущем будут добавлены другие каталоги для обработки скриптов Python, документации, бинарных исполняемых файлов и всего необходимого для установки модулей и приложений Python.

Как работает установка

После выполнения команды build (неважно, выполнили ли вы её явно, или команда install сделала это за вас), работа команды install относительно проста: ей нужно скопировать все содержимое каталога build/lib (или build/lib.plat) в выбранный каталог установки.

Если вы не выбираете каталог установки — т.е., если вы просто запускаете setup.py install — то команда install установит модули в стандартное место для сторонних модулей Python. Это местоположение зависит от платформы и от того, как вы построили/установили сам Python. В Unix (и macOS, который также основан на Unix), это также зависит от того, является ли устанавливаемое распределение модуля чистым Python или содержит расширения («не-чистый»):

Платформа

Стандартное место установки

Значение по умолчанию

Примечания

Unix (чистый)

prefix/lib/pythonX.Y/site-packages

/usr/local/lib/pythonX.Y/site-packages

(1)

Unix (нечистый)

exec-prefix/lib/pythonX.Y/site-packages

/usr/local/lib/pythonX.Y/site-packages

(1)

Windows

prefix\Lib\site-packages

C:\PythonXY\Lib\site-packages

(2)

Примечания:

  1. Большинство дистрибутивов Linux включают Python как стандартную часть системы, поэтому prefix и exec-prefix обычно оба /usr в Linux. Если вы самостоятельно собираете Python на Linux (или любой подобной Unix-системе), стандартные prefix и exec-prefix будут /usr/local.
  2. Стандартный каталог установки в Windows был C:\Program Files\Python в Python 1.6a1, 1.5.2 и более ранних версиях.

prefix и exec-prefix обозначают каталоги, в которые установлен Python и где он находит свои библиотеки во время выполнения. Они всегда одинаковы в Windows и очень часто одинаковы в Unix и macOS. Вы можете узнать, что ваша установка Python использует для prefix и exec-prefix, запустив Python в интерактивном режиме и набрав несколько простых команд. В Unix просто введите python в командной строке. В Windows выберите Пуск ‣ Программы ‣ Python X.Y ‣ Python (командная строка). После запуска интерпретатора вы можете вводить код Python в командной строке. Например, на моей Linux-системе я набираю три показанные ниже команды Python и получаю результат, показанный ниже, чтобы узнать свои prefix и exec-prefix:

Python 2.4 (#26, Aug  7 2004, 17:19:02)
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.prefix
'/usr'
>>> sys.exec_prefix
'/usr'

В этом документе используются и другие заполнитель: X.Y обозначает версию Python, например 3.2; abiflags будет заменено значением sys.abiflags или пустой строкой для платформ, которые не определяют флаги ABI; distname будет заменено именем устанавливаемого распределения модуля. Точки и регистр символов важны в путях; например, значение, использующее python3.2 в UNIX, обычно будет использовать Python32 в Windows.

Если вы не хотите устанавливать модули в стандартное местоположение или у вас нет прав на запись туда, ознакомьтесь с альтернативными методами установки в разделе Альтернативная установка. Если вы хотите более подробно настроить каталоги установки, см. раздел Настройка установки по настройке установки.

Альтернальная установка

Часто бывает необходимо или желательно устанавливать модули не в стандартное место для модулей сторонних библиотек Python. Например, на системе Unix у вас может не быть прав на запись в стандартный каталог модулей сторонних библиотек. Или вы можете захотеть протестировать модуль, прежде чем сделать его стандартной частью вашей локальной установки Python. Это особенно актуально при обновлении уже имеющегося дистрибутива: вы хотите убедиться, что ваш существующий набор скриптов по-прежнему работает с новой версией, прежде чем действительно выполнить обновление.

Команда Distutils install предназначена для того, чтобы сделать установку дистрибутивов модулей в альтернативное место простым и безболезненным. Основная идея заключается в том, что вы предоставляете базовый каталог для установки, и команда install выбирает набор каталогов (называемых схемой установки) в этом базовом каталоге, в который следует установить файлы. Подробности отличаются в зависимости от платформы, поэтому прочитайте раздел, относящийся к вам.

Обратите внимание, что различные альтернативные схемы установки взаимно исключают друг друга: вы можете указать --user или --home или --prefix и --exec-prefix или --install-base и --install-platbase, но нельзя смешивать из этих групп.

Альтернативная установка: схема пользователя

Эта схема предназначена для удобного решения для пользователей, у которых нет прав на запись в глобальный каталог site-packages или которые не хотят устанавливать в него. Она включается простым параметром:

python setup.py install --user

Файлы будут установлены в подкаталоги каталога site.USER_BASE (в дальнейшем записывается как userbase). Эта схема устанавливает чистые Python-модули и модули расширения в одном месте (также известном как site.USER_SITE). Вот значения для UNIX, включая macOS:

Тип файла

Каталог установки

модули

userbase/lib/pythonX.Y/site-packages

скрипты

userbase/bin

данные

userbase

заголовки C

userbase/include/pythonX.Yabiflags/distname

А вот значения, используемые в Windows:

Тип файла

Каталог установки

модули

userbase\PythonXY\site-packages

скрипты

userbase\PythonXY\Scripts

данные

userbase

заголовки C

userbase\PythonXY\Include{distname}

Преимущества использования этой схемы по сравнению с другими описанными ниже, заключается в том, что каталог site-packages пользователя в стандартных условиях всегда включён в sys.path (см. site для получения дополнительной информации), что означает, что после выполнения скрипта setup.py для завершения установки нет дополнительных шагов.

Команда build_ext также имеет параметр --user для добавления userbase/include в путь поиска компилятора для файлов заголовков и userbase/lib в путь поиска компилятора для библиотек, а также в путь поиска во время выполнения для общих C-библиотек (rpath).

Альтернативная установка: схема домашнего каталога

Идея «схемы домашнего каталога» заключается в том, что вы создаёте и поддерживаете личный набор Python-модулей. Название этой схемы происходит от идеи домашнего каталога в Unix, так как для пользователя Unix не является необычным, чтобы его домашний каталог имел структуру, подобную /usr/ или /usr/local/. Эту схему может использовать любой пользователь, независимо от операционной системы, для которой он устанавливает.

Установка нового дистрибутива модулей так же проста, как

python setup.py install --home=<dir>

где вы можете указать любой каталог, который вам нравится, для параметра --home. В Unix ленивые пользователи могут просто ввести тильду (~); команда install расширит её до вашего домашнего каталога:

python setup.py install --home=~

Чтобы Python находил дистрибутивы, установленные с помощью этой схемы, вам может потребоваться изменить путь поиска Python или отредактировать sitecustomize (см. site) для вызова site.addsitedir() или отредактировать sys.path.

Параметр --home определяет базовый каталог установки. Файлы устанавливаются в следующие каталоги в базовом каталоге установки:

Тип файла

Каталог установки

модули

home/lib/python

скрипты

home/bin

данные

home

заголовки C

home/include/python/distname

(Мысленно замените слеши на обратные слеши, если вы работаете в Windows.)

Альтернативная установка: Unix (схема префикса)

«Схема префикса» полезна, когда вы хотите использовать одну установку Python для выполнения сборки/установки (т.е. для выполнения скрипта настройки), но устанавливать модули в каталог модулей сторонних библиотек другой установки Python (или что-то, что выглядит как другая установка Python). Если это звучит несколько необычно, так оно и есть — поэтому схемы пользователя и домашнего каталога идут прежде. Однако, есть по крайней мере два известных случая, когда схема префикса будет полезна.

Во-первых, рассмотрим, что многие дистрибутивы Linux помещают Python в /usr, а не в более традиционную /usr/local. Это вполне уместно, поскольку в этих случаях Python является частью «системы», а не локальным дополнением. Однако, если вы устанавливаете Python-модули из исходного кода, вы, вероятно, хотите, чтобы они оказались в /usr/local/lib/python2.X, а не в /usr/lib/python2.X. Это можно сделать с помощью

/usr/bin/python setup.py install --prefix=/usr/local

Другая возможность — сетевая файловая система, где имя, используемое для записи в удалённый каталог, отличается от имени, используемого для чтения: например, интерпретатор Python, доступный как /usr/local/bin/python, может искать модули в /usr/local/lib/python2.X, но эти модули должны быть установлены, скажем, в /mnt/@server/export/lib/python2.X. Это можно сделать с помощью

/usr/local/bin/python setup.py install --prefix=/mnt/@server/export

В любом случае, параметр --prefix определяет базовый каталог установки, а параметр --exec-prefix определяет платформоспецифичный базовый каталог установки, который используется для платформоспецифичных файлов. (В настоящее время это означает только дистрибутивы модулей, не являющихся чистыми, но это может быть расширено до C-библиотек, двоичных исполняемых файлов и т.д.) Если --exec-prefix не указан, он по умолчанию устанавливается в --prefix. Файлы устанавливаются следующим образом:

Тип файла

Каталог установки

Python-модули

prefix/lib/pythonX.Y/site-packages

модули расширения

exec-prefix/lib/pythonX.Y/site-packages

скрипты

prefix/bin

данные

prefix

заголовки C

prefix/include/pythonX.Yabiflags/distname

Не требуется, чтобы --prefix или --exec-prefix фактически указывали на альтернативную установку Python; если указанные выше каталоги ещё не существуют, они создаются во время установки.

Кстати, истинная причина важности схемы префикса в том, что стандартная установка Unix использует схему префикса, но с --prefix и --exec-prefix, предоставленными самим Python, как sys.prefix и sys.exec_prefix. Таким образом, вы можете подумать, что вы никогда не будете использовать схему префикса, но каждый раз, когда вы запускаете python setup.py install без каких-либо других параметров, вы её используете.

Обратите внимание, что установка расширений в альтернативную установку Python не влияет на то, как эти расширения строятся: в частности, файлы заголовков Python (Python.h и аналогичные) установленные с помощью интерпретатора Python, используемого для запуска скрипта настройки, будут использоваться при компиляции расширений. Вы несёте ответственность за обеспечение того, чтобы интерпретатор, используемый для запуска установленных таким образом расширений, был совместим с интерпретатором, используемым для их построения. Лучший способ сделать это — обеспечить, чтобы два интерпретатора были одной и той же версией Python (возможно, разные сборки или возможно копии одной сборки). (Конечно, если ваши --prefix и --exec-prefix даже не указывают на альтернативную установку Python, это несущественно.)

Альтернальная установка: Windows (схема префикса)

В Windows нет понятия домашнего каталога пользователя, и поскольку стандартная установка Python в Windows проще, чем в Unix, опция --prefix традиционно использовалась для установки дополнительных пакетов в отдельных местах в Windows.

python setup.py install --prefix="\Temp\Python"

для установки модулей в каталог \Temp\Python на текущем диске.

База установки определяется опцией --prefix; опция --exec-prefix не поддерживается в Windows, что означает, что чистые модули Python и модули расширений устанавливаются в одно и то же место. Файлы устанавливаются следующим образом:

Тип файла

Директория установки

модули

prefix\Lib\site-packages

скрипты

prefix\Scripts

данные

prefix

C заголовки

prefix\Include{distname}

Настройка установки вручную

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

Чтобы создать схему настройки установки вручную, начните с одной из альтернативных схем и переопределите некоторые каталоги установки, используемые для различных типов файлов, используя следующие параметры:

Тип файла

Параметр переопределения

Модули Python

--install-purelib

модули расширений

--install-platlib

все модули

--install-lib

скрипты

--install-scripts

данные

--install-data

заголовки C

--install-headers

Эти параметры переопределения могут быть относительными, абсолютными или явно определены относительно одного из базовых каталогов установки. (Есть два базовых каталога установки, и обычно они одинаковы — они отличаются только при использовании схемы «префикс» Unix и при указании различных параметров --prefix и --exec-prefix; использование --install-lib переопределит вычисленные или заданные значения для --install-purelib и --install-platlib и рекомендуется для схем, не делающих различия между модулями Python и модулями расширений.)

Например, предположим, что вы устанавливаете дистрибутив модуля в домашний каталог под Unix — но хотите, чтобы скрипты находились в ~/scripts, а не в ~/bin. Как можно ожидать, вы можете переопределить этот каталог параметром --install-scripts; в этом случае наиболее разумно указать относительный путь, который будет интерпретирован относительно каталога базовой установки (в данном случае домашний каталог):

python setup.py install --home=~ --install-scripts=scripts

Другой пример для Unix: предположим, что ваша установка Python была построена и установлена с префиксом /usr/local/python, поэтому при стандартной установке скрипты окажутся в /usr/local/python/bin. Если вы хотите, чтобы они были в /usr/local/bin, вы должны указать этот абсолютный каталог для параметра --install-scripts:

python setup.py install --install-scripts=/usr/local/bin

(Это выполняет установку с использованием схемы «префикс», где префикс — это то, с чем был установлен ваш интерпретатор Python — /usr/local/python в данном случае.)

Если вы используете Python в Windows, возможно, вы захотите, чтобы сторонние модули находились в подкаталоге prefix, а не непосредственно в prefix. Это почти так же легко, как настройка каталога установки скриптов — просто нужно помнить, что существуют два типа модулей, которые нужно учитывать: модули Python и модули расширений, которые удобно контролировать одним параметром:

python setup.py install --install-lib=Site

Указанный каталог установки является относительным к prefix. Конечно, вы также должны убедиться, что этот каталог находится в пути поиска модулей Python, например, разместив файл .pth в каталоге сайта (см. site). См. раздел Изменение пути поиска Python, чтобы узнать, как изменить путь поиска Python.

Если вы хотите определить всю схему установки, вам нужно указать все параметры каталогов установки. Рекомендуемый способ сделать это — указать относительные пути; например, если вы хотите сохранить все файлы, связанные с модулями Python, в python в домашнем каталоге, и хотите отдельный каталог для каждой платформы, с которой вы используете свой домашний каталог, вы можете определить следующую схему установки:

python setup.py install --home=~ \
                        --install-purelib=python/lib \
                        --install-platlib=python/lib.$PLAT \
                        --install-scripts=python/scripts
                        --install-data=python/data

или, что эквивалентно,

python setup.py install --home=~/python \
                        --install-purelib=lib \
                        --install-platlib='lib.$PLAT' \
                        --install-scripts=scripts
                        --install-data=data

$PLAT (не обязательно) переменная среды — она будет расширена утилитой Distutils при разборе ваших параметров командной строки, так же как она делает это при разборе файла(ов) конфигурации.

Очевидно, указание всей схемы установки каждый раз при установке нового дистрибутива модулей было бы очень утомительно. Таким образом, вы можете поместить эти параметры в файл конфигурации Distutils (см. раздел Файлы конфигурации Distutils):

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data

или, что эквивалентно,

[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data

Обратите внимание, что эти два значения не эквивалентны, если вы укажете другой базовый каталог установки при запуске скрипта установки. Например,

python setup.py install --install-base=/tmp

в первом случае установит чистые модули в /tmp/python/lib, а во втором случае в /tmp/lib. (Во втором случае вам, вероятно, нужно указать базовый каталог установки /tmp/python.)

Вы, вероятно, заметили использование $HOME и $PLAT в примере файла конфигурации. Это переменные конфигурации Distutils, которые очень похожи на переменные среды. Фактически, вы можете использовать переменные среды в файлах конфигурации на платформах, которые поддерживают такое понятие, но Distutils дополнительно определяют несколько дополнительных переменных, которые могут отсутствовать в вашей среде, таких как $PLAT. (И, конечно же, на системах, которые не имеют переменных среды, таких как Mac OS 9, переменные конфигурации, предоставленные Distutils, являются единственными, которые вы можете использовать.) См. раздел Файлы конфигурации Distutils для получения подробной информации.

Примечание

При активации виртуальной среды (виртуальная среда) любые параметры, изменяющие путь установки, будут игнорироваться из всех файлов конфигурации distutils, чтобы избежать непреднамеренной установки проектов за пределами виртуальной среды.

Изменение пути поиска Python

Когда интерпретатор Python выполняет оператор import, он ищет как код Python, так и модули расширений по пути поиска. Значение по умолчанию для пути настраивается в двоичном файле Python при построении интерпретатора. Вы можете определить путь, импортировав модуль sys и выведя значение sys.path.

$ python
Python 2.2 (#11, Oct  3 2002, 13:31:27)
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
 '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
 '/usr/local/lib/python2.3/site-packages']
>>>

Пустая строка в sys.path представляет текущий рабочий каталог.

Ожидаемой конвенцией для локально установленных пакетов является размещение их в каталоге .../site-packages/, но вы можете установить модули Python в произвольный каталог. Например, в вашем сайте может быть соглашение о хранении всех программных обеспечений, связанных с веб-сервером, в /www. Дополнительные модули Python могут находиться в /www/python, и для их импорта этот каталог должен быть добавлен в sys.path. Есть несколько способов добавить каталог.

Самый удобный способ — добавить файл конфигурации пути в каталог, который уже находится на пути Python, обычно в каталог .../site-packages/. Файлы конфигурации пути имеют расширение .pth, и каждая строка должна содержать один путь, который будет добавлен к sys.path. (Так как новые пути добавляются к sys.path, модули в добавленных каталогах не будут переопределять стандартные модули. Это означает, что вы не можете использовать этот механизм для установки фиксированных версий стандартных модулей.)

Пути могут быть абсолютными или относительными, в этом случае они относительны к каталогу, содержащему файл .pth. См. документацию модуля site для получения дополнительной информации.

Несколько менее удобный способ — отредактировать файл site.py в стандартной библиотеке Python и изменить sys.path. site.py автоматически импортируется при запуске интерпретатора Python, если не указан флаг -S, чтобы подавить это поведение. Так что вы можете просто отредактировать файл site.py и добавить в него две строки:

import sys
sys.path.append('/www/python/')

Однако, если вы переустановите ту же малую версию Python (например, при обновлении с 2.2 до 2.2.2), файл site.py будет перезаписан стандартной версией. Вам нужно будет помнить, что он был изменён, и сохранить копию перед установкой.

Есть две переменные среды, которые могут изменить sys.path. PYTHONHOME устанавливает альтернативное значение для префикса установки Python. Например, если PYTHONHOME установлена как /www/python, путь поиска будет установлен как ['', '/www/python/lib/pythonX.Y/', '/www/python/lib/pythonX.Y/plat-linux2', ...].

Переменная PYTHONPATH может быть установлена в список путей, которые будут добавлены в начало sys.path. Например, если PYTHONPATH установлена как /www/python:/opt/py, путь поиска начнется с ['/www/python', '/opt/py']. (Обратите внимание, что каталоги должны существовать, чтобы их можно было добавить в sys.path; модуль site удаляет пути, которые не существуют.)

Наконец, sys.path — это обычный список Python, поэтому любое приложение Python может изменить его, добавив или удалив элементы.

Файлы конфигурации Distutils

Как упоминалось выше, вы можете использовать файлы конфигурации Distutils для записи личных или сайтовых предпочтений для любых параметров Distutils. То есть любой параметр любого командного интерфейса может быть сохранён в одном из двух или трёх (в зависимости от вашей платформы) файлов конфигурации, которые будут прочитаны перед разбором командной строки. Это означает, что файлы конфигурации будут переопределять значения по умолчанию, а командная строка, в свою очередь, переопределит файлы конфигурации. Кроме того, если применимы несколько файлов конфигурации, значения из «ранних» файлов переопределяются значениями из «поздних» файлов.

Расположение и имена файлов конфигурации

Имена и расположения файлов конфигурации незначительно различаются в зависимости от платформы. В Unix и macOS три файла конфигурации (в порядке их обработки) имеют вид:

Тип файла

Расположение и имя файла

Примечания

системный

prefix/lib/pythonver/distutils/distutils.cfg

(1)

личный

$HOME/.pydistutils.cfg

(2)

локальный

setup.cfg

(3)

А в Windows файлы конфигурации:

Тип файла

Расположение и имя файла

Примечания

системный

prefix\Lib\distutils\distutils.cfg

(4)

личный

%HOME%\pydistutils.cfg

(5)

локальный

setup.cfg

(3)

На всех платформах «личный» файл можно временно отключить, передав параметр --no-user-cfg.

Примечания:

  1. Строго говоря, системный файл конфигурации находится в каталоге, где установлены Distutils; в Python 1.6 и новее в Unix, как показано. Для Python 1.5.2 Distutils обычно устанавливаются в prefix/lib/python1.5/site-packages/distutils, поэтому системный файл конфигурации должен быть помещён туда в Python 1.5.2.
  2. В Unix, если переменная окружения HOME не определена, домашний каталог пользователя определяется с помощью функции getpwuid() из стандартного модуля pwd. Это выполняется функцией os.path.expanduser(), используемой Distutils.
  3. Т.е., в текущем каталоге (обычно местоположение скрипта setup).
  4. (См. также примечание (1).) В Python 1.6 и новее, предустановленный «префикс установки» Python — C:\Python, поэтому системный файл конфигурации обычно находится в C:\Python\Lib\distutils\distutils.cfg. В Python 1.5.2 предустановленным префиксом был C:\Program Files\Python, а Distutils не были частью стандартной библиотеки — поэтому системный файл конфигурации в стандартной установке Python 1.5.2 в Windows будет C:\Program Files\Python\distutils\distutils.cfg.
  5. В Windows, если переменная окружения HOME не определена, USERPROFILE, то HOMEDRIVE и HOMEPATH будут использоваться. Это выполняется функцией os.path.expanduser(), используемой Distutils.

Синтаксис файлов конфигурации

Все файлы конфигурации Distutils имеют одинаковый синтаксис. Файлы конфигурации сгруппированы в секции. Одна секция для каждой команды Distutils, плюс секция global для глобальных параметров, которые влияют на каждую команду. Каждая секция состоит из одной опции в строке, указанной как option=value.

Например, следующий файл конфигурации полностью устанавливает все команды по умолчанию в бесшумный режим:

[global]
verbose=0

Если он установлен как системный файл конфигурации, он повлияет на всю обработку любого дистрибутива модулей Python любым пользователем в данной системе. Если он установлен как ваш личный файл конфигурации (в системах, которые их поддерживают), он повлияет только на обработку дистрибутивов модулей вами. И если он используется как setup.cfg для конкретного дистрибутива модулей, он повлияет только на этот дистрибутив.

Вы можете переопределить каталог по умолчанию «базы сборки» и сделать, чтобы команды build* всегда принудительно пересобирали все файлы следующим образом:

[build]
build-base=blib
force=1

что соответствует аргументам командной строки

python setup.py build --build-base=blib --force

за исключением того, что включение команды build в командной строке означает, что данная команда будет выполнена. Включение конкретной команды в файлы конфигурации не имеет такого значения; это означает только, что если команда будет выполнена, параметры из файла конфигурации будут применены. (Или если будут выполнены другие команды, которые получают значения от него, они будут использовать значения из файла конфигурации.)

Вы можете узнать полный список параметров для любой команды, используя параметр --help, например:

python setup.py build --help

и вы можете узнать полный список глобальных параметров, используя --help без команды:

python setup.py --help

См. также раздел «Ссылки» в руководстве «Распространение модулей Python».

Создание расширений: советы и рекомендации

По возможности, Distutils пытается использовать информацию о конфигурации, предоставляемую интерпретатором Python, используемым для выполнения скрипта setup.py. Например, те же флаги компилятора и компоновщика, используемые для компиляции Python, также будут использоваться для компиляции расширений. Обычно это работает хорошо, но в сложных ситуациях это может быть неуместно. В этом разделе рассматривается, как переопределить обычное поведение Distutils.

Настройка флагов компилятора/компоновщика

Для компиляции расширения Python, написанного на C или C++, иногда требуется указать пользовательские флаги для компилятора и компоновщика, чтобы использовать определённую библиотеку или получить особый тип объектного кода. Это особенно актуально, если расширение не тестировалось на вашей платформе или если вы пытаетесь выполнить кросс-компиляцию Python.

В самом общем случае автор расширения мог предвидеть, что компиляция расширений будет сложной, и предоставил вам файл Setup для редактирования. Это, скорее всего, будет сделано только в том случае, если распределение модуля содержит много отдельных модулей расширения или если они часто требуют сложных наборов флагов компилятора для работы.

Файл Setup, если он присутствует, анализируется для получения списка расширений, которые нужно скомпилировать. Каждая строка в файле Setup описывает один модуль. Строки имеют следующий формат:

module ... [sourcefile ...] [cpparg ...] [library ...]

Давайте рассмотрим каждое из полей.

  • module — имя модуля расширения, подлежащего компиляции, и должно быть допустимым идентификатором Python. Вы не можете просто изменить его, чтобы переименовать модуль (требуются также правки исходного кода), поэтому это следует оставить без изменений.
  • sourcefile — всё, что, скорее всего, является исходным файлом, по крайней мере, судя по имени файла. Имена файлов, оканчивающиеся на .c, предполагаются написанными на C, имена файлов, оканчивающиеся на .C, .cc и .c++, предполагаются написанными на C++, а имена файлов, оканчивающиеся на .m или .mm, предполагаются написанными на Objective C.
  • cpparg — аргумент для препроцессора C и представляет собой всё, что начинается с -I, -D, -U или -C.
  • library — всё, что оканчивается на .a или начинается с -l, -L.

Если для определенной платформы на вашей платформе требуется специальная библиотека, вы можете добавить её, отредактировав файл Setup и запустив python setup.py build. Например, если модуль, определённый строкой

foo foomodule.c

должен быть связан с математической библиотекой libm.a на вашей платформе, просто добавьте -lm в строку:

foo foomodule.c -lm

Произвольные переключатели, предназначенные для компилятора или компоновщика, можно указать с помощью опций -Xcompiler arg и -Xlinker arg:

foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm

Следующая опция после -Xcompiler и -Xlinker будет добавлена к соответствующей командной строке, поэтому в приведенном выше примере компилятору будет передан параметр -o32, а компоновщику — -shared. Если для компилятора параметр требует аргумента, вам придётся указать несколько опций -Xcompiler; например, чтобы передать -x c++, файл Setup должен содержать -Xcompiler -x -Xcompiler c++.

Флаги компилятора также можно указать, установив переменную окружения CFLAGS. Если она установлена, содержимое CFLAGS будет добавлено к флагам компилятора, указанным в файле Setup.

Использование компиляторов, отличных от Microsoft, в Windows

Borland/CodeGear C++

В этом подразделе описываются необходимые шаги для использования Distutils с компилятором Borland C++ версии 5.5. Сначала необходимо знать, что формат объектных файлов Borland (OMF) отличается от формата, используемого версией Python, которую вы можете загрузить с веб-сайтов Python или ActiveState. (Python построен с помощью Microsoft Visual C++, который использует COFF в качестве формата объектных файлов.) По этой причине необходимо преобразовать библиотеку Python python25.lib в формат Borland. Вы можете сделать это следующим образом:

coff2omf python25.lib python25_bcpp.lib

Программа coff2omf поставляется с компилятором Borland. Файл python25.lib находится в каталоге Libs вашей установки Python. Если ваше расширение использует другие библиотеки (zlib, …), их тоже нужно преобразовать.

Преобразованные файлы должны находиться в тех же каталогах, что и обычные библиотеки.

Как Distutils удается использовать эти библиотеки с изменёнными именами? Если расширению требуется библиотека (например, foo), Distutils сначала проверяет, находит ли он библиотеку с суффиксом _bcpp (например, foo_bcpp.lib), а затем использует эту библиотеку. В случае, если такая специальная библиотека не найдена, он использует имя по умолчанию (foo.lib). 1

Чтобы позволить Distutils скомпилировать ваше расширение с Borland C++, теперь нужно ввести:

python setup.py build --compiler=bcpp

Если вы хотите использовать компилятор Borland C++ по умолчанию, вы можете указать это в вашем личном или системном конфигурационном файле для Distutils (см. раздел Конфигурационные файлы Distutils).

См. также

Компилятор C++Builder

Информация о бесплатном компиляторе C++ от Borland, включая ссылки на страницы загрузки.

Создание расширений Python с использованием бесплатного компилятора Borland

Документ, описывающий, как использовать бесплатный командный компилятор C++ Borland для построения Python.

GNU C / Cygwin / MinGW

В этом разделе описываются необходимые шаги для использования Distutils с компиляторами GNU C/C++ в их дистрибутивах Cygwin и MinGW. 2 Для интерпретатора Python, который был построен с помощью Cygwin, всё должно работать без каких-либо из следующих шагов.

Не все расширения могут быть построены с помощью MinGW или Cygwin, но многие могут. Расширения, которые, скорее всего, не будут работать, — это те, которые используют C++ или зависят от расширений Microsoft Visual C.

Чтобы позволить Distutils скомпилировать ваше расширение с помощью Cygwin, нужно ввести:

python setup.py build --compiler=cygwin

а для Cygwin в режиме без Cygwin 3 или для MinGW введите:

python setup.py build --compiler=mingw32

Если вы хотите использовать любой из этих вариантов/компиляторов по умолчанию, вы должны рассмотреть возможность записи этого в ваш личный или системный конфигурационный файл для Distutils (см. раздел Конфигурационные файлы Distutils).

Старые версии Python и MinGW

Следующие инструкции применимы только в том случае, если вы используете версию Python, младше 2.4.1, с MinGW, младше 3.0.0 (с binutils-2.13.90-20030111-1).

Эти компиляторы требуют некоторых специальных библиотек. Эта задача более сложна, чем для Borland C++, поскольку нет программы для преобразования библиотеки. Сначала необходимо создать список символов, которые экспортирует DLL Python. (Вы можете найти хорошую программу для этой задачи по адресу https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/).

pexports python25.dll >python25.def

Расположение установленной python25.dll будет зависеть от параметров установки, версии и языка Windows. При установке «только для меня» она появится в корне каталога установки. При общей установке она будет находиться в системном каталоге.

Затем можно создать из этой информации библиотеку импорта для gcc.

/cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a

Получившаяся библиотека должна быть помещена в тот же каталог, что и python25.lib. (Должен быть каталог libs в вашем каталоге установки Python.)

Если ваше расширение использует другие библиотеки (zlib, …), вам, возможно, придётся преобразовать их тоже. Преобразованные файлы должны находиться в тех же каталогах, что и обычные библиотеки.

См. также

Создание модулей Python на платформе MS Windows с MinGW

Информация о создании необходимых библиотек для среды MinGW.

Примечания

1

Это также означает, что вы можете заменить все существующие библиотеки COFF библиотеками OMF с теми же именами.

2

Проверьте https://www.sourceware.org/cygwin/ для получения дополнительной информации

3

Тогда у вас нет доступной эмуляции POSIX, но вам также не нужна cygwin1.dll.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/install/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API