PEP 427 ”The Wheel Binary Package Format 1.0” doc available at http://wheel.rtfd.org/ Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 2 / 13
PEP 427 ”The Wheel Binary Package Format 1.0” doc available at http://wheel.rtfd.org/ ZIP-format archive (with a structure close to PEP376) Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 2 / 13
PEP 427 ”The Wheel Binary Package Format 1.0” doc available at http://wheel.rtfd.org/ ZIP-format archive (with a structure close to PEP376) versioned Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 2 / 13
PEP 427 ”The Wheel Binary Package Format 1.0” doc available at http://wheel.rtfd.org/ ZIP-format archive (with a structure close to PEP376) versioned with a specially formatted file name and the .whl extension Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 2 / 13
Used by the installer to select the ’best’ file Examples Django-1.7-py2.py3-none-any.whl Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 3 / 13
Used by the installer to select the ’best’ file Examples Django-1.7-py2.py3-none-any.whl aioamqp-0.1.1-py33.py34-none-any.whl Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 3 / 13
Used by the installer to select the ’best’ file Examples Django-1.7-py2.py3-none-any.whl aioamqp-0.1.1-py33.py34-none-any.whl lxml-3.4.0-cp26-none-win32.whl Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 3 / 13
Used by the installer to select the ’best’ file Examples Django-1.7-py2.py3-none-any.whl aioamqp-0.1.1-py33.py34-none-any.whl lxml-3.4.0-cp26-none-win32.whl Pillow-2.6.1-cp34-cp34m- macosx 10 6 intel.macosx 10 9 intel.macosx 10 9 x86 64.whl Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 3 / 13
with minimum magic like for instance shebang rewrite for scripts) Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 4 / 13
with minimum magic like for instance shebang rewrite for scripts) Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 4 / 13
with minimum magic like for instance shebang rewrite for scripts) Experimental protocol pip install –no-index –upgrade –force-reinstall Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 4 / 13
with minimum magic like for instance shebang rewrite for scripts) Experimental protocol pip install –no-index –upgrade –force-reinstall with –find-links pointing to either wheels or tar.gz Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 4 / 13
with minimum magic like for instance shebang rewrite for scripts) Experimental protocol pip install –no-index –upgrade –force-reinstall with –find-links pointing to either wheels or tar.gz repeated between 4 and 10 times Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 4 / 13
Ratio pep8-1.5.0 0.65 sec 0.27 sec x 2.4 flake8-2.1.0 1.84 sec 0.37 sec x 5.0 mccabe-0.2.1 0.61 sec 0.25 sec x 2.4 pyflakes-0.8 0.67 sec 0.29 sec x 2.3 Django-1.6.4 10.6 sec 6.76 sec x 1.6 (re)Installation times of python modules needing some compilation Module .tar.gz .whl Ratio lxml-3.3.5 60 sec 0.42 sec x 143 numpy-1.8.1 208 sec 2.0 sec x 104 Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 5 / 13
pure python libraries in this format, it’s easy: pip install wheel setup.py based on setuptools: python setup.py bdist wheel Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 6 / 13
pure python libraries in this format, it’s easy: pip install wheel setup.py based on setuptools: python setup.py bdist wheel setup.py based on distutils alone: python -c "import setuptools; file = ’setup.py’; setup code = open( file ).read().replace(’\r\n’, ’\n’); exec(compile(setup code, file , ’exec’))" bdist wheel Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 6 / 13
pure python libraries in this format, it’s easy: pip install wheel setup.py based on setuptools: python setup.py bdist wheel setup.py based on distutils alone: python -c "import setuptools; file = ’setup.py’; setup code = open( file ).read().replace(’\r\n’, ’\n’); exec(compile(setup code, file , ’exec’))" bdist wheel (so switch to setuptools) Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 6 / 13
modules and cache them in a wheelhouse Disclaimer This solution is based on pip and virtualenv Pitfall You need a fairly recent of pip/setuptools (requires setuptools ≥ 0.8.0). Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 8 / 13
your construction venv: pip install wheel pip wheel my module --wheel-dir=my wheelhouse path Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 9 / 13
your construction venv: pip install wheel pip wheel my module --wheel-dir=my wheelhouse path Install your wheel In the destination venv: pip install my module --find-links=file://wheelhouse path Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 9 / 13
wheel-dir = my wheelhouse path Also define a download cache to prevent useless downloads [global] find-links = /home/xfernandez/.pip/wheelhouse/ wheel-dir = /home/xfernandez/.pip/wheelhouse download cache = /.pip/cache Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 10 / 13
your construction venv: pip install wheel pip wheel my module Install your wheel In the destination venv: pip install my module Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 11 / 13
a wheel auto-magically at the first installation of a module, in order to speed up the next ones Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 12 / 13
a wheel auto-magically at the first installation of a module, in order to speed up the next ones See also Check out http://pip2014.com/ to get a script (untested) that’s supposed to configure all this (and apparently some more) Xavier Fernandez (Polyconseil) Harness the speed of the wheel October 16, 2014 12 / 13