Как сделать исполняемый файл из скрипта python

Spec File Options for a Mac OS X Bundle¶

When you build a windowed Mac OS X app
(that is, running in Mac OS X, you specify the
options),
the spec file contains an additional statement to
create the Mac OS X application bundle, or app folder:

app = BUNDLE(exe,
         name='myscript.app',
         icon=None,
         bundle_identifier=None)

The argument to will have the path to an icon file
that you specify using the option.
The will have the value you specify with the
option.

An file is an important part of a Mac OS X app bundle.
(See the Apple bundle overview for a discussion of the contents
of .)

PyInstaller creates a minimal .
The option can be used to set the application version
using the CFBundleShortVersionString Core Foundation Key.

You can add or overwrite entries in the plist by passing an
parameter to the BUNDLE call. Its argument should be a
Python dict with keys and values to be included in the
file.
PyInstaller creates from the info_plist dict
using the Python Standard Library module plistlib.
plistlib can handle nested Python objects (which are translated to nested
XML), and translates Python data types to the proper
XML types. Here’s an example:

app = BUNDLE(exe,
         name='myscript.app',
         icon=None,
         bundle_identifier=None,
         version='0.0.1',
         info_plist={
            'NSPrincipalClass' 'NSApplication',
            'NSAppleScriptEnabled' False,
            'CFBundleDocumentTypes' 
                {
                    'CFBundleTypeName' 'My File Format',
                    'CFBundleTypeIconFile' 'MyFileIcon.icns',
                    'LSItemContentTypes' 'com.example.myformat'],
                    'LSHandlerRank' 'Owner'
                    }
                
            },
         )

Функция sum(a: int, b: int)

Итак, у нас получилось скомпилировать python, и мы разобрались с тем, как это работает, а также увидели определенную неэффективность полученного результата. Теперь попробуем разобраться в том, как можно это улучшить. Очевидно, что основная проблема заключается во множественном взаимодействии CPython — Extension. Но как это побороть? 

Для повышения эффективности, нужно, чтобы расширение, получив управление, могло как можно дольше оставлять его у себя без обращения к CPython. Если бы у mypyc была информация о типах переменных, то он бы мог самостоятельно произвести сложение без возврата управления. Но вывести типы самостоятельно mypyc не может, он даже не контролирует код, из которого осуществляется вызов функции sum. Соответственно, ему нужно помочь, проставив аннотации вручную. Давайте посмотрим, как поменяется результирующая С-функция, если добавить аннотацию типов:

Скомпилированный результат на C (немного очищенный):

Главное, что можно заметить: функция существенно поменялась, а значит, компилятор реагирует на появление аннотации. Давайте разбираться, что изменилось. 

Теперь CPyDef_sum получает на вход не указатели на PyObject, а структуры CPyTagged. Это все еще не int, но уже и не часть CPython, а часть библиотек mypyc, которую он добавляет в скомпилированный код расширения. Для ее инициализации в рантайме сначала проверяется тип, так что теперь функция sum работает только с int и обойти аннотацию не получится.

Далее происходит вызов CPyTaggetAdd вместо PyNumber_Add. Это уже внутренняя функция mypyc. Если заглянуть в CPyTaggetAdd, то можно понять, что там происходит проверка диапазонов значений a и b, и если они укладываются в int, то происходит простое суммирование, а также проверка на переполнение:

Таким образом, наш диалог CPython — Extension превращается из абсурдного в нормальный:

Vagrantfile Virtual Machines¶

PyInstaller maintains a set of virtual machine description for testing and
(cross-) building. For managing these boxes, we use vagrant.

All guests will automatically build the bootloader when running
vagrant up GUEST or
vagrant provision GUEST. They will build both 32- and 64-bit bootloaders.

Except of guest osxcross, which will build the OS X SDK and cctools
as described in section .

When building the bootloaders, the guests are sharing
the PyInstaller distribution folder and will put the built executables onto
the build-host (into ).

Most boxes requires two Vagrant plugins to be installed:

vagrant plugin install vagrant-reload vagrant-scp

Example usage:

vagrant up linux64      # will also build the bootloader
vagrant halt linux64    # or `destroy`

# verify the bootloader has been rebuild
git status PyInstallerbootloader

You can pass some parameters for configuring the Vagrantfile by setting
environment variables, like this:

GUI=1 TARGET=OSX vagrant up linux64

or like this:

export TARGET=OSX
vagrant provision linux64

We currently provide this guests:

linux64

GNU/Linux (some recent version) used to build the GNU/Linux
bootloaders.

  • If is set, cross-builds the bootloaders for OS X
    (see ).

  • If is set, cross-builds the bootloaders
    for Windows using mingw. Please have in mind that this imposes
    the restrictions mentioned above.

  • Otherwise (which is the default) bootloaders for GNU/Linux are
    build.

windows10

Windows 10, used for building the Windows bootloaders
using Visual C++.

If MINGW=1 is set, the bootloaders will be build using
MinGW. Please be aware of the restrictions mentioned above.

Note

The Windows box uses password authentication, so in
some cases you need to enter the password (which is
Passw0rd!).

build-osxcross

GNU/Linux guest used to build the OS X SDK and cctools as
described in section .

Creating a PyInstaller package

PyInstaller is a Python package, installed with (). PyInstaller can be installed in your default Python installation, but it’s best to create a virtual environment for the project you want to package and install PyInstaller there.

PyInstaller works by reading your Python program, analyzing all of the imports it makes, and bundling copies of those imports with your program. PyInstaller reads in your program from its entry point. For instance, if your program’s entry point is , you would run to perform the analysis. PyInstaller can detect and automatically package many common Python packages, like NumPy, but you might need to provide hints in some cases. (More on this later.)

After analyzing your code and discovering all of the libraries and modules it uses, PyInstaller then generates a “spec file.” A Python script with the extension , this file includes details about how your Python app needs to be packed up. The first time you run PyInstaller on your app, PyInstaller will generate a spec file from scratch and populate it with some sane defaults. Don’t discard this file; it’s the key to refining a PyInstaller deployment!

Finally, PyInstaller attempts to produce an executable from the app, bundled with all its dependencies. When it’s finished, a subfolder named  (by default; you are free to specify a different name) will appear in the project directory. This in turn contains a directory that is your bundled app — it has an file to run, along with all of the libraries and other supplemental files required.

All you need to do to distribute your program, then, is package up this directory as a file or some other bundle. The bundle will typically need to be extracted in a directory where the user has write permissions in order to run.

Бенчмарк

Так как одной из целей является ускорение, необходимо оценить, насколько быстро работает скомпилированный код. В качестве бенчмарка будем использовать pyperfomance. К сожалению, pyperfomance не подошел для Cython и Pythran, потому что не позволяет визуализировать все возможности языка. Ускорения для Cython без модификации кода получить не удалось, а Pythran не умеет в пользовательские классы. Для них воспользуемся вычислением числа пи:

Эксперименты будем проводить на процессоре Intel Core i7 10510U. На CPython 3.9.7 время вычисления числа пи до 100.000.000 знака заняло 5.82 секунды.

4 ответа

Лучший ответ

Как вы уже упоминали, вам нужно только преобразовать логотип из jpg в файлы значков для соответствующей ОС, а затем попробовать конвертер изображений Pillow . Этот код будет генерировать файлы значков для всех (Mac, Win, Linux)

При желании вы можете указать желаемый размер значков (для Windows):

В говорится, что по умолчанию будет генерировать размеры и любой размер, превышающий исходный или 255, будет проигнорирован.

Дополнительные сведения см. в документации по подушкам.

Поскольку Pyinstaller основан на ОС, а ICNS также создается на основе ОС

Независимость от ОС для ICNS

Лучший независимый от ОС способ — это онлайн. Cloud Convert — отличный инструмент для этого. Однако сначала вы должны преобразовать свой в . Вы можете использовать часть PNG приведенного выше кода для автоматического преобразования вашего JPG в PNG или использовать JPG в PNG а> Наконец, преобразуйте файл PNG с помощью PNG в ICNS.

1

Ratul Hasan
3 Июн 2021 в 19:58

Это проще, если вы просто используете , он использует pyinstaller, но автоматически генерирует команду, поэтому вы можете просто загрузить изображение в графический интерфейс.

user14621114
3 Июн 2021 в 17:06

Если вы хотите преобразовать свои PNG в формат ICO, вы можете использовать конвертер PNG в ICO (онлайн), например это. Поскольку все платформы поддерживают файлы формата , это будет ваш универсальный магазин.

Предпочтительный размер значка — квадрат 96 x 96 пикселей (высокое качество) или 48 x 48 пикселей (среднее качество).

Кроме того, чтобы установить значок для вашего приложения с помощью pyinstaller, вы можете указать путь для значка при создании установщика с помощью командной строки.

Это создаст установщик, содержащий приложение с указанным значком.

SnazzyMohit
31 Май 2021 в 03:22

Том! Я нашел вам решение! .Перейдите на сайт здесь и преобразуйте свое изображение в icns формат. Затем в pyinstaller выполните команду: —

Работает нормально.

А если вы хотите добавить значок к в файле в Windows, попробуйте следующее: — Если вы используете pygame, используйте этот код: —

Если вы используете TKinter, используйте этот код: —

Если вы хотите добавить значок после завершения создания файла, используйте Pyinstaller : —

А в pyinstaller используйте эту команду: —

Немного информации о нем: —

  • -F для 1 файла, поэтому он не создает много файлов. Только 1, который будет самим файлом .exe.
  • Посетите этот сайт для получения дополнительной информации об этом сайте.
  • Если вы не используете графический интерфейс, используйте эту команду:

Надеюсь, это вам поможет!

3

Dr.Strange Codes
2 Июн 2021 в 03:06

JIT-компиляция Python

JIT-компиляция не позволяет скрывать исходники или создавать автономный исполняемый файл, но дает возможность значительно ускорить выполнение программы.

PyPy

PyPy — интерпретатор языка программирования Python 2.7 и Python 3.7. Он написан на RPython и содержит:

  • компилятор байт-кода, отвечающий за создание объектов кода Python из исходного кода пользовательского приложения;

  • оценщик байт-кода, ответственный за интерпретацию объектов кода Python;

  • стандартное объектное пространство, отвечающее за создание и управление объектами Python, видимыми приложением.

PyPy поддерживает сотни библиотек Python, включая NumPy.

Основные особенности (сравнение с CPython):

  • Скорость. При выполнении длительно выполняющихся программ, когда значительная часть времени тратится на выполнение кода Python, PyPy может значительно ускорить ваш код.

  • Использование памяти. Программы Python, требующие много памяти (несколько сотен Мб или более), могут занимать меньше места, чем в CPython. Однако это не всегда так, поскольку зависит от множества деталей. Также базовый уровень потребления оперативной памяти выше, чем у CPython.

Скачать PyPy можно с здесь. После скачивания PyPy готов к запуску после распаковки архива. Если необходимо сделать PyPy доступным для всей системы, достаточно поместить символическую ссылку на исполняемый файл pypy в /usr/local/bin. Также можно поставить с помощью pyenv.

PyPy работает на Mac, Linux (не все дистрибутивы) или Windows.

Для запуска кода с помощью PyPy вместо команды python3 (как c помощью CPython) достаточно воспользоваться командой pypy3:

Pyston

Pyston — это форк CPython 3.8.8 с дополнительной оптимизацией производительности. В настоящее время он поддерживает установку только из исходников. Или с помощью pyenv.

В Pyston поддерживаются все возможности CPython, в том числе C API для разработки расширений на языке Си. Среди основных отличий Pyston от CPython помимо общих оптимизаций выделяется использование DynASM JIT и inline-кэширования. 

Splash Screen (Experimental)¶

Note

This feature is incompatible with macOS. In the current design, the
splash screen operates in a secondary thread, which is disallowed by
the Tcl/Tk (or rather, the underlying GUI toolkit) on macOS.

Some applications may require a splash screen as soon as the application
(bootloader) has been started, because especially in onefile mode large
applications may have long extraction/startup times, while the bootloader
prepares everything, where the user cannot judge whether the application
was started successfully or not.

The bootloader is able to display a one-image (i.e. only an image) splash
screen, which is displayed before the actual main extraction process starts.
The splash screen supports non-transparent and hard-cut-transparent images as background
image, so non-rectangular splash screens can also be displayed.

This splash screen is based on Tcl/Tk, which is the same library used by the Python
module tkinter. PyInstaller bundles the dynamic libraries of tcl and tk into the
application at compile time. These are loaded into the bootloader at startup of the
application after they have been extracted (if the program has been packaged as an
onefile archive). Since the file sizes of the necessary dynamic libraries are very small,
there is almost no delay between the start of the application and the splash screen.
The compressed size of the files necessary for the splash screen is about 1.5 MB.

As an additional feature, text can optionally be displayed on the splash screen. This
can be changed/updated from within Python. This offers the possibility to
display the splash screen during longer startup procedures of a Python program
(e.g. waiting for a network response or loading large files into memory). You
can also start a GUI behind the splash screen, and only after it is completely
initialized the splash screen can be closed. Optionally, the font, color and
size of the text can be set. However, the font must be installed on the user
system, as it is not bundled. If the font is not available, a fallback font is used.

Using __file__¶

When your program is not bundled, the Python variable refers to
the current path of the module it is contained in. When importing a module
from a bundled script, the PyInstaller bootloader will set the module’s
attribute to the correct path relative to the bundle folder.

For example, if you import from a bundled script, then
the attribute of that module will be . So if you have a data file at
that you added to the bundle at ,
the following code will get its path (in both the non-bundled and the bundled
case):

from os import path
path_to_dat = path.abspath(path.join(path.dirname(__file__), 'file.dat'))

In the main script (the module) itself, the
variable contains path to the script file. In Python 3.8 and earlier,
this path is either absolute or relative (depending on how the script
was passed to the interpreter), while in Python 3.9 and later,
it is always an absolute path. In the bundled script, the PyInstaller
bootloader always sets the variable inside the
module to the absolute path inside the bundle directory, as if the
byte-compiled entry-point script existed there.

For example, if your entry-point script is called , then
the attribute inside the bundled script will point to
. Therefore, locating a data file relative
to the main script can be either done directly using or
via the parent path of the inside the main script.

The following example will get the path to a file
located next to the main script if not bundled and inside the bundle folder
if it is bundled:

from os import path
bundle_dir = path.abspath(path.dirname(__file__))
path_to_dat = path.join(bundle_dir, 'other-file.dat')

Or, if you’d rather use pathlib:

from pathlib import Path
bundle_dir = Path(__file__).parent
path_to_dat = Path.cwd()  bundle_dir  "other-file.dat"

Changed in version 4.3: Formerly, the attribute of the entry-point script
(the module) was set to only its basename rather than
its full (absolute or relative) path within the bundle directory.
Therefore, PyInstaller documentation used to suggest
as means for locating resources relative to the bundled entry-point
script. Now, is always set to the absolute full path,
and is the preferred way of locating such resources.

Using UPX¶

UPX is a free utility available for most operating systems.
UPX compresses executable files and libraries, making them smaller,
sometimes much smaller.
UPX is available for most operating systems and can compress
a large number of executable file formats.
See the UPX home page for downloads, and for the list of
supported executable formats.

A compressed executable program is wrapped in UPX
startup code that dynamically decompresses the program
when the program is launched.
After it has been decompressed, the program runs normally.
In the case of a PyInstaller one-file executable that has
been UPX-compressed, the full execution sequence is:

  • The compressed program start up in the UPX decompressor code.
  • After decompression, the program executes the PyInstaller bootloader,
    which creates a temporary environment for Python.
  • The Python interpreter executes your script.

Как скомпилировать Python код в .exe | практикум

Для начала, нам нужно установить pyinstaller с помощью pip. Пишем команду в командной строке:

pip install pyinstaller

Если вы используете Linux и у вас не установлен pip, то просто напишите команду:

apt-get install python-pip

На Windows, если вы не изменяли конфигурации установки Python, проблемы отсутствия pip у вас возникнуть не должно.

Вторым шагом будет переход в директорию с нашим проектом. Просто копируем путь и с помощью команды cd (наш путь) переходим в директорию, для Linux и Windows команда одинаковая.

Теперь давайте скомпилируем наш Python код в .exe, не будем тянуть.

Сделаем мы это с помощью установленного пакета pyinstaller.

Пишем команду:

pyinstaller -F -w -i( to set up icon on your .exe) main.py

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

  • -F – этот флаг отвечает за то, чтобы в созданной папке dist, в которой и будет храниться наш исполняемый файл не было очень много лишних файлов, модулей и т.п.
  • -w – этот флаг вам понадобится в том случае, если приложение использует tkinekt, оно блокирует создание консольного окна, если же ваше приложение консольное, вам этот флаг использовать не нужно.
  • -i – этот флаг отвечает за установку иконки на наш исполняемый файл, после флага нужно указать полный путь к иконке с указанием её имени. Например: D:\LayOut\icon.ico

Вот и всё, сегодня мы рассмотрели, как скомпилировать Python код в .exe, Если у вас остались какие-либо вопросы, пишите их в комментарии, с удовольствием отвечу.

Так же подписывайтесь на обновления сайта, тут будет ещё много интересного!

Удачи в жизни и до встречи!

Providing PyInstaller Hooks with your Package¶

As a package developer you can provide hooks for PyInstaller
within your package.
This has the major benefit
that you can easily adopt the hooks
when your package changes.
Thus your package’s users don’t need to wait until PyInstaller
might catch up with these changes.
If both PyInstaller and your package provide hooks for some module,
your package’s hooks take precedence,
but can still be overridden by the command line option
.

You can tell PyInstaller about the additional hooks
by defining some simple
in your package.
Therefore add entries like these to your :

options.entry_points
pyinstaller40 =
  hook-dirs = pyi_hooksample.__pyinstallerget_hook_dirs
  tests     = pyi_hooksample.__pyinstallerget_PyInstaller_tests

This defines two entry-points:

for hook registration

This entry point refers to a function
that will be invoked with no parameters.
It must return a sequence of strings,
each element of which provides an additional absolute path
to search for hooks.
This is equivalent to passing the
command-line option to PyInstaller for each string in the sequence.

In this example, the function is .

for test registration

This entry point refers to a function
that will be invoked with no parameters.
It must return a sequence of strings,
each element of which provides an additional absolute path
to a directory tree or to a Python source file.
These paths are then passed to pytest for test discovery.
This allows both testing by this package and by PyInstaller.

In this project, the function is .

Supporting Multiple Platforms¶

If you distribute your application for only one combination of OS and Python,
just install PyInstaller like any other package and use it in your
normal development setup.

Supporting Multiple Python Environments

When you need to bundle your application within one OS
but for different versions of Python and support libraries – for example,
a Python 3 version and a Python 2.7 version;
or a supported version that uses Qt4 and a development version that uses Qt5 –
we recommend you use virtualenv.
With virtualenv you can maintain different combinations of Python
and installed packages, and switch from one combination to another easily.
(If you work only with Python 3.4 and later,
does the same job, see module venv.)

  • Use virtualenv to create as many different development environments as you need,
    each with its unique combination of Python and installed packages.
  • Install PyInstaller in each environment.
  • Use PyInstaller to build your application in each environment.

Note that when using virtualenv, the path to the PyInstaller commands is:

  • Windows: ENV_ROOT\Scripts
  • Others: ENV_ROOT/bin

Under Windows, the pip-Win package installs virtualenv and makes it
especially easy to set up different environments and switch between them.
Under Linux and Mac OS, you switch environments at the command line.

See PEP 405 for more information about Python virtual environments.

Запуск программ

Пока наш Python может работать только через командную строку — какие команды введёте, те он и выполнит. Многим разработчикам это нравится, но для старта это неудобно. Например, чтобы запустить программу, нужно написать в командной строке так:

Полное имя означает, что нужно написать не только название файла, но и диск с папкой, где он находится. Чтобы было понятнее, давайте возьмём наш код из статьи про таймер на Python и сохраним его в файле time.py3 на диске D. Py3 означает, что внутри этого файла будет код на Python3

Можно просто назвать файл python.py, без тройки, но для некоторых моментов это может быть важно

Теперь, чтобы запустить наш код, напишем в командной строке:

Результат работы — выполненный алгоритм:

Shortening the Command¶

Because of its numerous options, a full command
can become very long.
You will run the same command again and again as you develop
your script.
You can put the command in a shell script or batch file,
using line continuations to make it readable.
For example, in GNU/Linux:

pyinstaller --noconfirm --log-level=WARN \
    --onefile --nowindow \
    --add-data="README:." \
    --add-data="image1.png:img" \
    --add-binary="libfoo.so:lib" \
    --hidden-import=secret1 \
    --hidden-import=secret2 \
    --upx-dir=/usrlocalshare \
    myscript.spec

Or in Windows, use the little-known BAT file line continuation:

Функция sum(a, b)

Скомпилируем функцию суммы от двух переменных:

Перед запуском компиляции я ожидал увидеть примерно следующий код на С:

Однако результат оказался cущественно иным (код немного упрощен):

Рассмотрим, что тут происходит. Во-первых, так как мы не знаем типы входных переменных, функция в качестве аргументов принимает указатели на объекты класса PyObject, по сути это внутренние CPython структуры. Далее компилятор должен сложить эти объекты, но как, если настоящие типы аргументов неизвестны во время компиляции: это могут быть целые числа, числа с плавающей точкой, списки и вообще не факт, что аргументы можно складывать, тогда нужно вернуть ошибку. И что же делает в этом случае mypyc? 

Как оказалось, все очень просто: он просит CPython самостоятельно сложить эти аргументы. Функция PyNumber_Add — это внутренняя функция СPython, которая доступна из расширения, ведь СPython отлично умеет складывать свои объекты.

Взаимодействие CPython c Extension можно изобразить следующим диалогом:

Вот такой нехитрый прием используется при компиляции динамического кода: компилируем все, что можем, а все остальное отдаем интерпретатору. 

Конечно, данный пример выглядит гротескно, но даже несмотря на такую неэффективность, mypyc позволяет добиться существенного прироста производительности, как в примере с сортировкой.

6 ответов

Лучший ответ

Есть два шага: сначала собрать исполняемый файл Python. Для этого вам понадобится что-то вроде py2exe, «которое преобразует скрипты Python в исполняемые программы Windows, способные работать без требующий установки Python. «

Затем, когда у вас есть исполняемый файл, чтобы дать ему значок, вы можете использовать ответ на этот вопрос: Добавить значок к существующему файлу EXE из командной строки для этого последнего штриха.

3

Community
23 Май 2017 в 10:33

Нельзя добавить пользовательский значок в простой скрипт Python, но если вы преобразуете его в исполняемый файл Windows, используя py2exe , вы можете указать ресурсы значков для использования. В их вики есть практические рекомендации.

5

Cairnarvon
28 Май 2013 в 00:16

jarmod
28 Май 2013 в 00:18

Ты не можешь В Windows пользовательские значки могут быть назначены только определенным типам файлов (в основном исполняемым файлам и ярлыкам), и сценарии Python не относятся к таким типам.

1

duskwuff -inactive-
28 Май 2013 в 00:12

Если вы пытаетесь изменить значок ярлыка для вашей программы

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

  • затем перетащите этот ярлык на рабочий стол

  • затем щелкните правой кнопкой мыши этот ярлык и выберите свойства

  • затем нажмите «Изменить значок»

  • затем перейдите туда, где ваше изображение .ico сохранено и установите его в качестве значка

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

Это то, как вы меняете значок ярлыка, но невозможно изменить действительный значок окна в углу, если вы не используете что-то вроде To или Pygame

Serial
28 Май 2013 в 00:16

Решение @ dmitri работает, но Py2Exe остановил разработку на python 3.4 и не будет работать с более новыми версиями. PyInstaller также сделает это.

Python версия 3.7.3.

2

recurseuntilfor
16 Окт 2019 в 13:16

Простая программа Python в Pycharm. Пакет генерирует программу EXE

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги:  Python  Python  Пакет  exe

Как упаковать программу Python для пакета выполнения программы EXE?

1 Откройте Pycharm, как показано ниже:

2. Сделайте свой путь в интерфейсе открытых настроек:

3, выполните следующие операции

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

4. Мы увидим Pyinstaller, который вы выбираете для установки и его версии, нажмите для завершения

5. Только вышеуказанные шаги не успешно генерируются, как показано ниже: 3.3.1 — версия Pyinstaller

На этом этапе это означает, что пакет установлен, генерирует файл PY в файл EXE, есть два способа:

Метод один:

Генерировать успех, как показано ниже

Этот способ каждый раз больше хлопот, мы можем установить Pyinstaller на внешние инструменты в Pycharm.ВторойПоказано

Второй

Ведь настройте, нажмите , чтобы завершить

Создание файла EXE находится в папке Dist под текущим каталогом проекта

Примечание

В пакете в файле EXE необходимо обратить на него внимание

1. Заполните загрузку и установку Pyinstaller в сети

2

При установке Pyinstaller обратите внимание на выбор версии установки, вы должны соответствовать вашей собственной версии Python, вы не можете быть выше, чем версия Python

Интеллектуальная рекомендация

Ежедневный обмен знаниями То, что я узнал сегодня —— 1、bool-Применение простых чисел Вышеупомянутый оператор эквивалентен значению переменной b, равному false. При использовании внутри цикла дл…

0x00 Обзор Анализ удержания пользователей — это метод анализа данных, широко используемый в эпоху Интернета. Многие быстрорастущие компании не имеют соответствующих методологических ограничений, что п…

Используйте прозрачную текстуру холста для ThreeJS пример HTML CSS JS пример HTML CSS JS…

Предоставьте прокси для других объектов, чтобы контролировать доступ к этому объекту.   В некоторых случаях клиент не хочет или не может напрямую ссылаться на объект. В настоящее время использует…

KotlinдаJetBrainsРазработанный современный язык программирования может работать в среде JVM, а также может использоваться для разработки приложений Android. Вышла его версия 1.0Beta, вот и новая верси…

Вам также может понравиться

Renderings Например, я хочу добавить в каждый столбец»Детские туфли»с»Традиционная модельИ измените цвет шрифта накрасный Код реализации выглядит следующим образом: Традиционный режим -…

 …

web (используйте интерфейс Dada для улучшения навыков интерфейса) Знание того, как работает браузер, может помочь вам понять интерфейс с более высокой точки зрения. Три основных направления процесса р…

Реализация окна Вызвать функцию window_demo, скомпилировать и запустить    …

Системная среда Операционная система: macOS catalina(10.15) версия virtualbox:6.0.14 r133895 описание проблемы Обновить старую версиюVirtualBox 5кVirtualBox 6.0После этого я нашелdocker-machine startВ…

4.5 (2021-08-01)¶

Features

(POSIX) Add exclude_system_libraries function to the Analysis class
for .spec files,
to exclude most or all non-Python system libraries from the bundle.
Documented in new POSIX Specific Options section. (#6022)

Bugfix

  • (Cygwin) Add to DLL search path to fix loading of python shared
    library in onefile builds made in cygwin environment and executed outside of
    it. (#6000)

  • (Linux) Display missing library warnings for “not found” lines in
    output (i.e., ) instead of quietly
    ignoring them. (#6015)

  • (Linux) Fix spurious missing library warning when points to
    . (#6015)

  • (macOS) Fix python shared library detection for non-framework python builds
    when the library path cannot be inferred from imports of the
    executable. (#6021)

  • (macOS) Fix the crashes in bundles of -based
    applications
    created using Homebrew python 3.9 and Tcl/Tk 8.6.11. (#6043)

  • (macOS) When fixing executable for codesigning, update the value of
    field in the segment. (#6039)

  • Downgrade messages about missing dynamic link libraries from ERROR to
    WARNING. (#6015)

  • Fix a bytecode parsing bug which caused tuple index errors whilst scanning
    modules which use . (#6007)

  • Fix an error when rhtooks for and are used
    together. (#6018)

  • Fix architecture detection on Apple M1 (#6029)

  • Fix crash in windowed bootloader when the traceback for unhandled exception
    cannot be retrieved. (#6070)

  • Improve handling of errors when loading hook entry-points. (#6028)

  • Suppress missing library warning for () and
    () shared library. (#6015)

Incompatible Changes

(macOS) Disable processing of Apple events for the purpose of argv emulation
in onedir application bundles. This functionality was introduced in
PyInstaller 4.4 by (#5920) in response to feature requests
(#5436) and (#5908), but was discovered to be breaking
tkinter-based onedir bundles made with Homebrew python 3.9 and
Tcl/Tk 8.6.11 (#6043). As such, until the cause is investigated
and the issue addressed, this feature is reverted/disabled. (#6048)

Hooks

  • Add a hook for to deal with indirect import of
    and the missing template file. (#6010)

  • Simplify the and by
    merging most of their code into a common helper function. (#6020)

PyInstaller Core

Isolate discovery of 3rd-party hook directories into a separate
subprocess to avoid importing packages in the main process. (#6032)

Supporting Multiple Platforms¶

If you distribute your application for only one combination of OS and Python,
just install PyInstaller like any other package and use it in your
normal development setup.

Supporting Multiple Python Environments

When you need to bundle your application within one OS
but for different versions of Python and support libraries – for example,
a Python 3.6 version and a Python 3.7 version;
or a supported version that uses Qt4 and a development version that uses Qt5 –
we recommend you use venv.
With venv you can maintain different combinations of Python
and installed packages, and switch from one combination to another easily.
These are called virtual environments or venvs in short.

  • Use venv to create as many different development environments as you need,
    each with its unique combination of Python and installed packages.
  • Install PyInstaller in each virtual environment.
  • Use PyInstaller to build your application in each virtual environment.

Note that when using venv, the path to the PyInstaller commands is:

  • Windows: ENV_ROOT\Scripts
  • Others: ENV_ROOT/bin

Under Windows, the pip-Win package makes it
especially easy to set up different environments and switch between them.
Under GNU/Linux and Mac OS, you switch environments at the command line.

See PEP 405
and the official Python Tutorial on Virtual Environments and Packages
for more information about Python virtual environments.

Giving Run-time Python Options¶

You can pass command-line options to the Python interpreter.
The interpreter takes a number of command-line options but only the
following are supported for a bundled app:

  • to write a message to stdout each time a module is initialized.

  • for unbuffered stdio.

  • and an option to change warning behavior: or
    or .

To pass one or more of these options,
create a list of tuples, one for each option, and pass the list as
an additional argument to the EXE call.
Each tuple has three elements:

  • The option as a string, for example or .

  • None

  • The string

For example modify the spec file this way:

options =  ('v', None, 'OPTION'), ('W ignore', None, 'OPTION') 
a = Analysis( ...
            )
...
exe = EXE(pyz,
      a.scripts,
      options,   <--- added line
      exclude_binaries=...
      )

Building Mac OS X App Bundles¶

Under Mac OS X, PyInstaller always builds a UNIX executable in
.
If you specify , the output is a folder named
containing supporting files and an executable named .
If you specify , the output is a single UNIX executable
named .
Either executable can be started from a Terminal command line.
Standard input and output work as normal through that Terminal window.

If you specify with either option, the folder
also contains an OS X application named .

As you probably know, an application is a special type of folder.
The one built by PyInstaller contains a folder always named
which contains:

Use the argument to specify a custom icon for the application.
It will be copied into the folder.
(If you do not specify an icon file, PyInstaller supplies a
file with the PyInstaller logo.)

Use the argument to add a bundle identifier.
This becomes the used in code-signing
(see the PyInstaller code signing recipe
and for more detail, the Apple code signing overview technical note).

The pyi_splash Module¶

The splash screen is controlled from within Python by the module, which can
be imported at runtime. This module cannot be installed by a package manager
because it is part of PyInstaller and is included as needed.
This module must be imported within the Python program. The usage is as follows:

import pyi_splash

# Update the text on the splash screen
pyi_splash.update_text("PyInstaller is a great software!")
pyi_splash.update_text("Second time's a charm!")

# Close the splash screen. It does not matter when the call
# to this function is made, the splash screen remains open until
# this function is called or the Python program is terminated.
pyi_splash.close()