• 10

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191


File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

How can I manually generate a .pyc file from a .py file

For some reason, I can not depend on Python's "import" statement to generate .pyc file automatically

Is there a way to implement a function as following?

def py_to_pyc(py_filepath, pyc_filepath):

You can use compileall in the terminal. The following command will go recursively into sub directories and make pyc files for all the python files it finds. The compileall module is part of the python standard library, so you don't need to install anything extra to use it. This works exactly the same way for python2 and python3.

python -m compileall .
  • 241
Reply Report
      • 2
    • Is it possible to distribute a PYC file containing all the libraries used? So users doesn't have to install them, just ran the PYC file, I know in java this is possible using a JARs are there any similar method for Python?
      • 2
    • I heard also something about meta files in Python. This compileall also build some cache? If not, what is the command for that?? Since the end-users doesn't have write permission to the lib directory. And I want to speed up things here... PS. also take a look at the -O flag, for bytecode (.pyo file iso .pyc) compilation.
    • be careful with this command. I did accidentally do a compileall on my site-packages folder and it messed up everything

It's been a while since I last used Python, but I believe you can use py_compile:

import py_compile
  • 55
Reply Report
      • 2
    • You probably want to include the second parameter, which determines the output file. Otherwise, it defaults to something like __pycache__/file.cpython-32.pyc and you get that as the return value.

I found several ways to compile python scripts into bytecode

  1. Using py_compile in terminal:

    python -m py_compile File1.py File2.py File3.py ...

    -m specifies the module(s) name to be compiled.

    Or, for interactive compilation of files

    python -m py_compile -
  2. Using py_compile.compile:

    import py_compile
  3. Using py_compile.main():

    It compiles several files at a time.

    import py_compile

    The list can grow as long as you wish. Alternatively, you can obviously pass a list of files in main or even file names in command line args.

    Or, if you pass ['-'] in main then it can compile files interactively.

  4. Using compileall.compile_dir():

    import compileall

    It compiles every single Python file present in the supplied directory.

  5. Using compileall.compile_file():

    import compileall

Take a look at the links below:



  • 46
Reply Report
    • One small correction is that the module name you are loading is py_compile and compileall NOT py_compile.py or compileall.py. In other words, it should be python3 -m py_compile PYTHON_FILENAME or python3 -m compileall PYTHON_FILES_DIRECTORY.

I would use compileall. It works nicely both from scripts and from the command line. It's a bit higher level module/tool than the already mentioned py_compile that it also uses internally.

  • 17
Reply Report

In Python2 you could use:

python -m compileall <pythonic-project-name>

which makes compile all .py to .pyc in the project which contained the subfolders.

In Python3 you could use:

python3 -m compileall <pythonic-project-name>

which makes compile all .py to the __pycache__ folders in the project which contained the subfolders.

Or with browning from this post:

You can enforce the same layout of .pyc files in the folders as in Python2 by using:

python3 -m compileall -b <pythonic-project-name>

The option -b triggers the output of .pyc files to their legacy-locations (i.e. the same as in Python2).

  • 6
Reply Report

To match the original question requirements (source path and destination path) the code should be like that:

import py_compile
py_compile.compile(py_filepath, pyc_filepath)

If the input code has errors then the py_compile.PyCompileError exception is raised.

  • 3
Reply Report

There is two way to do this

  1. Command line
  2. Using python program

If you are using command line use python -m compileall <argument> to compile python code to python binary code. Ex: python -m compileall -x ./*

Or, You can use this code to compile your library into byte-code.

import compileall
import os

lib_path = "your_lib_path"
build_path = "your-dest_path"

compileall.compile_dir(lib_path, force=True, legacy=True)

def compile(cu_path):
    for file in os.listdir(cu_path):
        if os.path.isdir(os.path.join(cu_path, file)):
            compile(os.path.join(cu_path, file))
        elif file.endswith(".pyc"):
            dest = os.path.join(build_path, cu_path ,file)
            os.makedirs(os.path.dirname(dest), exist_ok=True)
            os.rename(os.path.join(cu_path, file), dest)


look at ? docs.python.org for detailed documentation

  • 1
Reply Report

Trending Tags