summaryrefslogtreecommitdiff
path: root/docs/story.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/story.rst')
-rw-r--r--docs/story.rst62
1 files changed, 0 insertions, 62 deletions
diff --git a/docs/story.rst b/docs/story.rst
deleted file mode 100644
index 2c150c2..0000000
--- a/docs/story.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-The Story of Wheel
-==================
-
-I was impressed with Tarek’s packaging talk at PyCon 2010, and I
-admire PEP 345 (Metadata for Python Software Packages 1.2) and PEP 376
-(Database of Installed Python Distributions) which standardize a richer
-metadata format and show how distributions should be installed on disk. So
-naturally with all the hubbub about `packaging` in Python 3.3, I decided
-to try it to reap the benefits of a more standardized and predictable
-Python packaging experience.
-
-I began by converting `cryptacular`, a password hashing package which
-has a simple C extension, to use setup.cfg. I downloaded the Python 3.3
-source, struggled with the difference between setup.py and setup.cfg
-syntax, fixed the `define_macros` feature, stopped using the missing
-`extras` functionality, and several hours later I was able to generate my
-`METADATA` from `setup.cfg`. I rejoiced at my newfound freedom from the
-tyranny of arbitrary code execution during the build and install process.
-
-It was a lot of work. The package is worse off than before, and it can’t
-be built or installed without patching the Python source code itself.
-
-It was about that time that distutils-sig had a discussion about the
-need to include a generated setup.cfg from setup.cfg because setup.cfg
-wasn’t static enough. Wait, what?
-
-Of course there is a different way to massively simplify the install
-process. It’s called built or binary packages. You never have to run
-`setup.py` because there is no `setup.py`. There is only METADATA aka
-PKG-INFO. Installation has two steps: ‘build package’; ‘install
-package’, and you can skip the first step, have someone else do it
-for you, do it on another machine, or install the build system from a
-binary package and let the build system handle the building. The build
-is still complicated, but installation is simple.
-
-With the binary package strategy people who want to install use a simple,
-compatible installer, and people who want to package use whatever is
-convenient for them for as long as it meets their needs. No one has
-to rewrite `setup.py` for their own or the 20k+ other packages on PyPi
-unless a different build system does a better job.
-
-Wheel is my attempt to benefit from the excellent distutils-sig work
-without having to fix the intractable `distutils` software itself. Like
-METADATA and .dist-info directories but unlike Extension(), it’s
-simple enough that there really could be alternate implementations; the
-simplest (but less than ideal) installer is nothing more than “unzip
-archive.whl” somewhere on sys.path.
-
-If you’ve made it this far you probably wonder whether I’ve heard
-of eggs. Some comparisons:
-
-* Wheel is an installation format; egg is importable. Wheel archives do not need to include .pyc and are less tied to a specific Python version or implementation. Wheel can install (pure Python) packages built with previous versions of Python so you don’t always have to wait for the packager to catch up.
-
-* Wheel uses .dist-info directories; egg uses .egg-info. Wheel is compatible with the new world of Python `packaging` and the new concepts it brings.
-
-* Wheel has a richer file naming convention for today’s multi-implementation world. A single wheel archive can indicate its compatibility with a number of Python language versions and implementations, ABIs, and system architectures. Historically the ABI has been specific to a CPython release, but when we get a longer-term ABI, wheel will be ready.
-
-* Wheel is lossless. The first wheel implementation `bdist_wheel` always generates `egg-info`, and then converts it to a `.whl`. Later tools will allow for the conversion of existing eggs and bdist_wininst distributions.
-
-* Wheel is versioned. Every wheel file contains the version of the wheel specification and the implementation that packaged it. Hopefully the next migration can simply be to Wheel 2.0.
-
-I hope you will benefit from wheel.