|
|
=========================== |
|
|
Docutils_ Building Wheels |
|
|
=========================== |
|
|
|
|
|
:Authors: engelbert gruber; open to all Docutils developers |
|
|
:Contact: docutils-develop@lists.sourceforge.net |
|
|
:Date: $Date: 2015-05-06 18:36:40 +0200 (Mi, 06 Mai 2015) $ |
|
|
:Revision: $Revision: 7887 $ |
|
|
:Copyright: This document has been placed in the public domain. |
|
|
|
|
|
.. _Docutils: http://docutils.sourceforge.net/ |
|
|
|
|
|
.. contents:: |
|
|
|
|
|
Abstract |
|
|
-------- |
|
|
|
|
|
This document documents trials to build python wheels from Docutils. Once it |
|
|
is finished it might be driven into distribution or release documentation. |
|
|
|
|
|
Requests |
|
|
-------- |
|
|
|
|
|
There is `feature request 43`_ : Make setup.py build wheels. |
|
|
|
|
|
Just add this to setup.cfg: |
|
|
|
|
|
[bdist_wheel] |
|
|
universal = 1 |
|
|
|
|
|
|
|
|
.. warning:: Docutils is not fit for Universal Wheels. It supports both |
|
|
Python 2 and 3, but with different code (we use “2to3”). This makes it |
|
|
a candidate for `Pure Python wheels`_. |
|
|
|
|
|
As "universal" is false by default, no change to setup.cfg is required. |
|
|
The wheel builder detects that the package is pure Python and generates |
|
|
wheels for Py2 and Py3 depending under which python version it runs. |
|
|
|
|
|
and bugs275_ : Upload wheels to pypi |
|
|
|
|
|
Currently docutils does not publish any wheels on pypi. Wheels make docutils |
|
|
faster to install (no need to run setup.py, which for a large number of |
|
|
packages can take some time), and is no more difficult than uploading an |
|
|
sdist (see https://packaging.python.org/en/latest/distributing.html#wheels |
|
|
for instructions). |
|
|
|
|
|
Logbook |
|
|
------- |
|
|
|
|
|
1. Add ``[bdist_wheel] universal = 0`` to setup.cfg. |
|
|
2. Run ``python setup.py bdist_wheel``:: |
|
|
|
|
|
error: invalid command 'bdist_wheel' |
|
|
|
|
|
3. setuptools is too old. Install the new one by wheel or source or pip or |
|
|
easy... |
|
|
|
|
|
4. try wheel ... first get wheel tar.gz and unpack. |
|
|
|
|
|
5. try :: |
|
|
|
|
|
python2.7 wheel-0.24.0/wheel install setuptools-15.0-py2.py3-none-any.whl |
|
|
|
|
|
no error. But still ``error: invalid command 'bdist_wheel'``:: |
|
|
|
|
|
$ python2.7 setup.py --version |
|
|
0.12 |
|
|
|
|
|
Did wheel install ? If no, why no error, if yes in which place ? |
|
|
|
|
|
|
|
|
Logbook: with setuptools branch |
|
|
------------------------------- |
|
|
|
|
|
`gitpull/setuptools`_ sandbox branch introduces `setuptools`_ in ``setup.py``. |
|
|
|
|
|
As of 2015-04-16: **Not working yet**, ``import docutils`` will raise an |
|
|
``ImportError``. Need to get packages detected correctly. |
|
|
|
|
|
Install:: |
|
|
|
|
|
$ svn checkout svn://svn.code.sf.net/p/docutils/code/trunk/sandbox/gitpull/setuptools docutils-setuptools |
|
|
$ cd setuptools |
|
|
# create a virtualenv (however you like) |
|
|
$ pip install -e . |
|
|
|
|
|
This includes support for generate ``python setup.py bdist_wheel``:: |
|
|
|
|
|
$ python setup.py bdist_wheel |
|
|
running bdist_wheel |
|
|
running build |
|
|
running build_scripts |
|
|
installing to build/bdist.linux-x86_64/wheel |
|
|
running install |
|
|
running install_egg_info |
|
|
running egg_info |
|
|
writing docutils.egg-info/PKG-INFO |
|
|
writing top-level names to docutils.egg-info/top_level.txt |
|
|
writing dependency_links to docutils.egg-info/dependency_links.txt |
|
|
reading manifest file 'docutils.egg-info/SOURCES.txt' |
|
|
reading manifest template 'MANIFEST.in' |
|
|
warning: no files found matching 'MANIFEST' |
|
|
warning: no files found matching '*' under directory 'extras' |
|
|
warning: no previously-included files matching '.cvsignore' found under directory '*' |
|
|
warning: no previously-included files matching '*~' found under directory '*' |
|
|
warning: no previously-included files matching '.DS_Store' found under directory '*' |
|
|
writing manifest file 'docutils.egg-info/SOURCES.txt' |
|
|
Copying docutils.egg-info to build/bdist.linux-x86_64/wheel/docutils-0.13.data/purelib/docutils-0.13-py2.7.egg-info |
|
|
running install_scripts |
|
|
creating build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2pseudoxml.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2man.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2odt.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2latex.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rstpep2html.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2s5.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2odt_prepstyles.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2html.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2html5.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2xml.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
copying build/scripts-2.7/rst2xetex.py -> build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2pseudoxml.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2man.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2odt.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2latex.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rstpep2html.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2s5.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2odt_prepstyles.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2html.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2html5.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2xml.py to 755 |
|
|
changing mode of build/bdist.linux-x86_64/wheel/docutils-0.13.data/scripts/rst2xetex.py to 755 |
|
|
creating build/bdist.linux-x86_64/wheel/docutils-0.13.dist-info/WHEEL |
|
|
|
|
|
Installation:: |
|
|
|
|
|
# create a fresh virtualenv |
|
|
$ pip install -U dist/docutils-0.13-cp27-none-linux_x86_64.whl |
|
|
Processing ./dist/docutils-0.13-cp27-none-linux_x86_64.whl |
|
|
Installing collected packages: docutils |
|
|
Found existing installation: docutils 0.13 |
|
|
Uninstalling docutils-0.13: |
|
|
Successfully uninstalled docutils-0.13 |
|
|
Successfully installed docutils-0.13 |
|
|
|
|
|
|
|
|
Logbook with "pip" |
|
|
------------------ |
|
|
|
|
|
Docutils' "setup.py" imports from the stdlib's "distutils" module |
|
|
instead of the 3rd party "setuptools". "distutils" cannot build wheels. [#]_ |
|
|
|
|
|
OTOH, pip_ internally uses "setuptools" instead of "distutils". This way, it |
|
|
can generate wheels without changes to "setup.py". |
|
|
|
|
|
1. Install "pip" and "wheels" |
|
|
|
|
|
Under Debian Gnu/Linux: ``aptitude install python-pip python3-pip`` |
|
|
|
|
|
2. In the repository root directory, run :: |
|
|
|
|
|
#> pip wheel ./docutils/ |
|
|
Unpacking ./docutils |
|
|
Running setup.py (path:/tmp/pip-Ym9hKL-build/setup.py) egg_info for package from file:///[...]docutils-svn/docutils |
|
|
|
|
|
warning: no previously-included files matching '.DS_Store' found under directory '*' |
|
|
Building wheels for collected packages: docutils |
|
|
Running setup.py bdist_wheel for docutils |
|
|
Destination directory: /home/milde/Code/Python/docutils-svn/wheelhouse |
|
|
Successfully built docutils |
|
|
Cleaning up... |
|
|
|
|
|
3. There is a "pure Python" wheel under |
|
|
``wheelhouse/docutils-0.13-py2-none-any.whl`` |
|
|
|
|
|
4. Repeat with:: |
|
|
|
|
|
#> pip3 wheel ./docutils/ |
|
|
|
|
|
to get ``wheelhouse/docutils-0.13-py3-none-any.whl`` |
|
|
|
|
|
You can also generate wheels for Docutils 0.12 with ``pip wheel docutils`` |
|
|
and ``pip3 wheel docutils``. The 0.12 archive is downloaded from PIP and |
|
|
re-packed as wheel. With "pip3" this includes the 2to3 conversion. |
|
|
|
|
|
Summary: |
|
|
With the "pip" utility, it is possible to generate wheels for Python 2 |
|
|
and 3 for both, the released and the repository version of Docutils |
|
|
without changes to the code base. |
|
|
|
|
|
The generated wheel can be installed. Installing the Py3k version happens |
|
|
"instantaneously". |
|
|
|
|
|
.. [#] Docutils uses the batteries included with Python and avoids external |
|
|
dependencies. |
|
|
|
|
|
.. _bugs275: https://sourceforge.net/p/docutils/bugs/275/ |
|
|
.. _pure python wheels: |
|
|
https://packaging.python.org/en/latest/distributing.html#pure-python-wheels |
|
|
.. _feature request 43: https://sourceforge.net/p/docutils/feature-requests/43/ |
|
|
.. _gitpull/setuptools: https://sourceforge.net/p/docutils/code/HEAD/tree/trunk/sandbox/gitpull/setuptools/ |
|
|
.. _setuptools: https://pythonhosted.org/setuptools/ |
|
|
.. _pip: http://pip.readthedocs.org/en/latest/
|
|
|
|