Создаем exe

Файл spec

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

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

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

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

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

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

Копировать

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

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

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

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

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

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

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

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

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.

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).

8 ответов

Лучший ответ

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

Apple пошла дальше и изменила содержимое сертификата. Чтобы быть более точным, он добавил новое поле «OU» (организационная единица) в тему. Отменив и восстановив подпись кода, он добавил недостающее поле, и проблемы исчезли.

13

BlitzHiryu
16 Сен 2015 в 02:04

Моя проблема была решена удалением «use_frameworks!» и заменив его на «use_modular_headers!» в Podfile и выполняя обновление модуля и установку модуля в терминале.

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

Bsl Dngl
6 Мар 2020 в 11:59

Ну, в моем случае я использую cocoapods, и из файлов pod измените:

К

Затем все начинает работать … Я не знаю почему

Ren
20 Фев 2020 в 00:51

Очистить производные данные Xcode

Запустите Finder> Перейти> Перейти в папку> Вставьте строку ниже

Теперь перезапустите Xcode.

Mohit Tomar
23 Ноя 2016 в 14:38

Просто для любых других людей, которые, как я, столкнулись с этой проблемой совсем недавно и задаются вопросом, где и как именно отозвать, какой объект подписи кода (он находится в Настройках> Учетная запись):

Утром у меня тоже все шло нормально. Еще где-то читал про перезагрузку. Итак, перед тем, как пройти еще один длительный сеанс подписания идентификационных данных-профилей, я просто перезапустил свою машину. И это, по-видимому, исправило это без каких-либо дополнительных усилий.

Swift, Xcode 7.3 в OS X 10.11.4.

marco
8 Июн 2016 в 17:50

Простое изменение профиля подписи кода устранило проблему. Перейти к цели. Затем выбрал другой вариант в General-> Signing-> Team.

1

Asma Zubair
27 Янв 2018 в 03:33

Оказывается, Xcode кэширует некоторые специфические для устройства вещи, которые могут смешаться, если вы запускаете свои приложения на нескольких устройствах. Простое исправление — удалить кеш Xcode. Следующая команда очистит его для вас

11

Tarik
18 Апр 2017 в 08:13

Если это кому-то поможет, ни одно из решений, которые я продолжал находить в Интернете, не помогало мне. Выдергивал мои волосы 2 дня и все перепробовал. Я отозвал внутренний сертификат, новый профиль обеспечения, добавил файлы во встроенные и т. Д.

Не мог, хоть убей, понять, что случилось, пока не заметил, что в доступе к Связке ключей мои сертификаты Apple WWDR и iOS Distributions были установлены на вместо «Использовать системы по умолчанию». Вернул свои сертификаты на , и все вернулось к нормальной работе. Я понятия не имею, почему и как это работает, но это было так.

13

Geoherna
24 Авг 2016 в 18:51

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

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

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

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

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

Копировать

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

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

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

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

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()

3 ответа

Лучший ответ

Я внес ряд изменений, которые привели к компиляции и правильной работе сборки.

Во-первых, в pyinstaller отсутствует файл «ловушки» для панд, поэтому его необходимо создать вручную. Для меня папка ловушек была расположена здесь: «C: \ Users \ natha \ AppData \ Local \ Programs \ Python \ Python36-32 \ Lib \ site-packages \ PyInstaller \ hooks»

Внутри этой папки я создал файл с именем hook-pandas.py, и единственным содержимым этого файла была одна строка: hiddenimports =

Я установил Windows 10 SDK, но я не уверен, была ли это только частью проблемы, или на что это повлияло, если что-нибудь. Моя программа была составлена из нескольких модулей, потому что я люблю разделять процессы разных типов в разных файлах. Однако для упрощения я объединил весь свой код в один файл .py и имел только один другой файл, который содержал мой автоматически сгенерированный код графического интерфейса PyQt5 / Qt Designer. Я удалил все импорта, которые читаются как

Я получил ошибки в нескольких сборках, когда казалось, что pyinstaller не распознает эти вещи. Так что я держал вещи очень прямо, как

Наконец, когда я пошел компилировать сборку с помощью команды -p, я добавил два пути к файлам; один указывал на корневой каталог моей программы, где был сохранен другой модуль (модуль PyQt5), а второй путь был на «C: \ Users \ natha \ AppData \ Local \ Programs \ Python \ Python36-32 \ Lib \ сайт -пакеты » . Как только эти вещи будут созданы, компиляция будет завершена в обычном режиме, и сборка будет выполнена идеально. Итак, в итоге, ключи к успеху здесь:

-Убедитесь, что есть файл hook-pandas.py, если в вашем скрипте используется pandas -Обеспечите, чтобы файл hook-pandas.py содержал следующую строку:

-И убедитесь, что команда -p используется для направления pyinstaller туда, где хранятся ваши пользовательские модули и все пакеты python. Моя команда -p читается так:

Обратите внимание на двоеточие, разделяющее два пути. Я думаю, что это основные вещи для проверки, а второстепенные вещи будут

Я думаю, что это основные вещи для проверки, а второстепенные вещи будут

Введите импорт, чтобы избежать тех.

NL23codes
16 Июн 2018 в 06:21

Забавно, что кто-то задал похожий вопрос ~ 44 минуты назад, но использовал python с excel.

Во всяком случае, надеюсь, что этот ответ здесь работает, и аудитор / модератор не волнуется об этом; p

Я скопировал инструкции из моего рекомендованного решения и использовал ссылку в качестве дополнительной. https://www.youtube.com/watch?v=OZSZHmWSOeM

Py to exe Project

Предпосылки

Python: Python 2.7 или Python 3.3+ (в основном все, на чем работает pyinstaller)

Chrome: запустить пользовательский интерфейс

Установка

Загрузите заархивированную папку

Откройте cmd / терминал и в разархивированную папку (сейчас рекомендуем разместить ее на рабочем столе)

Выполнить

Запуск приложения

Запустить . Chrome откроется в режиме приложения с запущенным проектом.

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

Выберите местоположение вашего скрипта (вставьте или используйте проводник)

Контур адресного поля станет синим, когда файл существует

Выберите другие параметры и добавьте такие вещи, как значок или другие файлы

Нажмите большую синюю кнопку внизу, чтобы преобразовать

Найдите ваши конвертированные файлы в / output, когда закончите

Передача файла с аргументами

В качестве альтернативы вы можете выполнить python . Это откроет окно с именем файла в месте расположения скрипта.

guest134
14 Июн 2018 в 02:55

Вам необходимо установить Windows 10 SDK, а затем обновить путь, чтобы включить dll-файлы ucrt, которые можно найти здесь после установки:

C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt \ DLLs \ x86

Adam Smith
14 Июн 2018 в 03:18

Capturing Windows Version Data¶

A Windows app may require a Version resource file.
A Version resource contains a group of data structures,
some containing binary integers and some containing strings,
that describe the properties of the executable.
For details see the Microsoft Version Information Structures page.

Version resources are complex and
some elements are optional, others required.
When you view the version tab of a Properties dialog,
there’s no simple relationship between
the data displayed and the structure of the resource.
For this reason PyInstaller includes the command.
It is invoked with the full path name of any Windows executable
that has a Version resource:

The command writes text that represents
a Version resource in readable form to standard output.
You can copy it from the console window or redirect it to a file.
Then you can edit the version information to adapt it to your program.
Using you can find an executable that displays the kind of
information you want, copy its resource data, and modify it to suit your package.

The version text file is encoded UTF-8 and may contain non-ASCII characters.
(Unicode characters are allowed in Version resource string fields.)
Be sure to edit and save the text file in UTF-8 unless you are
certain it contains only ASCII string values.

Your edited version text file can be given with the
option to or .
The text data is converted to a Version resource and
installed in the bundled app.

In a Version resource there are two 64-bit binary values,
and .
In the version text file these are given as four-element tuples,
for example:

filevers=(2, , 4, ),
prodvers=(2, , 4, ),

The elements of each tuple represent 16-bit values
from most-significant to least-significant.
For example the value resolves to
in hex.

You can also install a Version resource from a text file after
the bundled app has been created, using the command:

The utility reads a version text file as written
by , converts it to a Version resource,
and installs that resource in the executable_file specified.

The Windows Deployment Tool

The Windows deployment tool is designed to automate the process of creating a deployable folder containing the -related dependencies (libraries, QML imports, plugins, and translations) required to run the application from that folder. It creates a sandbox for Universal Windows Platform (UWP) or an installation tree for Windows desktop applications, which can be easily bundled into an installation package.

The tool can be found in . It needs to be run within the build environment in order to function correctly. When using Qt Installer, the script should be used to set it up.

takes an file or a directory that contains an file as an argument, and scans the executable for dependencies. If a directory is passed with the argument, uses the tool to scan QML files inside the directory for QML import dependencies. Identified dependencies are then copied to the executable’s directory.

In case Qt was built with the configure switch turned off, replaces the hardcoded local paths in Qt5Core.dll by relative ones.

For Windows desktop applications, the required runtime files for the compiler are also copied to the deployable folder by default (unless the option is specified). In the case of release builds using Microsoft Visual C++, these consist of the Visual C++ Redistributable Packages, which are intended for recursive installation by the application’s installer on the target machine. Otherwise, the shared libraries of the compiler runtime are used.

The application may require additional 3rd-party libraries (for example, database libraries), which are not taken into account by windeployqt.

Additional arguments are described in the tools’ help output:

Usage: windeployqt  
Qt Deploy Tool 5.14.1

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays help on commandline options.
  --help-all                Displays help including Qt specific options.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --plugindir <path>        Copy plugins to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --pdb                     Deploy .pdb files (MSVC).
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-patchqt              Do not patch the Qt5Core library.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --qmlimport <directory>   Add the given path to the QML module search
                            locations.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-virtualkeyboard      Disable deployment of the Virtual Keyboard.
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --angle                   Force deployment of ANGLE.
  --no-angle                Disable deployment of ANGLE.
  --no-opengl-sw            Do not deploy the software rasterizer library.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level (0-2).

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets
script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webview

Arguments:
                     Binaries or directory containing the binary.

The Splash Target¶

For a splash screen to be displayed by the bootloader, the target must be called
at build time. This class can be added when the spec file is created with the command-line
option . By default, the option to
display the optional text is disabled
(). For more information about the splash screen, see
section. The Target looks like this:

a = Analysis(...)

splash = Splash('image.png',
                binaries=a.binaries,
                datas=a.datas,
                text_pos=(10, 50),
                text_size=12,
                text_color='black')

Splash bundles the required resources for the splash screen into a file,
which will be included in the CArchive.

A has two outputs, one is itself and one is stored in
. Both need to be passed on to other build targets in
order to enable the splash screen.
To use the splash screen in a onefile application, please follow this example:

a = Analysis(...)

splash = Splash(...)

# onefile
exe = EXE(pyz,
          a.scripts,
          splash,                   # <-- both, splash target
          splash.binaries,          # <-- and splash binaries
          ...)

In order to use the splash screen in a onedir application, only a small change needs
to be made. The attribute has to be moved into the target,
since the splash binaries do not need to be included into the executable:

a = Analysis(...)

splash = Splash(...)

# onedir
exe = EXE(pyz,
          splash,                   # <-- splash target
          a.scripts,
          ...)
coll = COLLECT(exe,
               splash.binaries,     # <-- splash binaries
               ...)

On Windows/macOS images with per-pixel transparency are supported. This allows
non-rectengular splash screen images. On Windows the transparent borders of the image
are hard-cuted, meaning that fading transparent values are not supported. There is
no common implementation for non-rectengular windows on Linux, so images with per-
pixel transparency is not supported.

The splash target can be configured in various ways. The constructor of the
target is as follows:

Multipackage Bundles¶

Some products are made of several different apps,
each of which might
depend on a common set of third-party libraries, or share code in other ways.
When packaging such a product it
would be a pity to treat each app in isolation, bundling it with
all its dependencies, because that means storing duplicate copies
of code and libraries.

You can use the multipackage feature to bundle a set of executable apps
so that they share single copies of libraries.
You can do this with either one-file or one-folder apps.
Each dependency (a DLL, for example) is packaged only once, in one of the apps.
Any other apps in the set that depend on that DLL
have an “external reference” to it, telling them
to extract that dependency from the executable file of the app that contains it.

This saves disk space because each dependency is stored only once.
However, to follow an external reference takes extra time when an app is starting up.
All but one of the apps in the set will have slightly slower launch times.

The external references between binaries include hard-coded
paths to the output directory, and cannot be rearranged.
If you use one-folder mode, you must
install all the application folders within a single parent directory.
If you use one-file mode, you must place all
the related applications in the same directory
when you install the application.

To build such a set of apps you must code a custom
spec file that contains a call to the function.
This function takes a list of analyzed scripts,
finds their common dependencies, and modifies the analyses
to minimize the storage cost.

The order of the analysis objects in the argument list matters.
The MERGE function packages each dependency into the
first script from left to right that needs that dependency.
A script that comes later in the list and needs the same file
will have an external reference to the prior script in the list.
You might sequence the scripts to place the most-used scripts first in the list.

A custom spec file for a multipackage bundle contains one call to the MERGE function:

MERGE(*args)

MERGE is used after the analysis phase and before and .
Its variable-length list of arguments consists of
a list of tuples, each tuple having three elements:

  • The first element is an Analysis object, an instance of class Analysis,
    as applied to one of the apps.

  • The second element is the script name of the analyzed app (without the extension).

  • The third element is the name for the executable (usually the same as the script).

MERGE examines the Analysis objects to learn the dependencies of each script.
It modifies these objects to avoid duplication of libraries and modules.
As a result the packages generated will be connected.

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

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

Копировать

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

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

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

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

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

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

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

Spec File Operation¶

After PyInstaller creates a spec file,
or opens a spec file when one is given instead of a script,
the command executes the spec file as code.
Your bundled application is created by the execution of the spec file.
The following is a shortened example of a spec file for a minimal, one-folder app:

block_cipher = None
a = Analysis(,
     pathex='/Developer/PItests/minimal'],
     binaries=None,
     datas=None,
     hiddenimports=[],
     hookspath=None,
     runtime_hooks=None,
     excludes=None,
     cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
     cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)

The statements in a spec file create instances of four classes,
, , and .

  • A new instance of class takes a list of script names as input.
    It analyzes all imports and other dependencies.
    The resulting object (assigned to ) contains lists of dependencies
    in class members named:

    • : the python scripts named on the command line;

    • : pure python modules needed by the scripts;

    • : a list of paths to search for imports (like using
      ), including paths given by the
      option.

    • : non-python modules needed by the scripts, including names
      given by the option;

    • : non-binary files included in the app, including names given
      by the option.

  • An instance of class is a archive (described
    under below), which contains all the
    Python modules from .

  • An instance of is built from the analyzed scripts and the
    archive. This object creates the executable file.

  • An instance of creates the output folder from all the other parts.

In one-file mode, there is no call to , and the
instance receives all of the scripts, modules and binaries.

Globals Available to the Spec File¶

While a spec file is executing it has access to a limited set of global names.
These names include the classes defined by PyInstaller:
, , , , ,
, , and ,
which are discussed in the preceding sections.

Other globals contain information about the build environment:

The relative path to the folder where
the application will be stored.
The default path is relative to the current directory.
If the option is used, contains that value.

The absolute path to the PyInstaller
distribution, typically in the current Python site-packages folder.

The complete spec file argument given to the
command, for example
or .

The path prefix to the value as returned by .

The name of the spec file, for example .

The path to the directory. The default is relative to
the current directory. If the option is used,
contains that value.

The full path to the warnings file in the build directory,
for example .

Parameters

The name of the module. This can be either a library module (a .dll file) or an executable
module (an .exe file). The name specified is the file name of the module and is not related to the
name stored in the library module itself, as specified by the LIBRARY keyword in
the module-definition (.def) file.

If the string specifies a full path, the function searches only that path for the module.

If the string specifies a relative path or a module name without a path, the function uses a standard search
strategy to find the module; for more information, see the Remarks.

If the function cannot find the module, the function fails. When specifying a path, be sure to use
backslashes (\), not forward slashes (/). For more information about paths, see
Naming a File or Directory.

If the string specifies a module name without a path and the file name extension is omitted, the function
appends the default library extension .dll to the module name. To prevent the function from appending
.dll to the module name, include a trailing point character (.) in the module name string.

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:

Быстрая починка

Сначала убедитесь, что во внешней добавленной библиотеке выбран параметр «Встраивание» на вкладке «Общие», «Встроенные двоичные файлы».

Если все еще не работает ..

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

Обновите капсулы

Важно: убедитесь, что все библиотеки включены в список «Параметры сборки» -> «Библиотеки и фреймворки», и вы дали возможность встроить их в сборку. Просто здорово работаю

Просто здорово работаю

У меня сработало необязательное создание фреймворков на этапах сборки.

Для всех, кто пришел на эту страницу из-за того, что они получили эту ошибку, пытаясь связать стороннюю структуру со своим проектом с помощью Xcode 6.3.1, проблема, с которой я столкнулся, заключалась в том, что библиотека создавалась с более старой версией компилятора с использованием другой версии. быстрых. Единственный способ исправить это для меня — перестроить фреймворк.

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

установите для параметра сборки Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT) значение YES в вашем приложении

Вот ссылка на полный документ Apple, который объясняет это здесь

В нашем случае это приложение для iOS, построенное на Xcode 11.5, использующее cocoapods (и cocoapods-binary, если хотите).

Мы видели этот сбой:

Оказалось, что мне пришлось удалить кеш подов и повторно запустить установку подов, поэтому Xcode укажет на эту разницу:

Для тех, кто сталкивается с тем же с другой библиотекой или пакетом, @ user3835452 находится на правильном пути. Я нашел это сообщение при попытке запустить :

Попробовав много разных способов, я просто побежал и это исправило

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

Я исправил это, переустановив Homebrew

Удалить

Установить

Я просто использовал . В моем случае, .

Я столкнулся с проблемой сбоя приложения, цитирующей ошибку SIGABRT в потоке. Обзор сбоя — библиотека dyld не загружена, а изображение не найдено.

Это было замечено в Xcode 9.3. Причина, по которой я узнал, заключалась в том, что Xcode не собирает библиотеки динамически, поэтому мне пришлось сделать это вручную, что решило мою проблему сбоя.

Выполните следующие шаги:

  1. Перейти к этапам сборки
  2. Нажмите кнопку «+» вверху и выберите «Фаза создания нового файла».
  3. Выберите пункт назначения в качестве платформы и нажмите кнопку «+» ниже, чтобы добавить файлы.
  4. Выберите «Добавить другое» внизу, нажмите CMD + SHIFT + G и вставьте путь ниже,

Теперь вы сможете увидеть несколько быстрых дилибов. Выберите все быстрые библиотеки с расширением .dylib и нажмите «Открыть».

Они будут добавлены во встроенные двоичные файлы на общей вкладке приложения.

Создайте новую группу в папке проекта и добавьте все эти библиотеки.

Теперь запустите ваше приложение.

Если вы используете среду Conda в терминале, обновите samtools, чтобы решить эту проблему.

Лучший ответ выше, сначала проверьте, какой результат

otool -L

А затем сделайте следующее, если неверно

А также

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

Вместо этого воссоздайте virtualenv вот так

На этот раз, когда вы активируете virtualenv, он найдет правильный питон.

Ничего из вышеперечисленного не помогло мне, но сделал.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: