Установка на python файлы с расширением .whl и .zip(добавление библиотек) [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 8 лет назад .
Не знаю как точно называется(библиотеки вроде).мне нужно установить раcширение на python 3. colorama-0.3.6-py2.py3-none-any.whl и snack2210-tcl.zip Но не знаю как это сделать.
Tech blog by @dizballanze
Python wheels для быстрой установки зависимостей
Часто все зависимые python пакеты устанавливаются при помощи pip из PyPI и/или VCS. Такой подход имеет ряд недостатков:
- производительность — каждый раз необходима скачивать и собирать пакеты что занимает большое количество времени
- работа в оффлайн режиме — без подключения к интернету не получится установить зависимости
- стабильность — установка зависимостей невозможна в случае:
- неполадок на стороне PyPI
- неполадок на стороне VCS (GitHub, Bitbucket, etc)
- нарушения зависимостей (удаление репозитория с Github, удаление пакета из PyPI и тд)
- неполадок у хостинг провайдера, которые могут привести к недоступности необходимых сетевых ресурсов (PyPI, VSC, etc)
Для решения этой проблемы предлагается использование заранее подготовленных пакетов wheel для всех зависимостей и хранение их в репозитории системы.
Создаем архив wheel пакетов
Wheel — это современный формат распространения пакетов в Python среде, который пришел на замену eggs. Рассмотрим процесс создания архива wheel для всех зависимостей системы.
Представим типичный Python проект с файлом requirements.txt содержащим зависимости. Пример файла requirements.txt :
svgwrite==1.1.6 ipython==2.3.0 flask==0.10.1 flask-mongoengine==0.7.1 flask-uploads==0.1.3 -e git://github.com/Samael500/flask-principal.git@dab7f391f0eeb76a25fa1b3dae7308a0924c8a12#egg=flask-principal -e git://github.com/Samael500/flask-security.git@f1042b5db67147b8ddaa8b767b2dfe063bb56ffa#egg=flask-security Flask-Admin==1.0.8 Flask-Session==0.1.1 Flask-Script==2.0.5 gunicorn==19.1.1 Flask-Testing==0.4.2 tornado==4.0.2 nose==1.3.4 pep8==1.5.7 Pillow==2.6.1 pyflakes==0.8.1 pylama==6.1.1 spec==0.11.1 py-bcrypt==0.4 WTForms==1.0.4 blessings==1.6 beautifulsoup4==4.3.2 lxml==3.4.1 -e git://github.com/Samael500/jinja-assets-compressor.git@8e1639cec6f8b347794fe1334519daacc6b763b0#egg=jac PyYAML==3.10
В нашем файле requirements.txt есть зависимости из внешних ресурсов (не PyPI), которые предполагают загрузку пакетов из VCS (в данном случае из git репозиториев на Github). Скопируем старый requirements.txt в requirements-remote.txt , а в requirements.txt заменим внешние ресурсы на обычные пакеты из PyPI и получим:
svgwrite==1.1.6 ipython==2.3.0 flask==0.10.1 flask-mongoengine==0.7.1 flask-uploads==0.1.3 flask-principal flask-security Flask-Admin==1.0.8 Flask-Session==0.1.1 Flask-Script==2.0.5 gunicorn==19.1.1 Flask-Testing==0.4.2 tornado==4.0.2 nose==1.3.4 pep8==1.5.7 Pillow==2.6.1 pyflakes==0.8.1 pylama==6.1.1 spec==0.11.1 py-bcrypt==0.4 WTForms==1.0.4 blessings==1.6 beautifulsoup4==4.3.2 lxml==3.4.1 jac PyYAML==3.10
Это делается для того, чтобы при установке из архива wheel пакетов не происходили запросы к внешним VCS, а брались локальные wheel, которые мы сейчас будем генерировать.
Cоздаем и активируем venv :
pyvenv venv . venv/bin/activate
Устанавливаем все пакеты как обычно, но из requirements-remote.txt :
pip install -r requirements-remote.txt
Сгенерируем архив всех пакетов PyPI, всех их зависимостей и всех зависимостей внешних пакетов (VCS). Для этого нам потребуется свежая версия pip и пакет wheel :
pip install -U pip pip install wheel mkdir wheels pip wheel -w wheels/ -r requirements-remote.txt --pre --allow-all-external
После этого получаем архив wheel пакетов для всех зависимостей кроме внешних (VCS). Для внешних пакетов устанавливаемых из исходников необходимо сгенерировать пакеты вручную при помощи setup.py bdist_wheel :
cd venv/src/flask-principal python setup.py bdist_wheel --dist-dir ../../../wheels/ cd ../flask-security python setup.py bdist_wheel --dist-dir ../../../wheels/ cd ../jac python setup.py bdist_wheel --dist-dir ../../../wheels/
Теперь в директории wheels есть все необходимые пакеты для установки всех зависимостей системы. Процесс уставновки зависимостей из локального архива пакетов выполняется так:
pip install --no-index -f wheels/ -r requirements.txt
обратите внимание, что используется файл requirements.txt , а не requirements-remote.txt .
Тестирование скорости установки
Обычная установка со скачиванием пакетов из PyPI и VCS:
time pip install -r requirements-remote.txt real 4m20.655s user 1m31.242s sys 0m55.539s
Установка из локального архива wheels:
time pip install --no-index -f wheels/ -r requirements.txt real 1m3.412s user 0m4.808s sys 0m31.210s
Из результатов можно сделать вывод, что время установки пакетов из локального архива в нашем случае меньше в 4 раза. Что логично, т.к. пакеты заново не скачиваются из интернета и не компилируются.
Бонус
Для удобства написал небольшой скрипт, автоматизирующий сборку пакетов установленных из исходников.
Пример использования скрипта:
python build_wheels --sources-dir venv/src/ --wheels-dir wheels/
Скрипт пройдется по всем поддиректориям venv/src/ и в каждой из них попробует собрать пакет в директорию wheels/ .
Whl файл как установить
What’s on this Page
.WHL вариант №
Файл WHL (Wheel) — это файл пакета дистрибутива, сохраненный в формате колеса Python. Это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом колеса. Подобно установочному файлу MSI, формат файла WHL представляет собой готовый к установке формат, который позволяет запускать установочный пакет без создания исходного дистрибутива.
Формат файла WHL
Формат файла WHL представляет собой архив ZIP (.zip), который содержит все установочные файлы и метаданные, необходимые установщикам для установки пакета. Эти файлы WHL можно извлечь с помощью функции распаковки или стандартных приложений для распаковки, таких как WinZIP и WinRAR.
Соглашение об именах файлов WHL
Файл WHL назван в соответствии со следующим соглашением.
Ниже приведен пример имени файла WHL.
cryptography-2.9.2-cp35-abi3-macosx_10_9_x86_64.whl
- cryptography — это имя пакета.
- «2.9.2» — это пакетная версия криптографии. Версия — это строка, совместимая с PEP 440, например 2.9.2, 3.4 или 3.9.0.a3.
- cp35 — это тег Python, обозначающий реализацию и версию Python, которые требуются для колеса.
- abi3 — это тег ABI. ABI означает двоичный интерфейс приложения.
- macosx_10_9_x86_64 — это тег платформы, который довольно многословен.
использованная литература
- Что такое колеса Python и зачем вам это?
- Колесо Python
How to Install a Python Package .Whl File
- Python Wheel File Type
- How to Install Python .Whl (Wheel) File
The most popular way to install the new Python package or library is to use pip or easy_install as introduced in Python tutorial installation section.
But sometimes you couldn’t use these tools because of some restrictions like limited internet access. Here we will show you how to install a new Python package with a .whl file.
Python Wheel File Type
Python wheel file or in abbreviation .whl file is a specially formatted zip archive as a Python built-package. It contains all the installation files and could be installed by only unpacking the file.
How to Install Python .Whl (Wheel) File
Check pip is already installed
If pip or pip.exe is not recognized, install it with the pip installation tutorial. Or you could check whether it is in the Python scripts directory, but the path of the script is not in the system variable. Then you could simply add the Python scripts path to the system variable PATH .
set PATH=C:\Python\Scripts;%PATH%
Download the .whl file
Install .whl file
For example, if you have downloaded pycairo-1.16.3-cp27-cp27m-win32.whl to the folder C:\Downloads\ . Use the command below to install the whl package file.
pip install C:\Downloads\pycairo-1.16.3-cp27-cp27m-win32.whl
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
Related Article — Python Package
- Python Egg
- How to Create Package in Python
- The Pillow Package in Python
- Package vs Module in Python
- __init__.py in Python