Работа с разными версиями 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 шт):
Если вы установили более новый пайтон из пакетов, то соответствующий venv, скорее всего, называется python3.7-venv
С развёртыванием виртуального окружения есть одна тонкость. venv делает копию установки python, собранной саппортерами из дистрибутива. Но они всегда на несколько поколений позади актуальных версий. Поэтому перед практическим использованием venv необходимо обновить системные пакеты.
Я покажу на примере python-3.8, который стоит у меня в Ubuntu, но у вас последовательность шагов будет точно такой же.
Создать виртуальное окружение:
$ /usr/bin/python-3.8 -m venv ~/tmp/venv-3.8Активировать это окружение в текущем сеансе
bash:$ source ~/tmp/venv-3.8/bin/activateПо этой команде в текущем сеансе будут прописаны переменные окружения, указывающие на бинарники, библиотеки и пакеты в каталоге
~/tmp/venv-3.8/Для проверки:
(venv-3.8) $ which python3->/home/user/tmp/venv-3.8/bin/python3Обратите внимание, что
activateизменил строку приглашения вbash, добавив в неё указание, что в текущем сеансе активно виртуальное окружение.Первым делом нужно обновить
pipиsetuptools:(venv-3.8) $ pip3 install pip setuptools --upgradeНе знаю, как у вас в Астре, а у меня в Убунте в пакетах идёт совершенно допотопный
pipверсии 9. Текущийpipверсии 21.2.setuptoolsапгрейдятся с версии 39 до 58.Теперь можно устанавливать
pyqt5и все остальные пакеты, необходимые вам. Устанавливать черезpip! не через пакеты дистрибутива:(venv-3.8) $ pip3 install pyqt5После установки всех пакетов запускаете ваш скрипт в активированном окружении:
(venv-3.8) $ python3 test.pyЕсли вам нужно отменить изменения переменных окружения, внесённые скриптом
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>