Bug 40773

Summary: В пакете python3-module-pip много забандленых модулей
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: python3-module-pipAssignee: Stanislav Levin <slev>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, cas, cow, evg, george, grenka, imz, kotopesutility, lav, nbr, qa_viy, rider, sem, shaba, sin, slev, toni, vitty, viy
Version: unstable   
Hardware: x86_64   
OS: Linux   
URL: https://pip.pypa.io/en/stable/development/vendoring-policy/

Description Vitaly Lipatov 2021-08-17 23:18:41 MSK
pip носит с собой кучу модулей, которые у нас должны быть обеспечены внешними зависимостями.
По идее это всё должно быть удалено:

$ cat src/pip/_vendor/vendor.txt 
appdirs==1.4.4
CacheControl==0.12.6
colorama==0.4.4
distlib==0.3.2
distro==1.5.0
html5lib==1.1
msgpack==1.0.2
packaging==21.0
pep517==0.11.0
progress==1.5
pyparsing==2.4.7
requests==2.26.0
    certifi==2021.05.30
    chardet==4.0.0
    idna==3.2
    urllib3==1.26.6
resolvelib==0.7.1
setuptools==44.0.0
six==1.16.0
tenacity==8.0.1
tomli==1.0.3
webencodings==0.5.1
Comment 1 Vitaly Lipatov 2021-08-17 23:22:07 MSK
Чтобы не делать так:

* Fri May 07 2021 Stanislav Levin <slev@altlinux.org> 21.1.1-alt1
- 21.0.1 -> 21.1.1
  (Updated bundled urllib3 1.26.2 -> 1.26.4 to fix CVE-2021-28363).
Comment 2 Stanislav Levin 2021-08-18 11:16:57 MSK
TL;DR По причинам, указанными вами же по ссылке, пока что это не реализовано.

Для применения pip вне виртуального окружения Python unbundle возможен. Эта же процедура спотыкается об virtualenv или venv(в стандартной установке Python pip поставляется в числе seed пакетов (смотреть ensurepip), со всеми сбандленными зависимостями), это не работает и не будет работать.

Bundle в Python допустим и в некоторых ситуациях необходим.
Comment 3 Vitaly Lipatov 2021-08-18 13:37:53 MSK
(Ответ для Stanislav Levin на комментарий #2)
> TL;DR По причинам, указанными вами же по ссылке, пока что это не реализовано.
> 
> Для применения pip вне виртуального окружения Python unbundle возможен. Эта
> же процедура спотыкается об virtualenv или venv(в стандартной установке
Резонно, как-то я из статьи не понял, что главное его применение  в virtualenv.
А что, разве внутри virtualenv используется pip из системы? Я думал, там в какой-то момент используется всё внутреннее.
Comment 4 Stanislav Levin 2021-08-18 14:46:29 MSK
Чтобы забутстрапить любое Python виртуальное окружение используются 3 seed Python пакета: setuptools, wheel и pip.

В PyPI версии virtualenv используются забандленные seed пакеты.
virtualenv предоставляет полумеры для их замены на, например, системные:
https://virtualenv.pypa.io/en/latest/user_guide.html#embed-wheels-for-distributions

С версии 20.4.4-alt1 Альтовый virtualenv перешел на системные "колеса" для seed пакетов. То есть, удалив bundle пакеты pip и собрав wheel для pip, pip внутри виртуального окружения просто не поймет, где ему искать свои зависимости.