- Настройка окружения¶
- Отсутствие доступа к сети интернет¶
- Python3
- Упаковка модулей Python3
- Примеры упаковки
- Используемые макросы
- Пути
- Специфика
- Ошибки и пожелания
- Установка нескольких версий Python в одной ОС
- Python3
- Упаковка модулей Python3
- Примеры упаковки
- Используемые макросы
- Пути
- Специфика
- Ошибки и пожелания
- Установка нескольких версий Python в одной ОС
Настройка окружения¶
Все команды выполняются только от суперпользователя .
Настроенное окружение необходимо для корректной установки и настройки модулей TIONIX. Для настройки следуйте нижеописанным пунктам:
# Ubuntu: apt-get install -y gcc-4.7 python-dev python-pip # ALT Linux 7: apt-get install -y gcc4.7 python-dev python-module-pip python-module-django-dbbackend-mysql # CentOS: yum install -y gcc python-devel python-pip
# Ubuntu: export PIP_EXTRA_INDEX_URL=http://pypi.tionix.ru/simple/ export PIP_TRUSTED_HOST=pypi.tionix.ru # ALT Linux 7: export PIP_EXTRA_INDEX_URL=http://pypi-alt.tionix.ru/simple/ export PIP_TRUSTED_HOST=pypi-alt.tionix.ru # ALT Linux 7 RPM: echo "rpm http://rpmalt.tionix.ru/altlinux/c7/release noarch classic" > /etc/apt/sources.list.d/tionix.list apt-get update # CentOS: export PIP_EXTRA_INDEX_URL=http://pypi-centos.tionix.ru/simple/ export PIP_TRUSTED_HOST=pypi-centos.tionix.ru
# Ubuntu, CentOS: pip install tionix-licensing>=2.0.0
# ALT Linux 7: apt-get -y install python-module-tionix_licensing=2.0.0 # CentOS: yum install -y python-tionix_licensing-2.0.0
pip install python-subunit pip install packaging pip install requestsexceptions pip install sqlalchemy-migrate pip install jsonpath-rw-ext
apt-get -y install python-module-subunit apt-get -y install python-module-requestsexceptions apt-get -y install python-module-migrate apt-get -y install python-module-jsonpath-rw-ext apt-get -y install python-module-ua_parser apt-get -y install python-module-user_agents
# Ubuntu: service nova-api restart service apache2 restart # ALT Linux 7: systemctl restart openstack-nova-api systemctl restart httpd2 # CentOS: systemctl restart openstack-nova-api systemctl restart httpd
mysqladmin -u root password 123456
Отсутствие доступа к сети интернет¶
Ознакомиться с процессами установки или обновления RPM пакетов TIONIX на операционной системе ALT Linux без доступа к сети интернет можете, перейдя по ссылкам на видео руководства:
В случае установки модулей на сервер без доступа к сети интернет нужно выполнить следующие шаги:
- На сервере с доступом в интернет скачать модули и их зависимости (предварительно необходимо настроить переменные окружения ):
mkdir packages pip download tionix-dashboard tionix-monitor tionix-node-control tionix-scheduler tionix-vdi-server tionix-licensing tionix-dashboard-theme pip -d packages
На сервере без доступа к сети интернет необходимо обеспечить наличие пакетов, перечисленных в файле: system_packages.txt .
Для успешного выполнения команды pip download версия pip должна быть не менее 8.0.0.
Python3
Python3 собран в Sisyphus параллельно с Python2 и будет так существовать достаточно длительное время (по полного исчезновения Python2, которое в обозримом будущем вряд ли случится). Языки Python3 и Python2 отличаются синтаксисом, список различий доступен на http://docs.python.org/py3k/whatsnew/3.0.html
Упаковка модулей Python3
Примеры упаковки
Пример упаковки модуля Python3 из того же исходника, из которого пакуется модуль Python2 можно посмотреть тут.
Используемые макросы
Макросы для сборки модулей python3 содержатся в пакете rpm-build-python3 и аналогичны тем, что используются у нас для python.
Пути
В настоящий момент всё, что лежит в /usr/lib/python3.x считается написанным на Python3, все остальные .py файлы воспринимаются как Python2. Если хочется иметь Python3-файлы в других каталогах, то стоит использовать макрос %add_python3_path /path/to/dir/with/python3 (при этом .py-файлы будут компилироваться с помощью Python3, поиск зависимостей будет осуществляться с помощью Python3). Возможны случаи, когда захочется выполнить автоматическую генерацию Provides для модулей Python3, лежащих по нестандартному пути. В этом случае к предыдущему макросу потребуется добавить %add_python3_lib_path /path/to/dir/with/python3
Специфика
- При сборке модуля python3 из того же исходника, из которого собирается модуль python требуется оборачивать такую сборку в %if_with python3
- Группа пакетов — Development/Python3
- Python3/rpm-build-python3 — не базовая система, для использования макросов нужно писать BuildRequires(pre): rpm-build-python3
- Автоматический поиск Requires/Provides работает только для %python3_sitelibdir. Возможно, стоит добавить механизм для явного указания других путей (с исключением поиска там зависимостей с помощью python2), я подумаю. В отличие от python зависимости на python3-base генерируются явно (к примеру, «python3.2(os)»).
- Скомпилированные .pyo/.pyc у python3 кладутся в специальный каталог __pycache__ в директории с исходником. Не забывайте их паковать.
При смене версии python3 потребуется полная пересборка. Если для сборки вам требуется бутстрап — оставляйте, пожалуйста соответствующие ручки вида %def_with, это сильно упрощает формирование задания на обновление. Для этих же целей, наверное, стоит автоматически навешивать какую-нибудь группу вида @python3 на все пакеты, из которых собралось что-то, требующее python3.*(*).
Ошибки и пожелания
Ошибки и пожелания принимаются в багзиллу на пакеты python3/rpm-build-python3 или в личную почту vitty@
Установка нескольких версий Python в одной ОС
Системный Python лежит по пути /usr/bin/ и запускается через python3. Мы скомпилируем нашу версию Python в папку /usr/local/bin/
wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz tar zxvf Python-3.7.16.tgz sudo cp -r Python-3.7.16 /usr/local/bin cd /usr/local/bin/Python-3.7.16/ sudo apt-get install zlib-devel libssl-devel libsqlite3-devel libffi-devel sudo apt-get install pip sudo ./configure --prefix=/usr/local --with-ensurepip=install sudo make sudo make install sudo make clean sudo rm -rf /usr/local/bin/Python-3.7.16 # удаляем линки, чтобы они не пересекались с системным Python cd /usr/local/bin/ sudo rm -f 2to3 idle3 pip3 pydoc3 python3 python3-config pyvenv sudo rm -f /usr/local/lib/pkgconfig/python3.pc
Для работы Python версии 3.7.16 нужно запускать 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7
Запуск отдельного pip для python 3.9 — pip либо pip3.9
Запуск отдельного pip для pyhton 3.7 — pip3.7
Создадим отдельное окружение и изолированно обновим pip:
pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9) cd ~ python3.7 -m venv venv source venv/bin/activate pip install -U pip pip -V # pip 23.1 from /home/iam/venv/lib/python3.7/site-packages/pip (python 3.7) deactivate pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
Обновим отдельно хостовый pip для каждой версии и проверим:
pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9) pip install -U pip pip -V # pip 23.1 from /home/iam/.local/lib/python3/site-packages/pip (python 3.9) pip3.7 -V # pip 22.0.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7) pip3.7 install -U pip pip3.7 -V # pip 23.1 from /home/iam/.local/lib/python3.7/site-packages/pip (python 3.7)
Удаление установленного нами Python 3.7.16:
cd /usr/local/bin/ sudo rm -f 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7 sudo rm -rf /usr/local/include/python3.7m/ sudo rm -f /usr/local/lib/pkgconfig/python-3.7.pc sudo rm -f /usr/local/lib/pkgconfig/python-3.7m.pc sudo rm -f /usr/local/lib/pkgconfig/python3.pc sudo rm -rf /usr/local/lib/python3.7 sudo rm -f /usr/local/lib/libpython3.7m.a sudo rm -f /usr/local/share/man/man1/python3.1 sudo rm -f /usr/local/share/man/man1/python3.7.1
Python3
Python3 собран в Sisyphus параллельно с Python2 и будет так существовать достаточно длительное время (по полного исчезновения Python2, которое в обозримом будущем вряд ли случится). Языки Python3 и Python2 отличаются синтаксисом, список различий доступен на http://docs.python.org/py3k/whatsnew/3.0.html
Упаковка модулей Python3
Примеры упаковки
Пример упаковки модуля Python3 из того же исходника, из которого пакуется модуль Python2 можно посмотреть тут.
Используемые макросы
Макросы для сборки модулей python3 содержатся в пакете rpm-build-python3 и аналогичны тем, что используются у нас для python.
Пути
В настоящий момент всё, что лежит в /usr/lib/python3.x считается написанным на Python3, все остальные .py файлы воспринимаются как Python2. Если хочется иметь Python3-файлы в других каталогах, то стоит использовать макрос %add_python3_path /path/to/dir/with/python3 (при этом .py-файлы будут компилироваться с помощью Python3, поиск зависимостей будет осуществляться с помощью Python3). Возможны случаи, когда захочется выполнить автоматическую генерацию Provides для модулей Python3, лежащих по нестандартному пути. В этом случае к предыдущему макросу потребуется добавить %add_python3_lib_path /path/to/dir/with/python3
Специфика
- При сборке модуля python3 из того же исходника, из которого собирается модуль python требуется оборачивать такую сборку в %if_with python3
- Группа пакетов — Development/Python3
- Python3/rpm-build-python3 — не базовая система, для использования макросов нужно писать BuildRequires(pre): rpm-build-python3
- Автоматический поиск Requires/Provides работает только для %python3_sitelibdir. Возможно, стоит добавить механизм для явного указания других путей (с исключением поиска там зависимостей с помощью python2), я подумаю. В отличие от python зависимости на python3-base генерируются явно (к примеру, «python3.2(os)»).
- Скомпилированные .pyo/.pyc у python3 кладутся в специальный каталог __pycache__ в директории с исходником. Не забывайте их паковать.
При смене версии python3 потребуется полная пересборка. Если для сборки вам требуется бутстрап — оставляйте, пожалуйста соответствующие ручки вида %def_with, это сильно упрощает формирование задания на обновление. Для этих же целей, наверное, стоит автоматически навешивать какую-нибудь группу вида @python3 на все пакеты, из которых собралось что-то, требующее python3.*(*).
Ошибки и пожелания
Ошибки и пожелания принимаются в багзиллу на пакеты python3/rpm-build-python3 или в личную почту vitty@
Установка нескольких версий Python в одной ОС
Системный Python лежит по пути /usr/bin/ и запускается через python3. Мы скомпилируем нашу версию Python в папку /usr/local/bin/
wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz tar zxvf Python-3.7.16.tgz sudo cp -r Python-3.7.16 /usr/local/bin cd /usr/local/bin/Python-3.7.16/ sudo apt-get install zlib-devel libssl-devel libsqlite3-devel libffi-devel sudo apt-get install pip sudo ./configure --prefix=/usr/local --with-ensurepip=install sudo make sudo make install sudo make clean sudo rm -rf /usr/local/bin/Python-3.7.16 # удаляем линки, чтобы они не пересекались с системным Python cd /usr/local/bin/ sudo rm -f 2to3 idle3 pip3 pydoc3 python3 python3-config pyvenv sudo rm -f /usr/local/lib/pkgconfig/python3.pc
Для работы Python версии 3.7.16 нужно запускать 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7
Запуск отдельного pip для python 3.9 — pip либо pip3.9
Запуск отдельного pip для pyhton 3.7 — pip3.7
Создадим отдельное окружение и изолированно обновим pip:
pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9) cd ~ python3.7 -m venv venv source venv/bin/activate pip install -U pip pip -V # pip 23.1 from /home/iam/venv/lib/python3.7/site-packages/pip (python 3.7) deactivate pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9)
Обновим отдельно хостовый pip для каждой версии и проверим:
pip -V # pip 22.2.2 from /usr/lib64/python3/site-packages/pip (python 3.9) pip install -U pip pip -V # pip 23.1 from /home/iam/.local/lib/python3/site-packages/pip (python 3.9) pip3.7 -V # pip 22.0.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7) pip3.7 install -U pip pip3.7 -V # pip 23.1 from /home/iam/.local/lib/python3.7/site-packages/pip (python 3.7)
Удаление установленного нами Python 3.7.16:
cd /usr/local/bin/ sudo rm -f 2to3-3.7 idle3.7 pip3.7 pydoc3.7 python3.7 python3.7-config python3.7m python3.7m-config pyvenv-3.7 sudo rm -rf /usr/local/include/python3.7m/ sudo rm -f /usr/local/lib/pkgconfig/python-3.7.pc sudo rm -f /usr/local/lib/pkgconfig/python-3.7m.pc sudo rm -f /usr/local/lib/pkgconfig/python3.pc sudo rm -rf /usr/local/lib/python3.7 sudo rm -f /usr/local/lib/libpython3.7m.a sudo rm -f /usr/local/share/man/man1/python3.1 sudo rm -f /usr/local/share/man/man1/python3.7.1