Python3: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «категория:devel Категория:Packaging == Python3 в Sisyphus == Python3 собран в Sisyphus параллельно с Python2 и буд...»)
 
Нет описания правки
 
(не показано 7 промежуточных версий 5 участников)
Строка 1: Строка 1:
[[категория:devel]]
[[категория:devel]]
[[Категория:Packaging]]
[[Категория:Packaging]]
 
{{Устарело}}
== Python3 в Sisyphus ==
== Python3 в Sisyphus ==
Python3 собран в Sisyphus параллельно с Python2 и будет так существовать достаточно длительное время (по полного исчезновения Python2, которое в обозримом будущем вряд ли случиться). Языки Python3 и Python2 отличаются синтаксисом, список различий доступен на http://docs.python.org/py3k/whatsnew/3.0.html
Python3 собран в Sisyphus параллельно с Python2 и будет так существовать достаточно длительное время (по полного исчезновения Python2, которое в обозримом будущем вряд ли случится). Языки Python3 и Python2 отличаются синтаксисом, список различий доступен на http://docs.python.org/py3k/whatsnew/3.0.html


== Упаковка модулей Python3 ==
== Упаковка модулей Python3 ==
Пример упаковки модуля Python3 из того же исходника, из которого пакуется модуль Python2 можно посмотреть тут: http://git.altlinux.org/people/vitty/packages/?p=python-module-pyinotify.git;a=blobdiff;f=python-inotify.spec;h=ae430437fd845b5b2f6e4bdfee1cd0fec2433efd;hp=e7ce7248c80122ca2a5d6d0caff4eb9addf0bb08;hb=d718aa362381a13aca7aaa30c491ac87a4e62181;hpb=03ef7c31960e761d7b2865c66f6b93265d42ad95
=== Примеры упаковки ===
Пример упаковки модуля Python3 из того же исходника, из которого пакуется модуль Python2 можно посмотреть [http://git.altlinux.org/people/vitty/packages/?p=python-module-pyinotify.git;a=blobdiff;f=python-inotify.spec;h=ae430437fd845b5b2f6e4bdfee1cd0fec2433efd;hp=e7ce7248c80122ca2a5d6d0caff4eb9addf0bb08;hb=d718aa362381a13aca7aaa30c491ac87a4e62181;hpb=03ef7c31960e761d7b2865c66f6b93265d42ad95 тут].


=== Используемые макросы ===
Макросы для сборки модулей python3 содержатся в пакете rpm-build-python3 и аналогичны тем, что используются у нас для python.
Макросы для сборки модулей python3 содержатся в пакете rpm-build-python3 и аналогичны тем, что используются у нас для python.


Специфика:
=== Пути ===
В настоящий момент всё, что лежит в /usr/lib{,64}/python3.x считается написанным на Python3, все остальные .py файлы воспринимаются как Python2.
Если хочется иметь Python3-файлы в других каталогах, то стоит использовать макрос %add_python3_path /path/to/dir/with/python3 (при этом .py-файлы будут компилироваться с помощью Python3, поиск зависимостей будет осуществляться с помощью Python3). Возможны случаи, когда захочется выполнить автоматическую генерацию Provides для модулей Python3, лежащих по нестандартному пути. В этом случае к предыдущему макросу потребуется добавить %add_python3_lib_path /path/to/dir/with/python3
 
=== Специфика ===
#При сборке модуля python3 из того же исходника, из которого собирается модуль python требуется оборачивать такую сборку в %if_with python3
#При сборке модуля python3 из того же исходника, из которого собирается модуль python требуется оборачивать такую сборку в %if_with python3
#Группа пакетов - Development/Python3
#Группа пакетов - Development/Python3
Строка 17: Строка 23:
#Скомпилированные .pyo/.pyc у python3 кладутся в специальный каталог __pycache__ в директории с исходником. Не забывайте их паковать.
#Скомпилированные .pyo/.pyc у python3 кладутся в специальный каталог __pycache__ в директории с исходником. Не забывайте их паковать.


При смене версии python3 потребуется полная пересборка. Если для сборки вам требуется бутстрап - оставляйте, пожалуйста соответствующие ручки вида %def_with, это сильно упрощает формирование задания на обновление. Для этих же целей, наверное, стоит автоматически навешивать какую-нибудь группу вида @python3 на все пакеты, из которых собралось что-то, требующее python3.*(*).
При смене версии python3 потребуется полная пересборка. Если для сборки вам требуется бутстрап оставляйте, пожалуйста соответствующие ручки вида %def_with, это сильно упрощает формирование задания на обновление. Для этих же целей, наверное, стоит автоматически навешивать какую-нибудь группу вида @python3 на все пакеты, из которых собралось что-то, требующее python3.*(*).


== Ошибки и пожелания ==
Ошибки и пожелания принимаются в багзиллу на пакеты python3/rpm-build-python3 или в личную почту vitty@
Ошибки и пожелания принимаются в багзиллу на пакеты python3/rpm-build-python3 или в личную почту vitty@
== Установка нескольких версий Python в одной ОС ==
Системный Python лежит по пути /usr/bin/ и запускается через python3.
Мы скомпилируем нашу версию Python в папку /usr/local/bin/
<source lang=bash>
wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz
tar zxvf Python-3.7.16.tgz
sudo cp -r Python-3.7.16 /usr/local/bin
cd /usr/local/bin/Python-3.7.16/
sudo apt-get install zlib-devel libssl-devel libsqlite3-devel libffi-devel
sudo apt-get install pip
sudo ./configure --prefix=/usr/local --with-ensurepip=install
sudo make
sudo make install
sudo make clean
sudo rm -rf /usr/local/bin/Python-3.7.16
# удаляем линки, чтобы они не пересекались с системным Python
cd /usr/local/bin/
sudo rm -f 2to3 idle3 pip3 pydoc3 python3 python3-config pyvenv
sudo rm -f /usr/local/lib/pkgconfig/python3.pc
</source>
Для работы Python версии 3.7.16 нужно запускать 2to3-3.7  idle3.7  pip3.7 pydoc3.7  python3.7  python3.7-config  python3.7m  python3.7m-config  pyvenv-3.7
Запуск отдельного pip для python 3.9 - pip либо pip3.9
Запуск отдельного pip для pyhton 3.7 - pip3.7
Создадим отдельное окружение и изолированно обновим pip:
<source lang=bash>
pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
cd ~
python3.7 -m venv venv
source venv/bin/activate
pip install -U pip
pip -V
# pip 23.1 from /home/iam/venv/lib/python3.7/site-packages/pip (python 3.7)
deactivate
pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
</source>
Обновим отдельно хостовый pip для каждой версии и проверим:
<source lang=bash>
pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
pip install -U pip
pip -V
# pip 23.1 from /home/iam/.local/lib/python3/site-packages/pip (python 3.9)
pip3.7 -V
# pip 22.0.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
pip3.7 install -U pip
pip3.7 -V
# pip 23.1 from /home/iam/.local/lib/python3.7/site-packages/pip (python 3.7)
</source>
Удаление установленного нами Python 3.7.16:
<source lang=bash>
cd /usr/local/bin/
sudo rm -f 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7
sudo rm -rf /usr/local/include/python3.7m/
sudo rm -f /usr/local/lib/pkgconfig/python-3.7.pc
sudo rm -f /usr/local/lib/pkgconfig/python-3.7m.pc
sudo rm -f /usr/local/lib/pkgconfig/python3.pc
sudo rm -rf /usr/local/lib/python3.7
sudo rm -f /usr/local/lib/libpython3.7m.a
sudo rm -f /usr/local/share/man/man1/python3.1
sudo rm -f /usr/local/share/man/man1/python3.7.1
</source>

Текущая версия от 13:47, 21 декабря 2023

48px-Mail-mark-junk red.svg.png
Эта статья конкретно протухла.
Статья уже не подходит под современные реалии, под современные версии Альта или сломана совсем. Возможно, её уже не доработать и не поместить в архив.


Python3 в Sisyphus

Python3 собран в Sisyphus параллельно с Python2 и будет так существовать достаточно длительное время (по полного исчезновения Python2, которое в обозримом будущем вряд ли случится). Языки Python3 и Python2 отличаются синтаксисом, список различий доступен на http://docs.python.org/py3k/whatsnew/3.0.html

Упаковка модулей Python3

Примеры упаковки

Пример упаковки модуля Python3 из того же исходника, из которого пакуется модуль Python2 можно посмотреть тут.

Используемые макросы

Макросы для сборки модулей python3 содержатся в пакете rpm-build-python3 и аналогичны тем, что используются у нас для python.

Пути

В настоящий момент всё, что лежит в /usr/lib{,64}/python3.x считается написанным на Python3, все остальные .py файлы воспринимаются как Python2. Если хочется иметь Python3-файлы в других каталогах, то стоит использовать макрос %add_python3_path /path/to/dir/with/python3 (при этом .py-файлы будут компилироваться с помощью Python3, поиск зависимостей будет осуществляться с помощью Python3). Возможны случаи, когда захочется выполнить автоматическую генерацию Provides для модулей Python3, лежащих по нестандартному пути. В этом случае к предыдущему макросу потребуется добавить %add_python3_lib_path /path/to/dir/with/python3

Специфика

  1. При сборке модуля python3 из того же исходника, из которого собирается модуль python требуется оборачивать такую сборку в %if_with python3
  2. Группа пакетов - Development/Python3
  3. Python3/rpm-build-python3 - не базовая система, для использования макросов нужно писать BuildRequires(pre): rpm-build-python3
  4. Автоматический поиск Requires/Provides работает только для %python3_sitelibdir{-noarch}. Возможно, стоит добавить механизм для явного указания других путей (с исключением поиска там зависимостей с помощью python2), я подумаю. В отличие от python зависимости на python3-base генерируются явно (к примеру, "python3.2(os)").
  5. Скомпилированные .pyo/.pyc у python3 кладутся в специальный каталог __pycache__ в директории с исходником. Не забывайте их паковать.

При смене версии python3 потребуется полная пересборка. Если для сборки вам требуется бутстрап — оставляйте, пожалуйста соответствующие ручки вида %def_with, это сильно упрощает формирование задания на обновление. Для этих же целей, наверное, стоит автоматически навешивать какую-нибудь группу вида @python3 на все пакеты, из которых собралось что-то, требующее python3.*(*).

Ошибки и пожелания

Ошибки и пожелания принимаются в багзиллу на пакеты python3/rpm-build-python3 или в личную почту vitty@

Установка нескольких версий Python в одной ОС

Системный Python лежит по пути /usr/bin/ и запускается через python3. Мы скомпилируем нашу версию Python в папку /usr/local/bin/

wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz
tar zxvf Python-3.7.16.tgz
sudo cp -r Python-3.7.16 /usr/local/bin
cd /usr/local/bin/Python-3.7.16/
sudo apt-get install zlib-devel libssl-devel libsqlite3-devel libffi-devel
sudo apt-get install pip
sudo ./configure --prefix=/usr/local --with-ensurepip=install
sudo make
sudo make install
sudo make clean
sudo rm -rf /usr/local/bin/Python-3.7.16

# удаляем линки, чтобы они не пересекались с системным Python
cd /usr/local/bin/
sudo rm -f 2to3 idle3 pip3 pydoc3 python3 python3-config pyvenv
sudo rm -f /usr/local/lib/pkgconfig/python3.pc


Для работы Python версии 3.7.16 нужно запускать 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7

Запуск отдельного pip для python 3.9 - pip либо pip3.9

Запуск отдельного pip для pyhton 3.7 - pip3.7

Создадим отдельное окружение и изолированно обновим pip:

pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
cd ~
python3.7 -m venv venv
source venv/bin/activate
pip install -U pip
pip -V
# pip 23.1 from /home/iam/venv/lib/python3.7/site-packages/pip (python 3.7)
deactivate
pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)

Обновим отдельно хостовый pip для каждой версии и проверим:

pip -V
# pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
pip install -U pip
pip -V
# pip 23.1 from /home/iam/.local/lib/python3/site-packages/pip (python 3.9)

pip3.7 -V
# pip 22.0.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
pip3.7 install -U pip
pip3.7 -V
# pip 23.1 from /home/iam/.local/lib/python3.7/site-packages/pip (python 3.7)

Удаление установленного нами Python 3.7.16:

cd /usr/local/bin/
sudo rm -f 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7

sudo rm -rf /usr/local/include/python3.7m/
sudo rm -f /usr/local/lib/pkgconfig/python-3.7.pc
sudo rm -f /usr/local/lib/pkgconfig/python-3.7m.pc
sudo rm -f /usr/local/lib/pkgconfig/python3.pc
sudo rm -rf /usr/local/lib/python3.7
sudo rm -f /usr/local/lib/libpython3.7m.a
sudo rm -f /usr/local/share/man/man1/python3.1
sudo rm -f /usr/local/share/man/man1/python3.7.1