The spec file tells PyInstaller how to process your script. It encodes the script names and most of the options you give to the pyinstaller command.
The spec file is actually executable Python code. PyInstaller builds the app by executing the contents of the spec file. For many uses of PyInstaller you do not need to examine or modify the spec file. It is usually enough to give all the needed information such as hidden imports as options to the pyinstaller command and let it run. The options are the same options documented above for the pyinstaller command. This command creates the name. After you have created a spec file and modified it as necessary, you build the application by passing the spec file to the pyinstaller command:.
When you create a spec file, most command options are encoded in the spec file. When you build from a spec file, those options cannot be changed. If they are given on the command line they are ignored and replaced by the options in the spec file. After PyInstaller creates a spec file, or opens a spec file when one is given instead of a script, the pyinstaller command executes the spec file as code.
Your bundled application is created by the execution of the spec file. The following is an shortened example of a spec file for a minimal, one-folder app:. You modify the spec file to pass additional values to Analysis and to EXE. To add files to the bundle, you create a list that describes the files and supply it to the Analysis call.
To find the data files at run-time, see Run-time Information. The list of data files is a list of tuples. Each tuple has two values, both of which must be strings:. For example, to add a single README file to the top level of a one-folder app, you could modify the spec file as follows:.
That file will be looked up relative to the location of the spec file and copied into the top level of the bundled app.GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Have a question about this project?
Subscribe to RSS
Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub? Sign in to your account. Note: I have build only the main. You can use multiple imported files. I tested it with simple scripts and works well. What is giving problems is the import of the distinct libraries. I don't import with subprocess. I'm doing it with "import folder. Skip to content. Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign up. New issue. Jump to bottom. How can I package multiple. Labels kind:support. Copy link Quote reply. This comment has been minimized. Sign in to view. This is not supported by PyInstaller. I suggest using "import component" as the easiest way to get your expected result. I will consider every.
The dark mode beta is finally here. Change your preferences any time. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. I can add just the DLL but if I try to specify both files, pyinstaller complains. I would rather use the command line options rather than the spec file - what's the correct format for multiple files? Tried a few things, e.
I do not know which syntax is necessary for the command line, but you can edit the generated spec to include the path to to data, where data is a list of tuples. Learn more.
Include multiple data files with pyinstaller Ask Question. Asked 2 years, 3 months ago. Active 2 years, 3 months ago. Viewed 12k times. Active Oldest Votes.
The dark mode beta is finally here. Change your preferences any time. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. I am trying to convert my python application to an exe. I have seen things like py2exe and cx freeze, but they only compile one single py file.
Can anyone help me? Thank you. For example in PyInstalleryou can specify additional folders which should be involved in your executable file. I currently use pyinstaller for building projects into single-executable files.
These projects all contain multiple python and some non-python files that are all "built into" the exes. There is one entry point for a given executable. In summary, if you have multiple files as part of a single project, pyinstaller along with the other python bundlers will handle this scenario. If you have multiple files and want them each to be their own executable file, you will need to treat each as its own 'project' and package each individually.
What platform s are you targeting? Can you describe the intended purpose of the files? Can you describe the intended usage of the files? Posting an example of what you currently have, what behavior you are observing, and clarification on what is different between what you are expecting and what you are observing would definitely help others in guiding you towards the answer you desire.
I can add just the DLL but if I try to specify both files, pyinstaller complains. I would rather use the command line options rather than the spec file - what's the correct format for multiple files?
Tried a few things, e. I do not know which syntax is necessary for the command line, but you can edit the generated spec to include the path to to data, where data is a list of tuples. Learn more. Include multiple data files with pyinstaller Ask Question. Asked 2 years, 3 months ago. Active 2 years, 3 months ago.
Viewed 12k times. Active Oldest Votes. Nima Mousavi Nima Mousavi 1, 13 13 silver badges 28 28 bronze badges. Sign up or log in Sign up using Google. Sign up using Facebook. Sign up using Email and Password. Post as a guest Name. Email Required, but never shown. The Overflow Blog.
Subscribe to RSS
Q2 Community Roadmap. The Unfriendly Robot: Automatically flagging unwelcoming comments. Featured on Meta. Community and Moderator guidelines for escalating issues via new response…. Feedback on Q2 Community Roadmap.
PyInstaller analyzes myscript. In the dist folder you find the bundled app you distribute to your users. Normally you name one script on the command line. If you name more, all are analyzed and included in the output. However, the first script named supplies the name for the spec file and for the executable folder or file. Its code is the first to execute at run-time.
Packaging PyQt5 & PySide2 applications for Windows, with PyInstaller
For certain uses you may edit the contents of myscript. After you do this, you name the spec file to PyInstaller instead of the script:. The myscript. You typically do not need to specify any options when running pyinstaller with the spec file. Only a few command-line options have an effect when building from a spec file.
Provide assistance with debugging a frozen application. This argument may be provided multiple times to select several of the following options. Because of its numerous options, a full pyinstaller 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. When using this feature, you should be aware of how the Python bytecode optimization mechanism works.
The -OO flag additionally removes docstrings. Using this feature affects not only your main script, but all modules included by PyInstaller.
If your code or any module imported by your script relies on these features, your program may break or have unexpected behavior. PyInstaller can be run with Python optimization flags -O or -OO by executing it as a Python module, rather than using the pyinstaller command:.
You can use any PyInstaller options that are otherwise available with the pyinstaller command. For example:. 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.Please share with friends and colleagues! There is not much fun in creating your own desktop applications if you can't share them with other people — whether than means publishing it commercially, sharing it online or just giving it to someone you know.
Sharing your apps allows other people to benefit from your hard work! The good news is there are tools available to help you do just that with your Python applications which work well with apps built using Qt5. In this tutorial we'll look at the most popular tool for packaging Python applications: PyInstaller. This tutorial is broken down into a series of steps, using PyInstaller to build first simple, and then increasingly complex PyQt5 applications into distributable EXE files on Windows.
You can choose to follow it through completely, or skip ahead to the examples that are most relevant to your own project. You always need to compile your app on your target system.
So, if you want to create a Mac. If you're impatient, you can download the Piecasso Installer for Windows right away! Whatever project you're working on, you should be able to package your apps. You can also opt to install PyQt5 and PyInstaller in a virtual environment or your applications virtual environment to keep your environment clean.
It's a good idea to start packaging your application from the very beginning so you can confirm that packaging is still working as you develop it. This is particularly important if you add additional dependencies. If you only think about packaging at the end, it can be difficult to debug exactly where the problems are. For this example we're going to start with a simple skeleton app, which doesn't do anything interesting. Once we've got the basic packaging process working, we'll extend the application to include icons and data files.
We'll confirm the build as we go along. To start with, create a new folder for your application and then add the following skeleton app in a file named app. You can also download the source code and associated files. This is a basic bare-bones application which creates a custom QMainWindow and adds a simple widget QLabel to it. You can run this app as follows. Now we have our simple application skeleton in place, we can run our first build test to make sure everything is working.
Open your terminal command prompt and navigate to the folder containing your project.