Мне для одной задумки сперва разбитую задачу нужно проработать один шажок в лице, каким образом на Ubuntu 22.04 Server (система развернута на текущую дату, а именно 04.07.2025) устанавливается Python 3.12 от и до, как создавать виртуальное окружение, и как внутри него устанавливать библиотеки.

Все ниже указанное тестируется для LXC контейнера шаблона: Ubuntu-22.04-standard_22.04-1_amd64.tar.zst

Шаг №1: Обновляю систему в рамках текущего релиза на до самого актуального состояния:

root@srv-test:~# nano /etc/update-manager/release-upgrades

[DEFAULT]

Prompt=never

root@srv-test:~# rm -Rf /var/lib/apt/lists

root@srv-test:~# apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get -y autoremove

root@srv-test:~# reboot

root@srv-test:~# uname -a && lsb_release -a

Linux srv-test 5.15.104-1-pve #1 SMP PVE 5.15.104-1 (2023-03-29T15:51Z) x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 22.04.5 LTS

Release:        22.04

Codename:       jammy

root@srv-test:~#

Шаг №2: Устанавливаю необходимые зависимости:

root@srv-test:~# sudo apt install -y software-properties-common

Шаг №3: Добавляю репозитарий:

root@srv-test:~# sudo add-apt-repository ppa:deadsnakes/ppa

или

root@srv-test:~# cat /etc/apt/sources.list.d/deadsnakes-ubuntu-ppa-jammy.list

deb https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu/ jammy main

# deb-src https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu/ jammy main

root@srv-test:~#

root@srv-test:~# apt-get update

Шаг №4: Перехожу к установке Python3.12 из добавленного выше репозитария:

root@srv-test:~# sudo apt-get install -y python3.12 python3.12-dev python3.12-venv

Шаг №5: Делаю по дефолту установленную версию Python3.12:

root@srv-test:~# sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 0

update-alternatives: using /usr/bin/python3.12 to provide /usr/bin/python3 (python3) in auto mode

root@srv-test:~# sudo update-alternatives --config python3

There is only one alternative in link group python3 (providing /usr/bin/python3): /usr/bin/python3.12

Nothing to configure.

root@srv-test:~#

Шаг №6: Устанавливаю pipэто пакетный менеджер для Python, используемый для установки и управления библиотеками:

root@srv-test:~# sudo apt-get install -y curl

root@srv-test:~# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100 2225k  100 2225k    0     0  2424k      0 --:--:-- --:--:-- --:--:-- 2424k

root@srv-test:~#

root@srv-test:~# python3.12 get-pip.py

Collecting pip

  Downloading pip-25.1.1-py3-none-any.whl.metadata (3.6 kB)

Downloading pip-25.1.1-py3-none-any.whl (1.8 MB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 5.2 MB/s eta 0:00:00

Installing collected packages: pip

Successfully installed pip-25.1.1

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.

root@srv-test:~#

root@srv-test:~# pip3 -V

pip 25.1.1 from /usr/local/lib/python3.12/dist-packages/pip (python 3.12)

Шаг №7: Создаем виртуальное окружение и активируем виртуальное окружение:

На заметку: Если при создании виртуального окружения вы получаете следующее, то значит в системе не установлен пакет python3.12-venv

root@srv-test:~# python3.12 -m venv .

Error: Command '['/root/bin/python3.12', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

root@srv-test:~#

root@srv-test:~# python3.12 -m venv . – это мы в корне создаем виртуальное окружение

root@srv-test:~# ls -al

total 2276

drwx------  8 root root    4096 Jul  4 06:33 .

drwxr-xr-x 18 root root    4096 Jul  4 06:28 ..

-rw-------  1 root root     683 Jul  4 06:28 .bash_history

-rw-r--r--  1 root root    3106 Oct 15  2021 .bashrc

drwx------  3 root root    4096 Jul  4 06:32 .cache

drwx------  3 root root    4096 Jul  4 06:29 .launchpadlib

drwxr-xr-x  3 root root    4096 Dec 24  2024 .local

-rw-r--r--  1 root root     161 Jul  9  2019 .profile

drwxr-xr-x  2 root root    4096 Jul  4 06:33 bin

-rw-r--r--  1 root root 2279307 Jul  4 06:31 get-pip.py

drwxr-xr-x  3 root root    4096 Jul  4 06:33 include

drwxr-xr-x  3 root root    4096 Jul  4 06:33 lib

lrwxrwxrwx  1 root root       3 Jul  4 06:33 lib64 -> lib

-rw-r--r--  1 root root     148 Jul  4 06:33 pyvenv.cfg

root@srv-test:~# source bin/activate

((root) ) root@srv-test:~# pwd

/root

((root) ) root@srv-test:~#

Установим в виртуальное окружение к примеру библиотеку requests:

((root) ) root@srv-test:~# pip install requests

Collecting requests

  Downloading requests-2.32.4-py3-none-any.whl.metadata (4.9 kB)

Collecting charset_normalizer<4,>=2 (from requests)

  Downloading charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)

Collecting idna<4,>=2.5 (from requests)

  Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)

Collecting urllib3<3,>=1.21.1 (from requests)

  Downloading urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)

Collecting certifi>=2017.4.17 (from requests)

  Downloading certifi-2025.6.15-py3-none-any.whl.metadata (2.4 kB)

Downloading requests-2.32.4-py3-none-any.whl (64 kB)

Downloading certifi-2025.6.15-py3-none-any.whl (157 kB)

Downloading charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (148 kB)

Downloading idna-3.10-py3-none-any.whl (70 kB)

Downloading urllib3-2.5.0-py3-none-any.whl (129 kB)

Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests

Successfully installed certifi-2025.6.15 charset_normalizer-3.4.2 idna-3.10 requests-2.32.4 urllib3-2.5.0

[notice] A new release of pip is available: 25.0.1 -> 25.1.1

[notice] To update, run: pip install --upgrade pip

((root) ) root@srv-test:~#

Видим, что мастер рекомендует обновить утилиту pip, обновляем:

((root) ) root@srv-test:~# pip install --upgrade pip

Requirement already satisfied: pip in ./lib/python3.12/site-packages (25.0.1)

Collecting pip

  Using cached pip-25.1.1-py3-none-any.whl.metadata (3.6 kB)

Using cached pip-25.1.1-py3-none-any.whl (1.8 MB)

Installing collected packages: pip

  Attempting uninstall: pip

    Found existing installation: pip 25.0.1

    Uninstalling pip-25.0.1:

      Successfully uninstalled pip-25.0.1

Successfully installed pip-25.1.1

((root) ) root@srv-test:~#

Отобразить список установленных библиотек в виртуальном окружении:

((root) ) root@srv-test:~# pip list

Package            Version

------------------ ---------

certifi            2025.6.15

charset-normalizer 3.4.2

idna               3.10

pip                25.1.1

requests           2.32.4

urllib3            2.5.0

((root) ) root@srv-test:~#

Чтобы удалить библиотеку из списка выше виртуального окружения:

((root) ) root@srv-test:~# pip uninstall requests

Found existing installation: requests 2.32.4

Uninstalling requests-2.32.4:

  Would remove:

    /root/lib/python3.12/site-packages/requests-2.32.4.dist-info/*

    /root/lib/python3.12/site-packages/requests/*

Proceed (Y/n)? y

  Successfully uninstalled requests-2.32.4

((root) ) root@srv-test:~#

Шаг №8: Если нужно в виртуальном окружении установить определенный набор библиотек можно создать файл requirements.txt (с именами и версиями пакетов.), в котором указываем все необходимые зависимости, и после устанавливаем их командой:

((root) ) root@srv-test:~#

((root) ) root@srv-test:~# nano requirements.txt

numpy==2.3.1

((root) ) root@srv-test:~# pip install -r requirements.txt

Collecting numpy==2.3.1 (from -r requirements.txt (line 1))

  Downloading numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (62 kB)

Downloading numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl (16.6 MB)

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.6/16.6 MB 5.3 MB/s eta 0:00:00

Installing collected packages: numpy

Successfully installed numpy-2.3.1

((root) ) root@srv-test:~#

((root) ) root@srv-test:~# pip list

Package            Version

------------------ ---------

certifi            2025.6.15

charset-normalizer 3.4.2

idna               3.10

numpy              2.3.1

pip                25.1.1

urllib3            2.5.0

((root) ) root@srv-test:~#

Шаг №9: Устанавливаем библиотеку поиска:

((root) ) root@srv-test:~# pip install pip_search

((root) ) root@srv-test:~# pip_search numpy

Traceback (most recent call last):

  File "/root/bin/pip_search", line 8, in <module>

    sys.exit(main())

             ^^^^^^

  File "/root/lib/python3.12/site-packages/pip_search/__main__.py", line 65, in main

    for package in result:

                   ^^^^^^

  File "/root/lib/python3.12/site-packages/pip_search/pip_search.py", line 81, in search

    base, hash, hmac, expires, token = pattern.findall(r.text)[0]

                                       ~~~~~~~~~~~~~~~~~~~~~~~^^^

IndexError: list index out of range

((root) ) root@srv-test:~#

Странно, почему не работает поиск, смотрю справку может какой ключ нужно использовать:

((root) ) root@srv-test:~# pip_search

usage: pip_search [-h] [-s [{name,released}]] [--version] [--date_format [DATE_FORMAT]] [query ...]

Search for packages on PyPI

positional arguments:

  query                 terms to search pypi.org package repository

options:

  -h, --help            show this help message and exit

  -s [{name,released}], --sort [{name,released}]

                        sort results by package name or release date (default: name)

  --version             show program's version number and exit

  --date_format [DATE_FORMAT]

                        format for release date, (default: %d-%m-%Y)

((root) ) root@srv-test:~#

Да нет все правильно, видимо механизм поиска поменялся, правда моих познаний не хватает чтобы объяснить, что не так, буду искать как это дело поправить, ведь поиск то нужен:

((root) ) root@srv-test:~# pip search nump

ERROR: XMLRPC request failed [code: -32500]

RuntimeError: PyPI no longer supports 'pip search' (or XML-RPC search). Please use https://pypi.org/search (via a browser) instead. See https://warehouse.pypa.io/api-reference/xml-rpc.html#deprecated-methods for more information.

((root) ) root@srv-test:~#

На URL адресе https://pip.pypa.io/en/stable/ux-research-design/research-results/pip-search/ вычитал что функционал поиска деактивировали.

Шаг №10: По окончании работы в виртуальном окружении не забываем выйти из него:

((root) ) root@srv-test:~# deactivate

root@srv-test:~#

На заметку: Установку библиотек без виртуального окружение не производить дабы не засорять систему.

Шаг №11: Если что-то не знаете советую почитать справку на официальном сайте и по мере погружения составлять себе конспекты наработок дабы не зависеть ни от кого.

Пока на этом остановлюсь, главное то что меня интересовало я себе в виде заметки расписал, будет что-либо еще то дополню, как делаю всегда, ведь все заметки в первую очередь пишутся/составляются для меня.

На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.