.. This file is part of everyapp.bootstrap.
.. Copyright (C) 2010-2012 Krys Lawrence
..
.. everyapp.bootstrap is free software: you can redistribute it and/or modify
.. it under the terms of the GNU General Public License as published by the
.. Free Software Foundation, either version 3 of the License, or (at your
.. option) any later version.
..
.. everyapp.bootstrap is distributed in the hope that it will be useful, but
.. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
.. more details.
..
.. You should have received a copy of the GNU General Public License along with
.. this program.  If not, see <http://www.gnu.org/licenses/>.

.. index:: related projects, other projects; related
.. _related_projects:

********************************
Related and Alternative Projects
********************************

This |file| describes other projects that are related in some way to
*everyapp.bootstrap*.  It also describes alternative projects that can provide
similar functionality.

Related Projects
================

Below is a list of other projects that are related to *everyapp.bootstrap*.
If you like this project, you may also find these others useful as well.

**virtualenv:**
  virtualenv_ "is a tool to create isolated Python_ environments."

  *everyapp.bootstrap* is really just some customizations on top of it.

**Paver:**
  Paver_ "is a Python_-based build/distribution/deployment scripting tool along
  the lines of Make_ or Rake_."

  It includes support for creating customized virtualenv_ bootstrap scripts.
  In fact, *everyapp.bootstrap*'s creator, Krys Lawrence, has used Paver_ very
  successfully for years.  Paver_ is the inspiration for creating
  *everyapp.bootstrap*.

.. index:: alternative projects, other projects; alternatives
.. _alternative_projects:

Alternative Projects
====================

Below is a list of other projects that provide the same or similar
functionality.  If *everyapp.bootstrap* does not meet your needs, perhaps one
of these other projects will.

**virtualenv:**
  virtualenv_ "is a tool to create isolated Python_ environments."

  While *everyapp.bootstrap* uses virtualenv_ to create virtual environment
  bootstrap scripts, you can use virtualenv_ directly to create your customized
  bootstrap scripts.  What *everyapp.bootstrap* adds are the enhanced
  |features| like configuration file support and installation of additional
  packages.

**Paver:**
  Paver_ "is a Python_-based build/distribution/deployment scripting tool along
  the lines of Make_ or Rake_."

  It includes support for creating customized virtualenv_ bootstrap scripts
  that can install additional packages and run additional commands.  However,
  until recently_ (2010-11-11) Paver_ has been only minimally maintained and
  has not kept up with newer virtualenv_ developments.  Also, Paver_ is less
  flexible than *everyapp.bootstrap* in it's virtualenv_ customizability and
  it's virtualenv_ support cannot be separated from the rest of the Paver_
  tool.  It was for these reasons that *everyapp.bootstrap* was created.  That
  said, Paver_ is an excellent tool and the closest alternative in spirit to
  *everyapp.bootstrap*.

**pyutilib.virtualenv:**
  pyutilib.virtualenv_ "includes the **vpy_create** script, which is used to
  create virtualenv_ bootstrap scripts that automate the installation of
  virtualenv_ along with other Python_ packages."

  Like *everyapp.bootstrap*, it includes support for a configuration file and
  installing additional packages.  However, it also seems more complex.  It
  seems to create several additional directories and seems to have a greater
  focus on Subversion_ checkouts.  *everyapp.bootstrap* seems to be a simpler,
  more direct customization of virtualenv_.

**envbuilder:**
  envbuilder_ "is a system for automatically building virtualenvs_ in Python_.
  To do this, it uses a .env config file to define parcels, which are
  individual pieces of software to be checked out and installed into the
  virtualenv_."

  envbuilder_ seems like it does similar things as *everyapp.bootstrap*,
  however, it is lacking in documentation and like pyutilib.virtualenv_, seems
  to have a greater focus on Subversion_ checkouts.  Also, the concept of
  parcels and the format of it's .env files are more complex than the more
  direct customizations to virtualenv_ that *everyapp.bootstrap* provides.

**virtualenvwrapper.project:**
  virtualenvwrapper.project_ "is a plugin [sic] for virtualenvwrapper_ to
  extend its project-management features.  Where virtualenvwrapper_ is for
  managing virtualenv_ environments, project manages your development source
  directories."

  Through the use of it's template system, you could use
  virtualenvwrapper.project_ to build a customized development environment for
  a project.   However, virtualenvwrapper_ does not work on Windows and
  building/integrating a template into your project as a bootstrap script would
  likely be more complicated than using *everyapp.bootstrap*.
  *everyapp.bootstrap* is more focused on being part of your project in order
  to create reproducible development environments.  virtualenvwrapper.project_
  seems to have a more external-to-your-project focus.

**zc.buildout:**
  The zc.buildout_ "project provides support for creating applications,
  especially Python_ applications.  It provides tools for assembling
  applications from multiple parts, Python_ or otherwise.  An application may
  actually contain multiple programs, processes, and configuration settings."

  zc.buildout_ provides an alternative to virtualenv_ for creating isolated
  Python_ environments.  Like *everyapp.bootstrap* it supports using a
  configuration file and installing additional packages.  It can also do a lot
  more.  On the other hand, it does not use virtualenv_ and is more confusing
  to use.  It is commonly used in automated deployment scenarios, whereas
  *everyapp.bootstrap* focuses more on reproducible development environments.

**rjm.recipe.venv:**
  rjm.recipe.venv_ "is a simple zc.buildout_ recipe that will use the
  virtualenv_ package to turn the buildout root into a sandboxed virtual
  python_ environment.  It is especially useful in conjunction with
  gp.recipe.pip_, which can then be used to install python_ packages into the
  virtualenv_ that has been created."

  rjm.recipe.venv_, along with gp.recipe.pip_ and zc.buildout_ could be used
  together to achieve much of the enhanced capabilities of
  *everyapp.bootstrap*.  However, that is a much more complex setup and seems
  redundant once you are already using zc.buildout_.  Also, not all packages
  can be installed with pip_, especially on Windows, which is why
  *everyapp.bootstrap* includes support for easy_install_.

**BPT:**
  BPT_ "is a Python_ library (``bpt``) and a command line application (``box``)
  to create and manage isolated enviroments [sic], or boxes. [...] BPT_ is
  similar in some ways to virtualenv_, but it is not restricted to Python_
  packages, allowing to install [sic] virtually any Unix software."

  It seems like you could use BPT_ to create isolated Python environments, like
  virtualenv_ does, along with the installation of additional packages and the
  running of additional commands.  However, BPT_ does not use virtualenv_ and
  does not include support for Windows.  It also seems more complex because of
  it's broader scope.  *everyapp.bootstrap* is simpler and more focused on
  development environments for Python_ projects.
