Перейти к содержимому

Как установить pyinstaller без pip

  • автор:

Установим pyinstaller под Windows 10 (python 3.5)

Итак, как пользоваться pyinstaller, я расскажу ниже, но сначала его надо установить.

Для начала идем сюда https://pypi.python.org/pypi/pypiwin32/219 и качаем под нужную систему.

Это расширения Python для Windows нужен для работы c WinAPI и создания COM-ов. В данный момент для меня был pypiwin32-219-cp35-none-win32.whl я писал на Python 3.5 и компилить будем под Win10.

Далее просто в командной строке
pip install \ pypiwin32-219-cp35-none-win32.whl

Тут команда разработчиков советует сделать виртуальное окружение и устанавливать pyinstaller в него, но можно и без этого. Опускаем этот момент и…

pip install PyInstaller

Далее, чтобы сделать свой exe файл сделаем папку, где все это будет компилиться. Ложим туда свой крутой py-файл, создаем директории Build и Dist. В папке Dist найдете свой exe файл, но после команды:

pyinstaller —onefile MyFile.py

Как установить модули python без интернета и pip?

Возникла проблема, есть основной пк на котором есть интернет и pip, но пакеты нужно установить на компьютер, на котором нет интернета, и нет возможности установить pip.

  • Вопрос задан более трёх лет назад
  • 22384 просмотра

2 комментария

Средний 2 комментария

kgb_zor

Kostyan4ik @Kostyan4ik Автор вопроса

Web Dentist, насколько я понял там для установки .whl используется pip, а у меня его нет возможности установить.

Решения вопроса 1

trapwalker

Сергей П @trapwalker Куратор тега Python
Программист, энтузиаст

Kostyan4ik, почему это нет возможности? С питоном всегда можно найти какую-нибудь возможность.

Вот, к примеру, вы можете на том компе, где есть питон и интернет, скачать все необходимые пакеты с помощью того же pip:
pip download pip
Так вы можете скачать все необходимые пакеты и принести их на машину без инета просто на флешке.
А там:

python pip-20.1.1-py2.py3-none-any.whl/pip install pip-20.1.1-py2.py3-none-any.whl

Тут происходит маленькая магия: вы с помощью питона запускаете pip прямо изнутри локально лежащего файла с его дистрибутивом. Этим pip’ом вы ставите самого себя на локальную машину. Примерно как Барон Мюнхаузен, но не больно.

Вы также можете сохранить перечень всех установленных пакетов на компе с инетом в текстовый файл, а потом, убрав из него лишнее, скачать все эти пакеты в локальный каталог, отнести на оффлайн-комп и там ставить через тот же pip

pip freeze > r.txt pip download -r r.txt

PyInstaller. Дистрибуция кода Python

PyInstaller — обычный пакет python. Он может быть установлен с использованием pip:

pip install pyinstaller

Установка в Windows:

Для Windows установка pywin32 или pypiwin32 — обязательное условие. Когда pyinstaller устанавливается с помощью pip, то pypiwin32 устанавливается автоматически.

Установка в Mac OS X:

PyInstaller работает с Python 2.7 по умолчанию в текущей Mac OS X. Однако, если вы планируете использовать более позднюю версию Python или если вы используете какой-либо из основных пакетов, таких как PyQt, Numpy, Matplotlib, Scipy и т. п. Мы настоятельно рекомендуем установить их с помощью MacPorts, либо Homebrew.

Установка из архива:

Если установка c помощью pip недоступна, загрузите сжатый архив из PyPI .

Чтобы протестировать версию, которая находится на стадии разработки, вы можете загрузить сжатый архив из раздела разработки страницы загрузки PyInstaller.

Распакуйте архив и найдите скрипт setup.py .Выполните python setup.py install с правами администратора для установки или обновления PyInstaller.

Проверка установки

Команда pyinstaller должна присутствовать в системном пути для всех платформ после успешной установки.

Это можно проверить, набрав в командной строке.

Использование Pyinstaller

Перейдите к каталогу, в котором находится ваш файл и введите:

pyinstaller myfile.py

Pyinstaller анализирует файл и создает:

Файл myfile.spec в том же каталоге, что и myfile.py

Папку сборки в том же каталоге, что и myfile.py

Папку dist в том же каталоге, что и myfile.py

Файлы журналов в папке сборки

Само приложение можно будет найти вложенным в папку dist

Объединение в одну папку

Если PyInstaller запускается без каких-либо параметров для myscript.py, то по умолчанию на выход получаем одну папку (с именем myscript). Она содержит файл с именем myscript (myscript.exe в Windows) вместе со всеми необходимыми зависимостями.

Приложение можно пересылать, сжав папку в zip-файл.

Режим «One Folder» можно установить с помощью опции -D или —onedir

pyinstaller myscript.py -D

Преимущества:

Одно из основных преимуществ упаковки в папку — легче отлаживать проблемы. Если какие-либо модули не импортируются, их можно проверить в папке.

Если в коде несколько изменений, но используемые зависимости точно совпадают, дистрибуторы могут просто отправить один исполняемый файл (который обычно меньше всей папки).

Недостатки:

Единственный недостаток этого метода — пользователи должны искать исполняемый файл в большом количестве файлов.

Также пользователи могут удалять/изменять другие файлы — это может привести к неправильной работе приложения.

Объединение в один файл

pyinstaller myscript.py -F

Флаг -F или —onefile определяет, что все будет упаковано в единый исполняемый файл myscript.exe .

Одиночный файл будет работать медленнее, чем при упаковке в папку. Также одиночные файлы сложнее отлаживать.

Синтаксис

pyinstaller [options] script [script . ] | specfile

Примечания

PyInstaller собирает python-приложение и все зависимости в один пакет. Пользователь может запускать приложение без установки интерпретатора python или каких-либо модулей. Pyinstaller поддерживает python 2.7 и python 3.3+ и такие библиотеки как: numpy, Django, OpenCv и другие.

Важные моменты, о которых следует помнить:

Pyinstaller поддерживает Python 2.7 и Python 3.3+

Pyinstaller был протестирован на Windows, Linux и Mac OS X.

Pyinstaller НЕ поддерживает кросс компиляцию из одной платформы для всех возможных (т.е. вы не можете создать исполняемый файл для одной операционной системы из другой операционной системы)

Как создать exe файл для Python кода с помощью PyInstaller

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

pip install PyInstaller 

Вот так можно проверить версию PyInstaller.

pyinstaller --version

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы.
  3. Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  4. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  5. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  6. Создает папку DIST в папке со скриптом, если она еще не существует.
  7. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.

Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.

 
 
import time name = input("Введите ваше имя ") print("Ваше имя ", name) time.sleep(5)

Создадим один исполняемый файл. В командной строке введите:

pyinstaller --onefile simple.py 

После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными

Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.

. a = Analysis(['simple1.py'], pathex=['E:\\myProject\\pyinstaller-tutorial'], binaries=[], datas=[('netflix_titles.csv', '.')], . 

Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .

Добавление файлов с данными и параметр onefile

Если задать параметр --onefile , то PyInstaller распаковывает все файлы в папку TEMP, выполняет скрипт и удаляет TEMP. Если вместе с add-data указать onefile, то нужно считать данные из папки. Путь папки меняется и похож на «_MEIxxxxxx-folder».

 
 
import time import sys import os # pip install pandas import pandas as pd def count_records(): os.chdir(sys._MEIPASS) data = pd.read_csv('netflix_titles.csv') print("Всего фильмов:", data.shape[0]) if __name__ == "__main__": count_records() time.sleep(5)

Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.

pyinstaller --onefile --add-data "netflix_titles.csv;." simple1.py

После успешного создания файл simple1.exe появится в папке DIST.

Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.

Добавление файлов с данными и параметр onefile

Дополнительные импорты с помощью Hidden Imports

Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …

Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.

Например, чтобы добавить библиотеку os, нужно написать вот так:

pyinstaller --onefile --add-data "netflix_titles.csv;." — hidden-import "os" simple1.py

Файл spec

Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.

PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.

Файл с расширением .spec сохраняется по умолчанию в текущей директории.

Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:

  • Собрать в один бандл с исполняемым файлы данных.
  • Включить другие исполняемые файлы: .dll или .so.
  • С помощью библиотек собрать в один бандл несколько программы.

Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.

 
 
import time import tensorflow as tf def view_model(): print(tf.__version__) if __name__ == "__main__" : model = view_model() time.sleep(5)

Компилируем модель с помощью PyInstaller:

pyinstaller -F simpleModel.py

После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.

. File "site-packages\tensorflow_core\python_init_.py", line 49, in ImportError: cannot import name 'pywrap_tensorflow' from 'tensorflow_core.python' 

Исправим ее, обновив файл spec. Одно из решений — создать файл spec.

$ pyi-makespec simpleModel.py -F wrote E:\pyinstaller-tutorial\simpleModel.spec now run pyinstaller.py to build the executable 

Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.

Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.

. exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='simpleModel', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True )

Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.

Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.

# -*- mode: python ; coding: utf-8 -*- block_cipher = None import os spec_root = os.path.realpath(SPECPATH) options = [] from PyInstaller.utils.hooks import collect_submodules, collect_data_files tf_hidden_imports = collect_submodules('tensorflow_core') tf_datas = collect_data_files('tensorflow_core', subdir=None, include_py_files=True) a = Analysis(['simpleModel.py'], pathex=['E:\\myProject\\pyinstaller-tutorial'], binaries=[], datas=tf_datas + [], hiddenimports=tf_hidden_imports + [], hookspath=[], . 

Создаем хуки и добавляем их в hidden imports и раздел данных.

Хуки

Файлы хуков расширяют возможность PyInstaller обрабатывать такие требования, как необходимость включать дополнительные данные или импортировать динамические библиотеки.

Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.

Скомпилируем модель после обновления файла simpleModel.spec.

pyinstaller simpleModel.spec 

Скопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.

Вывод:

PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:

  • Исполняемый файл может собрать в один бандл все требуемые данные с помощью параметра --add-data .
  • Исполняемый файл и зависимые данные с библиотеками можно собрать в один файл или папку с помощью --onefile или --onedir соответственно.
  • Динамические импорты и библиотеки второго уровня можно включить с помощью hidden-imports .
  • Файл spec позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/