This is the question: How to create a setup file(.msi) from a .py file? I have a little script but I need an installer to use it with "InstallSimple" program wich will install another applications.
I tried with pyinstaller but it supports 2.3-2.7 versions and I have an script for 3.3 version.
To create an .msi file you need to use distutils. The essential procedure there is to create a setup.py file with information about your script, and you can then run python setup.py bdist_msi and it will create an .msi file for you.
However, using only this will create an .msi-file for your Python script, but it will require you to install Python on the computer first. This is probably not what you want. To solve that you can create an .exe-file from your script with cx_Freeze. cx_Freeze can in turn use distutils to make the .msi file. There is an example here.
Have you tried cx_Freeze ? According to the latest docs cx_Freeze 4.3.1 documentation, it supports python3.
Related
I need to package my Python application, its dependencies, and Python itself into a single MSI installer for distribution to users. The end result should desirably be:
Python is installed in the standard location
the package and its dependencies are installed in a separate directory (possibly site-packages)
the installation directory should contain the Python uncompressed and a standalone executable is not required
Kind of a dup of this question about how to make a python into an executable.
It boils down to:
py2exe on windows, Freeze on Linux, and
py2app on Mac.
I use PyInstaller (the svn version) to create a stand-alone version of my program that includes Python and all the dependencies. It takes a little fiddling to get it to work right and include everything (as does py2exe and other similar programs, see this question), but then it works very well.
You then need to create an installer. NSIS Works great for that and is free, but it creates .exe files not .msi. If .msi is not necessary, I highly recommend it. Otherwise check out the answers to this question for other options.
My company uses the free InnoSetup tool. It is a moderately complex program that has tons of flexibility for building installers for windows. I believe that it creates .exe and not .msi files, however. InnoSetup is not python specific but we have created an installer for one of our products that installs python along with dependencies to locations specified by the user at install time.
I've had much better results with dependencies and custom folder structures using pyinstaller, and it lets you find and specify hidden imports and hooks for larger dependencies like numpy and scipy. Also a PITA, though.
py2exe will make windows executables with python bundled in.
py2exe is the best way to do this. It's a bit of a PITA to use, but the end result works very well.
Ok, I have used py2exe before and it works perfectly except for one thing... It only works on executable windows machines. I then learned about Jython which turn a python script into a .Jar file. Which as you know is executable from any machine that has Java ("To your latest running version") installed. Which is great because both unix, windows, and ios (Most of the time) Run java. That means its executable from all of the following machines. As long as they run Java. No need for "py2mac + py2exe + freeze" just to run on all operating systems. Just Jython
For more information on how it works and how you can use it click here.
http://www.jython.org/
Suppose, I have written a code in python 2.7 . let's say i am using vlc player in my script and now i have created a msi file for my code so how to install "vlc player" in user's system during installation of msi file of my python code.
Please give the example of setup file of cx_freeze package which installs all the dependent softweare (like VLC) in the user's system during installation of msi of python code.
I just want to know where to add these dependencies (for installation) in setup file of cx_freeze.
i dont know much about cx_freeze
well for my project i've used pynsist
and this is really easy to make msi in this.
this is my instaalet.cfg file to run pynist
you can check example here
I am new in Python, and I wonder if I can release my program in some kind of compiled build project with all modules and librarys included, so I can run it on diffrent systems? I don't want to install opencv on every pc.
You can specify a requirements.txt file which lists the dependencies used by your program. Python pip can read this file to bundle and package your application. See the docs here: https://pip.pypa.io/en/stable/user_guide/#requirements-files.
Also, I believe that OpenCV requires some native extensions installed which are not packaged with Python. Unfortunately, you'll need to install native extensions on each new machine you use.
I've been using cx_Freeze for a while now and there is one thing I've really wanted to do: put ALL files into ONE executable that I can distribute. It's not really user-friendly to send around a folder filled with 30 files, all in the same directory. How can I accomplish this?
Thanks.
It is not supported in cx_freeze. There was discussion about it on mailing list. As I recall, the author stated that others (PyInstaller, Py2Exe) use some dirty hacks to achieve that. Some anti-virus programs can consider that behavior as a virus also.
I used PyInstaller for some time, but went back to cx_freeze because of Python 2.7 support. I pack everything using Inno Setup, so it is easy to distribute. Depends if you use Windows or not.
Isn't this what bbfreeze does?
Tutorial here: http://www.blog.pythonlibrary.org/2010/08/19/a-bbfreeze-tutorial-build-a-binary-series/
It's actually not that hard to roll your own with Python zipimport http://docs.python.org/library/zipimport.html
You may prefer to use something like UPX which is a more general solution, not Python only. http://upx.sourceforge.net/
You can use 'bdist_msi' instead of 'build'. This will create a dist folder in the directory with a single setup application.
http://cx-freeze.readthedocs.io/en/latest/distutils.html
According to the documentation
cx_Freeze does not support building a single file exe, where all of the libraries for your application are embedded in one executable file.
The documentation gives some options to obtain a single file.
A further option under Windows is to use the bdist_msi command to create a single Microsoft Installer file (.msi) for your application, as mentioned by #QuaziRabbi. This command has few cx_Freeze-specific options documented here to customize the installer. This command overloads the bdist_msi command of the distutils package which itself brings some more options to customize the installer. The available options are not documented, one need to look at the source code of the distutils package. Interesting examples are Use cx-freeze to create an msi that adds a shortcut to the desktop and cx_freeze bdist_msi: create registry entries?
Another option is to use another tool to create a more customizable single-file installer for the frozen application after the cx_Freeze build step. The script-based tool NSIS (Nullsoft Scriptable Install System) allows one to create a very customizable installer and the use of a script means that this step can be completely automatized. #Fenisko's answers mentions another tool, and there are many more.
Guys, I have much python code in modules which are resides in several python packages and now I need to create single python executable module or file which will include all these files, so it will be working on windows and on linux servers. What are possible solutions and how this can be done?
For windows use py2exe , for linux use pyinstaller and for Mac use py2app
Using these tools you can have a setup.py which based on os will build the final binary.
I have tried all three and they work well, or you can use cx_freeze they claim to be cross-platform
That's what egg files are for. Read this: What are the advantages of packaging your python library/application as an .egg file?
Maybe py2exe can help you ..
py2exe is a Python Distutils extension which converts Python scripts into executable Windows programs, able to run without requiring a Python installation.
Tutorial > http://www.py2exe.org/index.cgi/Tutorial
You can kivy for python cross plat form application .
Kivy - Open source Python library for rapid development of applications
that make use of innovative user interfaces, such as multi-touch apps