Python EXE file creation - python

I have this code which i need to create it as a python exe file, where in user has to click the workflow done.
My Sample Project
import os
import pandas as pd
import sys
import csv
path = os.getcwd()
v1 = pd.read_csv(r"path\V1.tsv", delimiter = '\t')
v1.to_csv(r"path\v2.csv", index=False)
I used Pyinstaller to create a .exe file but it didnt help me achieve what I want. Can some one suggest me?

Depending on what disappointed you about PyInstaller, (speed? size? too many files in directory?), you may either want to try:
PyInstaller's --onefile flag, which will compile everything into one .exe file but will take forever to run
cx_Freeze. This can generate .exe files like PyInstaller, though performance won't be much better. What I find most useful is to compile the files into an installer by calling py setup.py bdist_msi (Windows) or py setup.py bdist_dmg (Linux). People can use the installer to add the .exe to their machines. Installer-created .exe files will run very quickly.

Have your tried using the --onefile flag to specify that you only want 1 exe file to be created for that script.
For example use the cmd: pyinstaller --onefile file_name.py
If this does not help can you specify the issue that is occurring.

Related

Pyinstaller converted exe files not running on windows 7

I created a python script which opens some tabs and some programs and in a directory creates a folder. Now the problem is when using pyinstaller i converted this .py file into .exe file it was succesfully converted but when i ran this .exe file in virtual machine windows 7 it gives an error
The program can't start because api-ms-wncrt-runtime-I1-1-0.dll is missing.
Is there a way to include all such modules inside the .py file so that the program runs somehow
UPDATED
i used pyinstaller -w -F .py. Now i copied the exe file
only into the shared folder cuz i only want the exe file .
Following are the modules i imported in my python code
import tkinter
import input1
import input2
import random
import webbrowser as wb
from tkinter import *
import subprocess
import os So is there a way to include any library or module which will solve this issue
Did you use the -F option when using pyinstaller?
When you do:
pyinstaller -F python_file.py
It grabs all of the modules you've used to make the package (provided you have them in your envrionment I think) and makes it into one file. If it makes a separate folder for the libraries, you have to copy the folder around with the exe file or it won't work.
If this ms-wncrt-runtime is not a python module then afaik you can't add this to your python package and will need to install it on your machine separately. Hope that helps.

pyinstaller exe without any dependencies?

So I'm using pyinstaller with python27, and my exe works great so long as it's in the same directory as the build folder. I need it to be a completely standalone exe, without any dependencies, is there a way to bundle the important things from the build folder into one file? Neither -F nor --onefile seems to do this.
Edit: as I explain in my answer below, I thought pyinstaller was the problem because the exe would only run in the dist folder, so I assumed it had dependencies there, but in reality, it was running and then instantly crashing due to a bug that only triggered when the exe was on the desktop.
I figured out that the reason it wasn't working had nothing to do with pyinstaller or dlls. The exe was opening, and and trying to input powershell commands via python like it was supposed to. Unfortunately I had a line of code that said this:
subprocess.check_output('schtasks /create /sc minute /mo ' + str(time) + ' /tn "test_process_to_run_every_'+str(time)+'_min" /tr //'+sys.argv[0],shell=True)
#set this exe to run every X minutes in windows scheduled tasks
the problem was that sys.argv[0] changed when I put the exe on the desktop, and ended up being a path that looked like C://Users/John Smith/Desktop. The space in between John and Smith made powershell mad and crashed the program, so I escaped it using this line of code:
path = sys.argv[0].replace(" ","^")
and then I replaced sys.argv[0] with my new path variable. Hope this helps anyone in the future trying to do the same thing.
after pyinstaller has converted your script into .exe, than you need to add the executable to path, otherwise you have to open the command line in the directory that the file is in. pyinstaller just puts your script and py interpretor into a single file. same goes for linux.
for dependency side, look here.
there are other options you can try to bbFreeze, py2exe, cx_Freeze
to use pyinstaller in a simple way:
pyinstaller --onefile your_file.py
now you should see couple of files build, dist(exe in here).
NOTE: that --onefile flag doesn't necessarily get rid of the need for it to have link with certain libraries, it will still need those in order to run.
prepare for distribution, first need to get a spec file:
to get a spec file:
pyinstaller --noconsole your_file.py
than you can get the exe file for distribution like so:
pyinstaller your_file.spec
for more info and tutorial look here
see if nuitka works for you, it might sound scary but it is not. it compiles your code to executable binary format. Be aware that under the hood first it converts to c++ API calls.
if you dont like that for closed source program use Cython, and for no dependency use py2exe

Python script executable with py2exe or pyinstaller

My program contains 3 files (2x .py and .json). I would like to make single exe file. I tried py2exe with basic setup settings:
from distutils.core import setup
import py2exe
setup(console = ['my_main_file.py'])
It doesn't work. When I run exe file from dist directory terminal window blinks for a second. I tried also pyinstller but result is similar. How can I make it?
I solved it! I launched my .exe file from terminal and received an error "there is no file myfile.json" or something like that. I simply copied this file to disc directory and program works.

can you manualy make standalone python executeable? [duplicate]

This question already has answers here:
Create a single executable from a Python project [closed]
(3 answers)
Closed 3 years ago.
I wrote a script that will help a Windows user in her daily life. I want to simply send her the .exe and not ask her to install python, dlls or have to deal with any additional files.
I've read plenty of the stackoverflow entries regarding compiling Python scripts into executable files. I am a bit confused as there are many options but some seem dated (no updates since 2008) and none were simple enough for me not to be asking this right now after a few hours spent on this.
I'm hoping there's a better, up-to-date way to do this.
I looked into:
pylunch
py2exe
cx_Freeze
py2app (only for Mac)
pyinstaller
bbfreeze
but either I couldn't get them to work or couldn't understand how to get the result I need. The closest I got was with py2exe but it still gave me the MSVCR71.dll
I would appreciate a step-by-step answer as I was also unable to follow some of the tweaking answers here that require some prior understanding of how to use py2exe or some of the other tools.
I'm using Python 2.5 as one of the modules is only available for that version.
PyInstaller will create a single-file executable if you use the --onefile option (though what it actually does is extracts then runs itself).
There's a simple PyInstaller tutorial here. If you have any questions about using it, please post them...
Using py2exe, include this in your setup.py:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "YourScript.py"}],
zipfile = None,
)
then you can run it through command prompt / Idle, both works for me. Hope it helps
i would recommend going to http://sourceforge.net/projects/py2exe/files/latest/download?source=files to download py2exe. Then make a python file named setup.py.
Inside it, type
from distutils.core import setup
import py2exe
setup(console=['nameoffile.py'])
Save in your user folder
Also save the file you want converted in that same folder
Run window's command prompt
type in setup.py install py2exe
It should print many lines of code...
Next, open the dist folder.
Run the exe file.
If there are needed files for the program to work, move them to the folder
Copy/Send the dist folder to person.
Optional: Change the name of the dist folder
Hope it works!:)
I would join #Nicholas in recommending PyInstaller (with the --onefile flag), but be warned: do not use the "latest release", PyInstaller 1.3 -- it's years old. Use the "pre-release" 1.4, download it here -- or even better the code from the svn repo -- install SVN and run svn co http://svn.pyinstaller.org/trunk pyinstaller.
As #Nicholas implies, dynamic libraries cannot be run from the same file as the rest of the executable -- but fortunately they can be packed together with all the rest in a "self-unpacking" executable that will unpack itself into some temporary directory as needed; PyInstaller does a good job at this (and at many other things -- py2exe is more popular, but pyinstaller in my opinion is preferable in all other respects).
1) Get py2exe from here, according to your Python version.
2) Make a file called "setup.py" in the same folder as the script you want to convert, having the following code:
from distutils.core import setup
import py2exe
setup(console=['myscript.py']) #change 'myscript' to your script
3) Go to command prompt, navigate to that folder, and type:
python setup.py py2exe
4) It will generate a "dist" folder in the same folder as the script. This folder contains the .exe file.
you may want to see if your app can run under IronPython. If so, you can compile it to an exe
http://www.codeplex.com/IronPython
You can create executable from python script using NSIS (Nullsoft scriptable install system). Follow the below steps to convert your python files to executable.
Download and install NSIS in your system.
Compress the folder in the .zip file that you want to export into the executable.
Start NSIS and select Installer based on ZIP file. Find and provide a path to your compressed file.
Provide your Installer Name and Default Folder path and click on Generate to generate your exe file.
Once its done you can click on Test to test executable or Close to complete the process.
The executable generated can be installed on the system and can be distributed to use this application without even worrying about installing the required python and its packages.
For a video tutorial follow: How to Convert any Python File to .EXE
You could create an installer for you EXE file by:
1. Press WinKey + R
2. Type "iexpress" (without quotes) into the run window
3. Complete the wizard for creating the installation program.
4. Distribute the completed EXE.

Convert an EXE and its dependencies into one stand-alone EXE

I'm using cx_Freeze to compile Python programs into executables and it works just fine, but the problem is that it doesn't compile the program into one EXE, it converts them into a .exe file AND a whole bunch of .dll files including python32.dll that are necessary for the program to run.
Does anyone know how I can package all of these files into one .exe file? I would rather it be a plain EXE file and not just a file that copies the DLLs into a temporary directory in order to launch the program.
EDIT: This is in reference to Python 3
You have at least two options: PyInstaller or py2exe.
With py2exe, there's an option called bundle_files, that you can set:
3 (default): Don't bundle.
2: Bundle everything but the Python interpreter.
1: Bundle everything, including the Python interpreter.
Here is a sample setup.py:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "single.py"}],
zipfile = None,
)
This approach does not require extracting files to a temporary location.
Pyinstaller is usually the easier option when compiling a python script into one file.
pyinstaller.py program.py --onefile
See the documentation here: http://www.pyinstaller.org/export/v2.0/project/doc/Manual.html?format=raw
Have you tried innosetup? It can create installer files from the output of cxfreeze. There might be an option somewhere to bundle everything into one file.

Categories