Created by: gwideman, Oct 18, 2013 1:46 am
Revised by: gwideman, Nov 6, 2013 12:45 am (11 revisions)


Notes on the various things that are mentioned in the Python space in connection with installation and distribution. Trying to sort out what thing does what.

Outline of the problem:


  • distutils: Package included with Python (ie: CPython)
    • 1. An Introduction to Distutils
    • Package in ...\Lib\distutils
        • setup( ) function to be called from developer-prepared
          • sdist --> archive file
          • install: archive --> installed files
  • setuptools
    • "Enhancements" to disutils, especially dealing with dependencies
    • easy_install: "Easy Install is a python module (easy_install) bundled with setuptools that lets you automatically download (typically from PyPI), build, install, and manage Python packages."
      • Knows how to install egg
      • and other distributables.... (which?)
    • A script which bootstraps the download and installation of setuptools. Ie: Getting and running is the/a way to get setuptools installed.
  • Conventional name for file prepared by developer to package the project into an archive, and by end-user to install the package. Used with distutils and setuptools.
  • pip: Tool for installing and managing Python packages: pip 1.4.1 documentation
    • Uses setuptools. So appears to be an alternative to easy_install.
    • Various descriptions state that pip can't install the following:
      • eggs
      • binary eggs
      • binary packages
  • wheel: "A built-package format" (so an alternative to egg).
    • From PyPA: "A wheel is a ZIP-format archive with a specially formatted filename and the .whl extension. It is designed to contain all the files for a PEP 376 compatible install in a way that is very close to the on-disk format. Many packages will be properly installed with only the “Unpack” step (simply extracting the file onto sys.path), and the unpacked archive preserves enough information to “Spread” (copy data and scripts to their final locations) at any later time"
    • Create: The wheel project provides a bdist_wheel command for setuptools (requires distribute >= 0.6.34. Wait, does this mean now it just requires setuptools post distribute merger?).
    • Install: Wheel files can be installed with a newer pip from or with wheel’s own command line utility. (Or possibly just by Unpack.)
  • PyPI Python Package Index (Once known as Cheeseshop)
    • A repository website from which to get many popular third-party packages
    • Repository accepts packages from anyone so it can be used as a standardized distribution platform
      • Are private distributions possible this way?
  • zc.buildout: Zope Corp buildout "Buildout is a Python-based build system for creating, assembling and deploying applications from multiple parts"
    • I note it has specific facilities to accommodate development of local libraries separate from application packages. ("Local eggs") feature.
  • virtualenv, (venv in 3.3+): So-called Virtual Python Environment. A way to set up a python environment (interpreter, surrounding directory structure) that can use libraries from the base installation but allows separate installation of additional libraries particular to a project without affecting the base installation.
  • bento and PyPA: "Bento is a packaging tool solution for python software, targeted as an alternative to distutils, setuptools, distribute, etc.... Bento’s philosophy is reproducibility, extensibility and simplicity (in that order)."
  • conda: Installation tool for managing Anaconda installations
  • Hashdist: Not clear what it is; User Guide doesn't say what it is. User’s guide to Hashdist v. 0.2
  • Python Package Manager: Binary package manager from Active State.
  • Stalled or discontinued
    • distribute: competitor to setuptools
      • includes a version of setuptools (including easy_install)
      • merged back into setuptools, as of 2013-06
    • distutils2: Was going to be an improved distutils package for Python 3.3, but development stopped.
      • Involved a setup.cfg file instead of, to avoid "executable" installer.
    • distlib: "Low-level functions that relate to packaging and distributing Python software. Included a "packaging" package supposed to be in 3.3 but removed. Might have been part of distutils2?