pyinstaller still opening console despite using recommended methods to stop this - python

I have programmed a python script using tkinter and want to turn it into an exe file. I have tried running it as a .pyw file and it only runs the GUI window without the command line which is what I want. However, when using Pyinstaller to convert my script to a .exe file it opens and runs fine but the command line always opens as well. This has happened when converting both .py and .pyw files and it also occurs when I specify in the command prompt --windowed or --noconsole. I have even tried to edit the spec file of my .exe to see if the console is set to true but I find in the code "console=False". I cannot find any other fixes on previous questions or on the pyinstaller issus page and so I have had to ask myself.
This is the spec file
# -*- mode: python -*-
block_cipher = None
a = Analysis(['D:\\zebsu\\Documents\\simple_calculator_3.py'],
pathex=['C:\\Users\\zebsu'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='simple_calculator_3',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='simple_calculator_3')

I'm fairly new to Pyinstaller myself but the following command has worked for me:
pyinstaller -w YourPythonFile.py.
Hope this helps.

Related

Pyinstaller exe doesnt run program

I writed a program with python which using selenium library. Basically, I am opening a page using Chromedriver.exe and login to a site. I want to use this program in another computer without use python. I want to convert it to a stand-alone exe type.
I tried pyinstaller --onefile filename.py
I got a dist folder which include .exe file. Also I have an .spec file. When I try to run exe file, nothing happen. Just a command panel is opening. How can I run this exe file?
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['borsaBot_Zpro.py'],
pathex=
['C:\\Users\\90544\\OneDrive\\Masaüstü\\Yusuf\\ödevler\\borsaBot'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='borsaBot_Zpro',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )

Python script runs in Spyder but crashes (closes without error message) when packaged as a Pyinstaller .exe

I'm trying to package a Python script as an .exe file using Pyinstaller. The script successfully runs in Spyder, but the .exe file abruptly closes without an error message midway through execution. I've tracked down the line at which the .exe closes:
df2['WholesaleCostPerUnit'] = df2.RetailCost/(df2.QuantitySold/df2.Quantity)
df2 is a Pandas dataframe. This is the first time in the script that I divide one pandas series by another.
Update: The .exe runs fine when df2 consists of 9,999 identical rows. However, if I try to run it with 10,000 or more (identical) rows, it closes at the above line without error. With this information I can build a workaround, but I'm still curious to know why this is happening.
Here's my spec file:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['cannabis_transaction_sample.py'],
pathex=['C:\\projects_local\\python_executables\\cannabis_markup_sampling'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='cannabis_transaction_sample',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='cannabis_transaction_sample')

using --onefile for pyinstaller does not create a single executable, instead it keeps creating a directory

I have a python script and a python spec file. The spec file contains some code which adds a couple of directories needed for my script. When i do
pyinstaller script.spec script.py
it creates a directory like normal. However when i do
pyinstaller --onefile script.spec script.py
it dosent create a single executable, instead it does the same thing as if i didnt include it.
is it something to do with my command line or is it something with the spec file?
spec file code:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['memrise.py'],
pathex=['C:\\Users\\blahblahpath\\memrise'],
binaries=[],
datas=[('C:\\Users\\blahblahpath\\memrise\\chromedriver_win32\\','.\\selenium\\webdriver\\')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='memrise',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
Tree('C:\\Users\\blahblahpath\\memrise\\assets', prefix='assets\\'),
Tree('C:\\Users\\blahblahpath\\langdetect', prefix='langdetect\\'),
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='memrise')
Your command is correct.
What you need to do is to check the dict file,
there should be a lot of files inside if you don't use --onefile
but there should only be one .exe file inside if you use.

is there a way to record video after creating exe using pyinstaller

I am using Kivy for GUI and developed an desktop exe successfully. The code runs fine which starts camera and even it records video and saves it. But when I create exe, recording is not working. And recorded video needs to be saved but it just saves the file which is actually empty.
I am using windows 10, Anaconda 3.5.5.
this is .spec file
# -*- mode: python -*-
from kivy.deps import sdl2, glew, gstreamer
block_cipher = None
a = Analysis(['ninth.py'],
pathex=['D:\\Somu_Sir\\new_project'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='ninth',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
coll = COLLECT(exe, Tree('D:\\Somu_Sir\\new_project\\required_files\\'),
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)],
strip=False,
upx=True,
name='ninth')
Application is starting but only record function is not working. Expected output should be a video stored in same folder
Yes you have to use binaries=[] where you need to pass the .dll files which are required for your application to run. Your code works fine that means your app should also work. only when creating .exe file using PyInstaller you need to give all required files as hiddenimports as well if you want only one single file. You can try binaries=[], where you can add number of .dll dependencies or even through cmd for example:
pyinstaller --add-binary <PATH_TO_PYTHON>\Lib\site-packages\cv2\opencv_ffmpeg320_64.dll
opencv_ffmpeg320_64.dll can help you to record camera videos

Cannot use lightgbm.dll in Pyinstaller's exe

I am trying to convert my code into an exe using pyinstaller spec.
I ran pyinstaller with the following command:
pyinstaller --clean --add-data lib_lightgbm.dll;\compile orca.spec
The exe fails with the error:
main__.PyInstallerImportError: Failed to load dynlib/dll
'C:\\Users\\...\\lightgbm\\../compile\\lib_lightgbm.dll'. Most probably this
dynlib/dll was not found when the application was frozen.
I have tried adding lightgbm.dll through binaries, but didnt work. I also tried manually copying it to the destination after the exe is created. That didnt work either. Most of the questions about pyinstaller and lib_lightgbm.dll failed to answer my issue. Can someone please suggest a solution? I am at my wits end at the moment.
Here is my spec file:
# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['mycode.py'],
pathex=['C:\\mycode\\source code'],
binaries=[],
datas=[],
hiddenimports=['cython', 'sklearn', 'sklearn.feature_extraction','sklearn.pipeline', 'sklearn.ensemble', 'sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree', 'sklearn.tree._utils'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='mycode',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='mycode')
When you build from a spec file, those options cannot be changed.
so either add the tuple to the datas section, or ommit the spec file and use all the parameters for pyinstaller
I'm not 100% sure this is the fix, but there should be something in your datas section of you spec file. So I'd investigate that. you can also build from a spec file using pyinstaller <spec file here> when you're done editing it.
https://pyinstaller.readthedocs.io/en/stable/spec-files.html

Categories

Resources