I am very excited that Pyinstaller exists. I love being able to package an
app and send it off for anyone without python! But.. to get there, this
tool is misleadingly complicated..
Before you start.......
"It's very easy, all you do is pyinstaller x.py and you're done, with
everything included!! Even python and all dependencies!"
False. I had a simple project structure: one main py script, a dir with py
scripts, and a subdir with some js scripts. I had no idea that I had to
manually add these files to the spec file! I thought this would be done
automatically, looking at where I was running the pyinstaller command and
going recursively. You must add your own files!!!! Spec files are great..
way way better than cryptic add-on commands. But the syntax is kinda weird
too. I'll show you in a bit.. but..
Before you start.. it's cross platform blah blah blah.. WAIT!! Before you
begin.. it is, but you have to run pysinstaller on a windows machine for
windows, and pyinstaller on a mac machine for a mac app. You can't do both
on one OS!
Finally, it's recommended to not do --onefile until you are able to verify
that all files will be included by just running the regular pyinstaller
default. >>Pyinstaller will work once you do your share of the job!!<<
"Description: Pyinstaller will package up your python interpreter and any
import statements it detects, as long as you ADD THE FILES FIRST!! Here's
how.
1) produce a specfile by running 'pyinstaller yourMainFile.py'
2) edit the specfile as follows:
# add this at the top of the specfile.
# Note:The directory structure starts off the main file. The format would
be ( 'directory/subdirectory', 'someNameForTheDirectory/subdirectoryName'
added_files = [
( 'myDirectory', 'myDirectory' ), #includes all files in the directory,
keeps the same dir structure
( 'tests/exampleFile.xlsx', 'tests' ), #includes a file, and then says
this file is part of the 'tests' folder in the bundled app.
( 'tests/js', 'tests/js' ), # includes another directory
]
#THEN.. change this line
datas=added_files,
# DONE!
3) Make sure you add binaries that may not be included. Like..
chromedriver, a VERY common one that isn't included! To find out if the
binary is not included..
run 'pyinstaller yourMainFile.spec'
You'll notice folders and binaries are included. If your binary is not
there, you must add it to the spec file like this:
binaries=[('/Users/user/Documents/myApp/driver/chromedriver','driver')],
Then, rerun the pyinstaller command and the app! Test your app and see why
it failed.
4) Note: some modules may STILL be missing, maybe you need to get them into
hidden imports, like this:
hiddenimports=['selenium', 'tkinter'],
Finally, we are ready to bundle up the app! Do 'pysinstaller --onefile
yourMainFile.spec' to have a version you can shoot over to others and run.
- NEXT, here are some gotchas. If you are referencing sys.executable in any
way, THIS WILL NOT BE THE SAME! Find another way to call a script."
- Possibly --windowed doesn't work? I still get terminal popping up..
- common gotcha no. 2
- common gotcha no. 3
- etc
GUTTEN LACHT!!
--
You received this message because you are subscribed to the Google Groups
"PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/pyinstaller/960c5251-3806-4b10-8355-5466104b39d7%40googlegroups.com.