1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
===========================
Docutils_ Building Wheels
===========================
:Authors: engelbert gruber; open to all Docutils developers
:Contact: docutils-develop@lists.sourceforge.net
:Date: $Date$
:Revision: $Revision$
: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/
|