A faster and highly-compatible implementation of the Python programming language.
|size (curr.)||322403 kB|
Pyston is a fork of CPython 3.8.8 with additional optimizations for performance. It is targeted at large real-world applications such as web serving, delivering up to a 30% speedup with no development work required.
We plan on explaining our techniques in more detail in future blog posts, but the main ones we use are:
- A very-low-overhead JIT using DynASM
- Aggressive attribute caching
- General CPython optimizations
- Build process improvements
git submodule update --init pyston/llvm pyston/bolt/bolt pyston/bolt/llvm pyston/LuaJIT pyston/macrobenchmarks
Pyston has the following build dependencies:
sudo apt-get install ninja-build cmake clang libssl-dev libsqlite3-dev luajit python3.8 zlib1g-dev virtualenv libjemalloc-dev
Extra dependencies for running the test suite:
sudo apt-get install libwebp-dev libjpeg-dev python3-gdbm python3-tk python3.8-dev
Extra dependencies for producing Pyston debian packages and portable directory release:
sudo apt-get install dh-make dh-exec debhelper patchelf
For a build with all optimizations enabled (LTO+PGO) run:
An initial build will take quite a long time due to having to build LLVM twice, and subsequent builds are faster but still slow due to extra profiling steps.
A symlink to the final binary will be created with the name
For a quicker build during development run:
make unopt -j
the generated executable can be found inside
Running a python file called script.py with pyston can be easily done via:
Changing the version number
- add a
pyston/debian/changelogentry (make sure the date is correct or the build fails in odd ways)
We use a script which builds automatically packages for all supported distributions via docker (will take several hours):
- make sure your repos do not contain unwanted changes because they will get used to build the packages
- output debian packages are now in
release/<version>/. Inside this directory are also different “portable dir” releases made from the different distibution deb packages. Decide on which portable dir to use - the oldest version will run with most dists but will also bundle the oldes libs.