Как установить pyinstaller на windows

PyInstaller is available as a regular Python package.
The source archives for released versions are available from PyPi,
but it is easier to install the latest version using pip:

To upgrade existing PyInstaller installation to the latest version, use:

pip install --upgrade pyinstaller

To install the current development version, use:

pip install https://github.com/pyinstaller/pyinstaller/tarball/develop

To install directly using pip’s built-in git checkout support, use:

pip install git+https://github.com/pyinstaller/pyinstaller

or to install specific branch (e.g., develop):

pip install git+https://github.com/pyinstaller/pyinstaller@develop

Installing from the source archive¶

The source code archive for released versions of PyInstaller are
available at PyPI and on PyInstaller Downloads page.

Note

Even though the source archive provides the setup.py script,
installation via python setup.py install has been deprecated
and should not be used anymore. Instead, run pip install . from
the unpacked source directory, as described below.

The installation procedure is:
  1. Unpack the source archive.

  2. Move into the unpacked source directory.

  3. Run pip install . from the unpacked source directory. If
    installing into system-wide python installation, administrator
    privilege is required.

The same procedure applies to installing from manual git checkout:

git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller
pip install .

If you intend to make changes to the source code and want them to take
effect immediately, without re-installing the package each time, you
can install it in editable mode:

For platforms other than Windows, GNU/Linux and macOS, you must first
build the bootloader for your platform: see Building the Bootloader.
After the bootloader has been built, use the pip install . command
to complete the installation.

Verifying the installation¶

On all platforms, the command pyinstaller should now exist on the
execution path. To verify this, enter the command:

The result should resemble 4.n for a released version,
and 4.n.dev0-xxxxxx for a development branch.

If the command is not found, make sure the execution path includes
the proper directory:

  • Windows: C:\PythonXY\Scripts where XY stands for the
    major and minor Python version number,
    for example C:\Python38\Scripts for Python 3.8)

  • GNU/Linux: /usr/bin/

  • macOS (using the default Apple-supplied Python) /usr/bin

  • macOS (using Python installed by homebrew) /usr/local/bin

  • macOS (using Python installed by macports) /opt/local/bin

To display the current path in Windows the command is echo %path%
and in other systems, echo $PATH.

Note

If you cannot use the pyinstaller command due to the scripts
directory not being in PATH, you can instead invoke the
PyInstaller module, by running python -m PyInstaller
(pay attention to the module name, which is case sensitive).
This form of invocation is also useful when you have PyInstaller
installed in multiple python environments, and you cannot be sure
from which installation the pyinstaller command will be ran.

Installed commands¶

The complete installation places these commands on the execution path:

  • pyinstaller is the main command to build a bundled application.
    See Using PyInstaller.

  • pyi-makespec is used to create a spec file. See Using Spec Files.

  • pyi-archive_viewer is used to inspect a bundled application.
    See Inspecting Archives.

  • pyi-bindepend is used to display dependencies of an executable.
    See Inspecting Executables.

  • pyi-grab_version is used to extract a version resource from a Windows
    executable. See Capturing Windows Version Data.

  • pyi-set_version can be used to apply previously-extracted version
    resource to an existing Windows executable.

Написав программу на языке программирования Python мы начинаем думать: «А как собрать нашу программу в файл и запускать на любом компьютере без установки интерпретатора Python?». В этой статье мы разберемся в этом вопросе.

Существует большое количество библиотек, позволяющих это сделать, среди которых самые популярные: cx_Freeze, py2exe, nuitka, PyInstaller и др.

В данной статье мы подробно рассмотрим установку библиотеки PyInstaller и собрание проекта на операционной системе Windows, а это означает, что мы будем собирать проект в «.exe» файл.

На официальном сайте библиотеки PyInstaller вы можете изучить документацию по другим операционным системам.

Установка PyInstaller

Чтобы установить PyInstaller необходимо сначала установить Python. В статье «Установка Python» вы можете подробно изучить установку Python на Windows.

Для корректной работы PyInstaller рекомендуется установить версию Python 3.7.6 т.к. на данный момент (Февраль 2020) библиотека корректно работает с данной версией Python, а с самой новой версией не работает.

Для установки библиотеки запустите командную строку от имени администратора:

Копирование проекта в ".exe" на Python

Установим необходимую библиотеку pypiwin32. В командной строке напишите строку:

pip install pypiwin32

Копирование проекта в ".exe" на Python

Если у вас выйдет строка «WARNING», как на картинке ниже, тогда необходимо обновить «pip» до последней версии. Код:

pip install --upgrade pip

Копирование проекта в ".exe" на Python

После того, как обновите pip вводим строку для загрузки библиотеки:

pip install pyinstaller

Копирование проекта в ".exe" на Python

После загрузки библиотеки проверьте её версию:

pyinstaller --version

Копирование проекта в ".exe" на Python

Проверим все установленные библиотеки с помощью кода:

pip list

Копирование проекта в ".exe" на Python

Все необходимые библиотеки мы установили. Если вы все сделали по описанию, тогда у вас должно быть как на изображении.

Собрание проекта

В статье «Библиотека Tkinter в Python» мы создали небольшое графическое приложение. Для примера возьмем это приложение и соберем в .exe файл (приложение имеет имя: form.py).

В папке с проектом запускаем командную строку (cmd):

Копирование проекта в ".exe" на Python

Прописываем код:

pyinstaller form.py

Копирование проекта в ".exe" на Python

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

PyInstaller анализирует файл form.py и делает следующее:

  1. Пишет файл form.spec в той же папке, где находится скрипт.
  2. Создает папку build в той же папке, где находится скрипт.
  3. Записывает некоторые логи и рабочие файлы в папку build.
  4. Создает папку dist в той же папке, где находится скрипт.
  5. Пишет исполняемый файл в папку dist.

После работы программы вы найдете две папки: dist и build. В папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.

Копирование проекта в ".exe" на Python

Наиболее часто используемые опции:

—onefile — сборка в один файл, т.е. файлы .dll не пишутся.

—windowed -при запуске приложения, будет появляться консоль.

—noconsole — при запуске приложения, консоль появляться не будет.

—icon=app.ico — добавляем иконку в окно.

—paths — возможность вручную прописать путь к необходимым файлам, если pyinstaller не может их найти(например: —paths D:\python35\Lib\site-packages\PyQt5\Qt\bin).

Синтаксис команды pyinstaller:

pyinstaller [options] script [script ...] | specfile

Используем опцию —onefile для сборки нашего проекта в один файл.

Можете взять другой проект или удалить все файлы проекта созданные библиотекой pyinstaller и собрать его заново. Код:

pyinstaller --onefile form.py

Копирование проекта в ".exe" на Python

После работы программы вы найдете две папки: dist и build. В папке dist и находится наше приложение. Теперь наш проект собран в одном файле:

Копирование проекта в ".exe" на Python

Запустите собранный .exe файл проекта и проверьте его работоспособность. На этом наша статья подходит к завершению. В комментариях вы можете задавать интересующие вопросы.

Видео по копированию проекта в «.exe»:

Установка 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 создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.

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

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

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

Есть CSV-файл netflix_titles.csv, и Python-script, который считывает количество записей в нем. Теперь нужно добавить этот файл в бандл с исполняемым файлом. Файл Python-скрипта назовем просто simple1.py.

import time
# pip install pandas
import pandas as pd


def count_records():
    data = pd.read_csv('netflix_titles.csv')
    print("Всего фильмов:", data.shape[0])


if __name__ == "__main__":
    count_records()
    time.sleep(5)

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

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

Параметр --add-data позволяет добавить файлы с данными, которые нужно сохранить в одном бандле с исполняемым файлом. Этот параметр можно применить много раз.

Синтаксис add-data:

  • add-data <source;destination> — Windows.
  • add-data <source:destination> — Linux.

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

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

Также, открыв 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 позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.

PyPI
PyPI - Python Version
Read the Docs (version)
PyPI - Downloads

PyInstaller bundles a Python application and all its dependencies into a single
package. The user can run the packaged app without installing a Python
interpreter or any modules.

Documentation:

https://pyinstaller.org/

Code:

https://github.com/pyinstaller/pyinstaller

PyInstaller reads a Python script written by you. It analyzes your code
to discover every other module and library your script needs in order to
execute. Then it collects copies of all those files – including the active
Python interpreter! – and puts them with your script in a single folder, or
optionally in a single executable file.

PyInstaller is tested against Windows, macOS, and GNU/Linux.
However, it is not a cross-compiler:
to make a Windows app you run PyInstaller in Windows; to make
a GNU/Linux app you run it in GNU/Linux, etc.
PyInstaller has been used successfully
with AIX, Solaris, FreeBSD and OpenBSD,
but is not tested against them as part of the continuous integration tests.

Main Advantages

  • Works out-of-the-box with any Python version 3.8-3.12.

  • Fully multi-platform, and uses the OS support to load the dynamic libraries,
    thus ensuring full compatibility.

  • Correctly bundles the major Python packages such as numpy, PyQt5,
    PySide2, PyQt6, PySide6, wxPython, matplotlib and others out-of-the-box.

  • Compatible with many 3rd-party packages out-of-the-box. (All the required
    tricks to make external packages work are already integrated.)

  • Works with code signing on macOS.

  • Bundles MS Visual C++ DLLs on Windows.

Installation

PyInstaller is available on PyPI. You can install it through pip:

pip install pyinstaller

Requirements and Tested Platforms

  • Python:
    • 3.8-3.12. Note that Python 3.10.0 contains a bug making it unsupportable by
      PyInstaller. PyInstaller will also not work with beta releases of Python
      3.13.

  • Windows (32bit/64bit/ARM64):
    • PyInstaller should work on Windows 7 or newer, but we only officially support Windows 8+.

    • Support for Python installed from the Windows store without using virtual
      environments requires PyInstaller 4.4 or later.

  • Linux:
    • GNU libc based distributions on architectures x86_64, aarch64,
      i686, ppc64le, s390x.

    • musl libc based distributions on architectures x86_64, aarch64.

    • ldd: Console application to print the shared libraries required
      by each program or shared library. This typically can be found in
      the distribution-package glibc or libc-bin.

    • objdump: Console application to display information from
      object files. This typically can be found in the
      distribution-package binutils.

    • objcopy: Console application to copy and translate object files.
      This typically can be found in the distribution-package binutils,
      too.

    • Raspberry Pi users on armv5armv7 should add piwheels as an extra
      index url then pip install pyinstaller
      as usual.

  • macOS (x86_64 or arm64):
    • macOS 10.15 (Catalina) or newer.

    • Supports building universal2 applications provided that your installation
      of Python and all your dependencies are also compiled universal2.

Usage

Basic usage is very simple, just run it against your main script:

pyinstaller /path/to/yourscript.py

For more details, see the manual.

Untested Platforms

The following platforms have been contributed and any feedback or
enhancements on these are welcome.

  • FreeBSD
    • ldd

  • Solaris
    • ldd

    • objdump

  • AIX
    • AIX 6.1 or newer. PyInstaller will not work with statically
      linked Python libraries.

    • ldd

  • Linux on any other libc implementation/architecture combination not listed
    above.

Before using any contributed platform, you need to build the PyInstaller
bootloader. This will happen automatically when you pip install pyinstaller provided that you have an appropriate C compiler (typically
either gcc or clang) and zlib’s development headers already installed.

Support

  • Official debugging guide: https://pyinstaller.org/en/v6.0.0/when-things-go-wrong.html

  • Assorted user contributed help topics: https://github.com/pyinstaller/pyinstaller/wiki

  • Web based Q&A forums: https://github.com/pyinstaller/pyinstaller/discussions

  • Email based Q&A forums: https://groups.google.com/g/pyinstaller

Changes in this Release

You can find a detailed list of changes in this release
in the Changelog section of the manual.

Python

Установка

Установить PyInstaller через pip

> pip install pyinstaller

Если установка PyInstaller не удалась из-за ошибки

Откатить pip до версии 18.1

> python -m pip install pip==18.1

Установить PyInstaller

> pip install pyinstaller

Обновить pip до последней версии

> python -m pip install --upgrade pip

Настройка

В начало файла C:\Users\%USER%\AppData\Local\Programs\Python\Python38-32\Scripts\pyinstaller-script.py добавить строку # coding=utf-8

Вывести версию PyInstaller для проверки установки

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

Создать .exe файл для CLI-программы

> pyinstaller --onefile example.py

Создать .exe файл для GUI-программы

> pyinstaller --onefile --windowed example.py

Создать .exe файл с заданной иконкой

> pyinstaller --onefile --icon=app.ico example.py

  • Как установить proteus на windows 10
  • Как установить prometheus на windows
  • Как установить proxy на windows 10
  • Как установить powerpoint на компьютер windows 10
  • Как установить putty на windows 10