https://github.com/fedora-python/compileall2
Enhanced Python `compileall` module
https://github.com/fedora-python/compileall2
Last synced: 8 months ago
JSON representation
Enhanced Python `compileall` module
- Host: GitHub
- URL: https://github.com/fedora-python/compileall2
- Owner: fedora-python
- License: other
- Created: 2019-03-18T13:53:47.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-21T15:54:46.000Z (almost 2 years ago)
- Last Synced: 2025-04-20T00:48:31.756Z (9 months ago)
- Language: Python
- Size: 70.3 KB
- Stars: 4
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# compileall2 Python module
Copy of `compileall` module from CPython source code with some new features, namely:
* compatibility with Python >= 3.6 & PyPy 3
The following features were first implemented in this project and then included
into the standard libraty of CPython.
* default recursion limit is now "unlimited" (actually limited by `sys.getrecursionlimit()`)
* `-s` and `-p` command line options for manipulation of the path baked into
a compiled `*.pyc` file.
* the `-o` command line option can be specified multiple times to compile for
multiple optimization levels in one run
* the `-e` command line option for ignoring symlinks pointing outside a specific directory
* the `--hardlink-dupes` command line option which creates hardlinks between
`.pyc` files with the same content
## Installation
* From [PyPI](https://pypi.org/project/compileall2/) via `pip install compileall2`
* In Fedora Linux, compileall2.py is a part of python-srpm-macros RPM package.
## Usage
`compileall2` can be executed as a Python module or directly.
Example usage:
```shell
# Create some script (this one raises an exception to show tracebacks)
$ echo "1 / 0" > test.py
# Compile it
$ compileall2 test.py
Compiling 'test.py'...
# Try to execute compiled version directly
$ python __pycache__/test.cpython-37.pyc
Traceback (most recent call last):
File "test.py", line 1, in
1 / 0
ZeroDivisionError: division by zero
# Recompile it with changes path which will be visible in error message
$ compileall2 -f -p /foo/bar test.py
Compiling 'test.py'...
$ python __pycache__/test.cpython-37.pyc
Traceback (most recent call last):
File "/foo/bar/test.py", line 1, in
ZeroDivisionError: division by zero
# Same thing as above but executed as a Python module
$ python -m compileall2 -f -p /bar/baz test.py
Compiling 'test.py'...
$ python __pycache__/test.cpython-37.pyc
Traceback (most recent call last):
File "/bar/baz/test.py", line 1, in
ZeroDivisionError: division by zero
```
## Testing
You can test it locally with tox or unittest directly:
```shell
$ python3 -m unittest test_compileall2.py
..............sss....ss.......................sss....ss.....................ss.............................----------------------------------------------------------------------
Ran 107 tests in 3.714s
OK (skipped=12)
```
but running in a container might be better because the superuser has privileges to write to `sys.path` which lowers the number of skipped tests.
## License
[PSF license v2](LICENSE)