Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I somehow "compile" a python script to work on PC without Python installed?

So I have a Python script:

myscript.py 

I am executing it like this:

python D:\myscript.py 

However, I must have Python installed and included in the PATH environment variable for that to work.

Is it somehow possible to "bundle" Python executable with a Python script so other people will be able to run it on their PCs without Python?

It is ok if it will work only in Windows.

EDIT:

After trying the compile.py I get this error:

Traceback (most recent call last):   File "D:\stuff\compile.py", line 4, in <module>     import py2exe ImportError: No module named py2exe 
like image 375
Richard Knop Avatar asked Nov 11 '10 19:11

Richard Knop


People also ask

Can Python script run on computer without Python?

py2exe is a Python extension which converts Python scripts (. py) into Microsoft Windows executables (.exe). These executables can run on a system without Python installed. It is the most common tool for doing so.

How do I run a Python script without installing Python?

The only realistic way to run a script on Windows without installing Python, is to use py2exe to package it into an executable. Py2exe in turn examines your script, and embeds the proper modules and a python interpreter to run it.

Can Python run on Windows without installing?

Yes, you can run a Python script without actually installing Python on Windows with Docker [ https://www.docker.com/ ]. Let's say you have a local script hello.py: print("hello world")


2 Answers

Here is one way to do it (for Windows, using py2exe).

First, install the py2exe on your Windows box.

Then create a python script named compile.py, like this:

import sys from distutils.core import setup import py2exe  entry_point = sys.argv[1] sys.argv.pop() sys.argv.append('py2exe') sys.argv.append('-q')  opts = {     'py2exe': {         'compressed': 1,         'optimize': 2,         'bundle_files': 1     } }  setup(console=[entry_point], options=opts, zipfile=None) 

To compile your Python script into a Windows executable, run this script with your program as its argument:

$ python compile.py myscript.py 

It will spit out a binary executable (EXE) with a Python interpreter compiled inside. You can then just distribute this executable file.

like image 196
Corey Goldberg Avatar answered Sep 19 '22 18:09

Corey Goldberg


PyInstaller has worked well for me, generating reasonably small packages due to its use of upx. Its dependency detection was better than py2exe at the time as well. It seems not to have a lot of recent development and probably doesn't work with 3.x, however.

The source in the repository is a better starting point than the 1.4 package.

Also see the wiki page about working with Python 2.6+.

From the features list:

  • Packaging of Python programs into standard executables, that work on computers without Python installed.
  • Multiplatform: works under Windows (32-bit and 64-bit), Linux (32-bit and 64-bit) and Mac OS X (32-bit only for now, see MacOsCompatibility).
  • Multiversion: works under any version of Python from 1.5 up to 2.7. NOTE: If you're using Python 2.6+ on Windows, see Python26Win.
  • Flexible packaging mode:
  • Single directory: build a directory containing an executable plus all the external binary modules (.dll, .pyd, .so) used by the program.
  • Single file: build a single executable file, totally self-contained, which runs without any external dependency.
  • Custom: you can automate PyInstaller to do whatever packaging mode you want through a simple script file in Python.
  • Explicit intelligent support for many 3rd-packages (for hidden imports, external data files, etc.), to make them work with PyInstaller out-of-the-box (see SupportedPackages).
  • Full single-file EGG support: required .egg files are automatically inspected for dependencies and bundled, and all the egg-specific features are supported at runtime as well (entry points, etc.).
  • Partial directory EGG support: required .egg directories are automatically inspected for dependencies and bundled, but egg-specific features will not work at runtime.
  • Automatic support for binary libraries used through ctypes (see CtypesDependencySupport for details).
  • Support for automatic binary packing through the well-known UPX compressor.
  • Optional console mode (see standard output and standard error at runtime).
  • Windows-specific features:
  • Support for code-signing executables.
  • Full automatic support for CRTs: no need to manually distribute MSVCR*.DLL, redist installers, manifests, or anything else; true one-file applications that work everywhere!
  • Selectable executable icon.
  • Fully configurable version resource section and manifests in executable.
  • Support for building COM servers.
  • Mac-specific features:
  • Preliminar support for bundles (see MacOsCompatibility)
like image 22
Binary Phile Avatar answered Sep 20 '22 18:09

Binary Phile