lfs-ru/chapter08/python.xml

285 lines
14 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-system-Python" role="wrap">
<?dbhtml filename="Python.html"?>
<sect1info condition="script">
<productname>Python</productname>
<productnumber>&python-version;</productnumber>
<address>&python-url;</address>
</sect1info>
<title>Python-&python-version;</title>
<indexterm zone="ch-system-Python">
<primary sortas="a-Python">Python</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Пакет Python 3 содержит среду разработчика Python. Его можно использовать
для объектно-ориентированного программирования, написания скриптов, прототипирования
больших программ и разработка целых приложений. Python — это интерпретируемый язык
программирования.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&python-fin-sbu;</seg>
<seg>&python-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка пакета Python 3</title>
<para>Подготовьте Python к компиляции:</para>
<screen><userinput remap="configure">./configure --prefix=/usr \
--enable-shared \
--with-system-expat \
--enable-optimizations</userinput></screen>
<variablelist>
<title>Значение параметров настройки:</title>
<varlistentry>
<term><parameter>--with-system-expat</parameter></term>
<listitem>
<para>Этот параметр выполняет линковку с системной версией
<application>Expat</application>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--enable-optimizations</parameter></term>
<listitem>
<para>Этот параметр позволяет выполнить обширные, но отнимающие много времени,
действия по оптимизации. Интерпретатор собирается дважды; тесты, выполненные при
первой сборке, используются для улучшения финальной версии.</para>
<!-- This description was drawn from the README.rst file
in the Python-3.11.0 package. -->
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>Известно, что некоторые тесты <command>Python</command> иногда зависают на неопределенный
срок. Чтобы протестировать пакет, запустите набор тестов, установив 2-минутный лимит времени
для каждого тестового примера:</para>
<screen><userinput remap="test">make test TESTOPTS="--timeout 120"</userinput></screen>
<para>На медленной системе вам может потребоваться ещё увеличить ограничение по времени, и
1 SBU (измеряется при сборке Binutils - Проход 1 с использованием одного ядра ЦП) должно
быть достаточно. В процессе выполнения некоторых тестов бывают сбои, поэтому набор тестов
автоматически перезапускает неудачно завершённые тесты. Если сначала тест не пройден, но
пройден при повторном запуске, его следует считать пройденным.</para>
<para>Установите пакет:</para>
<screen><userinput remap="install">make install</userinput></screen>
<para>В некоторых местах книги, мы используем команду <command>pip3</command> для
установки программ и модулей Python 3 от имени пользователя
<systemitem class='username'>root</systemitem>. Это противоречит рекомендации
разработчиков Python: устанавливать пакеты в виртуальную среду или домашний каталог
обычного пользователя (путем запуска <command>pip3</command> от имени этого
пользователя). Поэтому всякий раз при использовании <command>pip3</command> от имени
пользователя <systemitem class='username'>root</systemitem> появляется многострочное
предупреждение.</para>
<para>Основная причина этой рекомендации — избежать конфликта с системным менеджером пакетов
(например, <command>dpkg</command>), но в LFS нет общесистемного менеджера пакетов,
так что это не проблема. Кроме того, <command>pip3</command> будет пытаться проверять
наличие новой версии при каждом запуске. Поскольку разрешение доменных имен в среде
chroot LFS еще не настроено, он не сможет проверить наличие новой версии и выдаст
предупреждение.</para>
<para>Как только мы загрузим систему LFS и настроим сетевое подключение,
<command>pip3</command> выдаст предупреждение, сообщающее пользователю
о необходимости обновить его с помощью предварительно собранного whl-файла в PyPI
(всякий раз, когда будет доступна новая версия). Но LFS считает <command>pip3</command>
частью Python3, поэтому его не следует обновлять отдельно. Кроме того, обновление
из whl-файла не соответствует цели проекта — собрать систему Linux из исходного
кода, поэтому предупреждение о новой версии <command>pip3</command> следует
игнорировать. По желанию, вы можете отключить все предупреждение, создав следующий
файл конфигурации:</para>
<screen><userinput remap="install">cat &gt; /etc/pip.conf &lt;&lt; EOF
<literal>[global]
2022-08-10 22:49:47 +03:00
root-user-action = ignore
disable-pip-version-check = true</literal>
2022-08-10 22:49:47 +03:00
EOF
</userinput></screen>
<!--
<screen><userinput remap="install">sed -e '/def warn_if_run_as_root/a\ return' \
-i /usr/lib/python3.10/site-packages/pip/_internal/cli/req_command.py
</userinput></screen>
2022-08-10 22:49:47 +03:00
-->
<important>
<para>
В LFS и BLFS мы собираем и устанавливаем модули Python с помощью команды
<command>pip3</command>. Убедитесь, что команда <command>pip3 install</command>
в обеих книгах запускаются от имени пользователя &root; (если только она не
для виртуальной среды Python). Запуск <command>pip3 install</command>
от имени пользователя без полномочий &root; может показаться нормальным, но
это приведет к тому, что установленный модуль будет недоступен для других
пользователей.
</para>
<para>
Команда <command>pip3 install</command> по умолчанию не приведёт к
автоматической переустановке уже установленного модуля. Чтобы использовать
команду <command>pip3 install</command> для обновления модуля (например, с
meson-0.61.3 до meson-0.62.0), добавьте параметр <parameter>--upgrade</parameter>
в командную строку. Если по какой-то причине необходимо понизить версию
модуля или переустановить ту же версию, используйте параметр
<parameter>--force-reinstall --no-deps</parameter>.
</para>
</important>
<para>По желанию установите предварительно отформатированную документацию:</para>
<screen><userinput remap="install">install -v -dm755 /usr/share/doc/python-&python-version;/html
tar --no-same-owner \
-xvf ../python-&python-version;-docs-html.tar.bz2
cp -R --no-preserve=mode python-&python-version;-docs-html/* \
/usr/share/doc/python-&python-version;/html</userinput></screen>
<variablelist>
<title>Значение команд установки документации:</title>
<varlistentry>
<term><option>--no-same-owner</option> (tar) и <option>--no-preserve=mode</option> (cp)</term>
<listitem>
<para>Параметры обеспечивают, что установленные файлы имеют корректные права и владельца
файлов. Использование <application>tar</application> без этих параметров приведет к
установке файлов с правами пользователя создавшего архив и файлы будут иметь ограниченные
разрешения.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="contents-python" role="content">
<title>Содержимое пакета Python 3</title>
<segmentedlist>
<segtitle>Установленные программы</segtitle>
<segtitle>Установленные библиотеки</segtitle>
2023-05-24 09:00:49 +03:00
<segtitle>Созданные каталоги</segtitle>
<seglistitem>
<seg>
2to3, idle3, pip3, pydoc3, python3 и python3-config
</seg>
<seg>
libpython&python-minor;.so и libpython3.so
</seg>
<seg>
/usr/include/python&python-minor;,
/usr/lib/python3 и
/usr/share/doc/python-&python-version;
</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="python-2to3">
<term><command>2to3</command></term>
<listitem>
<para>
программа на <application>Python</application>, которая читает файлы написанные
на <application>Python 2.x</application>, применяет к ним серию изменений и
переводит их в валидный код <application>Python 3.x</application>.
</para>
<indexterm zone="ch-system-Python">
<primary sortas="b-2to3">2to3</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="idle3">
<term><command>idle3</command></term>
<listitem>
<para>
скрипт-обертка, который открывает графический редактор с поддержкой
<application>Python</application>. Для запуска этого скрипта, перед
установкой Python необходимо установить <application>Tk</application>,
чтобы модуль Tkinter Python был собран.
</para>
<indexterm zone="ch-system-Python">
<primary sortas="b-idle3">idle3</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pip3">
<term><command>pip3</command></term>
<listitem>
<para>
Установщик пакетов для Python. Вы можете использовать pip для установки
пакетов из каталога PyPI (Python Package Index) и других источников.
</para>
<indexterm zone="ch-system-Python">
<primary sortas="b-pip3">pip3</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="pydoc3">
<term><command>pydoc3</command></term>
<listitem>
<para>
инструмент документации <application>Python</application>
</para>
<indexterm zone="ch-system-Python">
<primary sortas="b-pydoc3">pydoc3</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="python3">
<term><command>python3</command></term>
<listitem>
<para>
это интерпретатор для Python, интерпретируемый, интерактивный, объектно-ориентированный
язык программирования
</para>
<indexterm zone="ch-system-Python">
<primary sortas="b-python3">python3</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>