Работа с разными версиями python3 в AstraLinux CommonEdition

В AstraLinux изначально установлен python3.5. Версию 3.7 установил с помощью менеджера пакетов Synaptic.

Имеется простой код на языке python с библиотекой PyQt5:

from PyQt5 import QtWidgets
import sys

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.show()
sys.exit(app.exec_())

Если запустить файл с исходным кодом так: python3.5 test.py - всё работает. Если же я запускаю python3.7 test.py - в консоли выводится такая надпись: ImportError: cannot import name 'QtWidgets' from 'PyQt5' (/usr/lib/python3/dist-packages/PyQt5/init.py)

Как сделать так, чтобы версия python3.7 смогла увидеть установленные пакеты и библиотеки? Пробовал работу с командой update-alternatives, назначал приоритеты, но проблему это не решило.


Ответы (2 шт):

Автор решения: Pak Uula

Если вы установили более новый пайтон из пакетов, то соответствующий venv, скорее всего, называется python3.7-venv

С развёртыванием виртуального окружения есть одна тонкость. venv делает копию установки python, собранной саппортерами из дистрибутива. Но они всегда на несколько поколений позади актуальных версий. Поэтому перед практическим использованием venv необходимо обновить системные пакеты.

Я покажу на примере python-3.8, который стоит у меня в Ubuntu, но у вас последовательность шагов будет точно такой же.

  1. Создать виртуальное окружение: $ /usr/bin/python-3.8 -m venv ~/tmp/venv-3.8

  2. Активировать это окружение в текущем сеансе bash: $ source ~/tmp/venv-3.8/bin/activate

    По этой команде в текущем сеансе будут прописаны переменные окружения, указывающие на бинарники, библиотеки и пакеты в каталоге ~/tmp/venv-3.8/

  3. Для проверки: (venv-3.8) $ which python3 -> /home/user/tmp/venv-3.8/bin/python3

    Обратите внимание, что activate изменил строку приглашения в bash, добавив в неё указание, что в текущем сеансе активно виртуальное окружение.

  4. Первым делом нужно обновить pip и setuptools:

    (venv-3.8) $ pip3 install pip setuptools --upgrade

    Не знаю, как у вас в Астре, а у меня в Убунте в пакетах идёт совершенно допотопный pip версии 9. Текущий pip версии 21.2. setuptools апгрейдятся с версии 39 до 58.

  5. Теперь можно устанавливать pyqt5 и все остальные пакеты, необходимые вам. Устанавливать через pip! не через пакеты дистрибутива:

    (venv-3.8) $ pip3 install pyqt5

  6. После установки всех пакетов запускаете ваш скрипт в активированном окружении: (venv-3.8) $ python3 test.py

  7. Если вам нужно отменить изменения переменных окружения, внесённые скриптом activate, выполните команду (venv-3.8) $ deactivate и все исходные настройки вернутся.

Для 3.6 вы можете создать такое же окружение в отдельной папке, и выполнять test.py, активировав его. Так вы полностью разделите пакеты между версиями пайтона.

Пустое виртуальное окружение весит меньше 10 Мб, но, разумеется, по мере установки пакетов, будет раздуваться. Например, у меня установлены numpy, scipy, pandas, matplotlib, tensorflow, jupyter - размер venv почти 1.8 гб.

→ Ссылка
Автор решения: Анатолий

Проблему с созданием окружения для Python3.7 в AstraLinux решил созданием окружения без модуля pip, но доступом к системным пакетам,

где pip есть:


python3.7 –m venv --without-pip --system-site-packages
Установка модулей из активированного окружения:
python3 –m pip install <modul_name>

→ Ссылка