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

0 votes
asked Nov 11, 2010 by richard-knop

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

5 Answers

0 votes
answered Nov 11, 2010 by unode

You want something like py2exe.

0 votes
answered Nov 11, 2010 by michael

There are multiple solutions like py2exe, cx-freeze or (only for Mac OS X) py2app.

0 votes
answered Nov 11, 2010 by corey-goldberg

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.

0 votes
answered Nov 12, 2010 by binary-phile

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)
0 votes
answered Sep 15, 2017 by user8583529

Go to Notepad++ Menu, Plugins --> Python Script --> Show Console. In newly opened console window, at bottom type..... execfile('C:/path/to/your/python/file/code.py') #Use forward slash (/) instead of backwared slash. Hit return or click on run button.

Welcome to Q&A, where you can ask questions and receive answers from other members of the community.
Website Online Counter

...