Мне для одной задумки сперва разбитую задачу нужно проработать один шажок в лице, каким образом на 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.