Commits

Michael Elsdörfer committed 661b191 Merge

Merged upstream.

  • Participants
  • Parent commits c88c1e7, 5f79df0

Comments (0)

Files changed (86)

 syntax: glob
+*.pyc
 README.html
+build
+dist
+distribute*.egg
+distribute*.tar.gz
+docs/build
+docs/html
+docs/website
+tests/catch_output
+tests/testpackage/build
+tests/testpackage/dist
+tests/testpackage/testpackage.egg-info
+trace.txt
 virtualenvwrapper.egg-info
-paver-minilib.zip
-setup.py
-trace.txt
-docs
-*.pyc
-sphinx/web/templates/base.html
-tests/catch_output
+virtualenvwrapper/docs
+.tox
+*.orig
 
 syntax: re
 .DS_Store
 e55e8a54de7be78b8400632ab004abb29aaa8899 1.23
 b243d023094b6b0ef1b834dcc100f8c342c67537 1.24
 4a8870326d84f97d5539b586b21419ba330fea48 1.24.1
+f318697791416cf0897091718d542e8045854233 1.24.2
+06229877a640ecb490faf46f923d8be916a0ebed 1.25
+51eef82a39d431cee156fea7005fa1631e21655e 1.26
+3edf5f22481587608f8c172f8758014446a2d888 1.27
+3edf5f22481587608f8c172f8758014446a2d888 1.27
+d64869519c2e0553303cfeeb0918271564c72beb 1.27
+485e1999adf0d388340aec42bae4d87f93b8da92 2.0
+485e1999adf0d388340aec42bae4d87f93b8da92 2.0
+54713c4552c2bcf0155071c87cfca84ed1ea5f6e 2.0
+91e1124c68315f8cdc6578c4f72e3ed9c44e1fca 2.0.1
+6a51a81454ae9dde5d923668ad5f034b3467fe11 2.0.2
+241df6c36860c13fae5468881457a27840ee9d72 2.1
+7540fc7d8e63cafe6c3126e0855ed8c277b450cf 2.1.1
+d5c5faecc92daef3d15510f0314d4d5e6c95e234 2.2
+66a89d019905aa7b697b7ce69303201f50e1d4e7 2.2.1
+66a89d019905aa7b697b7ce69303201f50e1d4e7 2.2.1
+87d60f20a715e5641e819d127cfdc31f8003c4f2 2.2.1
+266a166f80da390a22e684497f971b6b22776cb9 2.2.2
+b9d4591458bbaf41d4e40104e8f19c19d76b4664 2.3
+64f858d461d449601d6bc3e2521b34dbd1c916a5 2.4
+64f858d461d449601d6bc3e2521b34dbd1c916a5 2.4
+a85d80e88996c15e2e2b832e2956811eea73ee34 2.4
+80e2fcda77acd85500159e3e688e5acfa3d99bd3 2.5
+2ab678413a290410ed4c8a1b72a567d79caa5ae5 2.5.1
+f71ffbb996c41606aea15b2114120d9fca3adfc6 2.5.2
+dc74f106d8d2dd58031b2dbac31b1e068f780de4 2.5.3
+b0f27c65fa64627599c2a022a076ae5ee7157ae4 2.6
+445a58d5a05a1426cefb47e54b692b6a58fdcc4f 2.6.1
+625d85d3136ff746accc490c5f9210b1b0074533 2.6.2
+e7582879df06689ec54cd820c377e89114b75ee2 2.6.3
+e7582879df06689ec54cd820c377e89114b75ee2 2.6.3
+246ce68795ea9caeb88ec2fa17e4f3151c58cf3f 2.6.3
+ea378ef00313cd77d251e61b4c0422503972b79f 2.7
+b20cf787d8e1c167853709ca01731a3efb4b5fe8 2.7.1
+7e0abe005937033aaf5d00fe3db3c94addecef7b 2.8
+7e0abe005937033aaf5d00fe3db3c94addecef7b 2.8
+279244c0fa41a327cc534fc40e9e7fadea180c23 2.8
+2011-04-13  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (rmvirtualenv): Move to a safe directory
+	before removing the virtual environment, and only move back if the
+	previously occupied directory still exists.
+
+2011-04-10  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh: Initialize VIRTUALENVWRAPPER_LOG_DIR and
+	VIRTUALENVWRAPPER_HOOK_DIR.
+
+	* virtualenvwrapper/hook_loader.py (main): Use
+	VIRTUALENVWRAPPER_LOG_DIR for logs instead of assuming
+	WORKON_HOME.
+
+	* virtualenvwrapper/user_scripts.py (make_hook): Change verbosity
+	of message telling the user we have created a new hook script for
+	them.
+
+2011-02-26  Doug Hellmann  <dhellmann@racemi.com>
+
+	* docs/sphinx/conf.py: Just hard-code the version.
+
+	* setup.py: Just hard-code the version.
+
+	* virtualenvwrapper/version.py: Put the version info inside the
+	package so it is available to the doc build and packaging
+	script. This also makes the readthedocs.org build work properly.
+
+	* setup.py: Import the version information from the package.
+
+	* docs/sphinx/conf.py: Import the version information from the
+	package.
+
+	* Makefile: Remove rule to get the version from the installer for
+	the doc build.
+
+2011-01-24  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh: Replace hard-coded name "virtualenv" with
+	the variable VIRTUALENVWRAPPER_VIRTUALENV to allow tests (and
+	users) to override it.
+
+	* tests/test_mkvirtualenv.sh (test_virtualenv_fails): Add a test
+	to reproduce the conditions reported in issue #76.
+
+2010-12-27  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (virtualenvwrapper_get_python_version):
+	Only include the major and minor numbers, not the patch level.
+
+2010-12-26  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper/user_scripts.py (make_hook): Do not specify
+	text mode when creating the files so cygwin will not replace \n
+	with \r\n.
+
+	* setup.py: Change "requires" to "install_requires" so pip will
+	try to install virtualenv if it is not already there.  Add trove
+	classifiers for the supported Python versions.
+
+	* virtualenvwrapper.sh (virtualenvwrapper_get_python_version): Use
+	python's -V option and cut to get the version instead of a python
+	one-liner.
+
+2010-12-24  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (cpvirtualenv): Ensure that both pre hooks
+	are run, even if one produces an error.
+
+	* virtualenvwrapper/user_scripts.py: Change log message format.
+
+	* tox.ini: Configuration file for running tests under tox.
+
+	* tests/test_run_hook.sh (test_virtualenvwrapper_run_hook_permissions):
+	Fix the expected output message.
+
+	* tests/*: Make sure all of the test scripts have execute permission.
+
+	* tests/test.sh (test_virtualenvwrapper_verify_workon_home_missing_dir_quiet_init):
+	Use source instead of starting another shell, since zsh doesn't
+	play nicely with inheriting environment settings otherwise.
+	(test_python_interpreter_set_incorrectly): Force
+	VIRTUALENVWRAPPER_PYTHON before running the script in a sub-shell.
+
+	* tests/run_tests: Script to run through all of the other test
+	scripts one at a time.
+
+2010-09-18  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh: Apply patch from Zach Voase to fix
+	lsvirtualenv under zsh.
+
+2010-09-14  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (workon): Use the brief list format by
+	default.
+
+2010-08-16  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper/user_scripts.py (get_env_details): New hook to
+	optionally give more detail than the name of an environment when
+	the user requests a list.
+
+	* virtualenvwrapper.sh: Update workon to use the get_env_details
+	hook to print more details, if the user provides scripts to give
+	them.
+
+2010-06-03  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh: Escape the call to "which" so we don't use
+	an alias by accident.
+
+2010-05-22  Doug Hellmann  <dhellmann@racemi.com>
+
+	* tests/test_cp.sh: Clarify some of the tests by breaking up,
+	renaming, and rewriting some functions.
+
+	* Makefile (PYTHON26): If we're in a virtualenv when the tests
+	start, use a hard-coded path to the binary to get the global
+	version.
+
+2010-05-18  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (virtualenvwrapper_tempfile): Use a trap to
+	ensure the temporary file is removed when we exit.
+
+2010-05-16  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (virtualenvwrapper_tempfile): Set a default
+	suffix of "hook" and explicitly report when we detect an error
+	condition.
+
+	* Makefile (PYTHON26): Use which to find python2.6, the default
+	interpreter, so we can run the tests as "make test-quick" on other
+	hosts.
+
+	* tests/test_tempfile.sh (test_tempfile): Normalize the paths so
+	we don't depend on the value of TMPDIR or behavior of dirname.
+
+	* tests/test_cd.sh: Make sure the virtualenv from the caller does
+	not influence test behaviors by establishing our own virtualenv
+	locally.
+
+	* virtualenvwrapper/hook_loader.py (main): Add more debug logging
+	to try to narrow down the tempfile issue (#35).
+	(run_hooks): Insert a comment into the output file to show which
+	hook we are running.
+
+	* virtualenvwrapper.sh (virtualenvwrapper_run_hook): Add more
+	debugging error reporting to try to narrow down the tempfile
+	issue (#35).
+
+2010-05-09  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh: Tweak path normalization code so double
+	slashes are also removed from WORKON_HOME. Use typeset for local
+	variables.
+	(virtualenvwrapper_tempfile): Add -t option to mktemp so the new
+	files are always created in the user's temporary directory.
+	(virtualenvwrapper_run_hook): Add the hook name to the temporary
+	file name.
+
+	* tests/test_tempfile.sh: Remove obsolete test.  Fix assertions
+	for remaining test.
+
+	* tests/test_mkvirtualenv.sh (test_hooks): Use pwd to convert
+	WORKON_HOME to the expected value.
+
+	* tests/test.sh (test_python_interpreter_set_incorrectly): Rework
+	grep-based assertion to actually pass.
+
+	* Makefile (test-bash test-ksh test-sh): Remove wildcard build
+	rule so test-quick target works.
+
+2010-05-02  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (virtualenvwrapper_run_hook): Instead of
+	-m, use -c so hooks can be run under Python 2.4.
+
+2010-04-29  Doug Hellmann  <dhellmann@racemi.com>
+
+	* tests/test_workon.sh: Refactor deactivate tests into their own
+	script.
+
+	* tests/test_deactivate.sh: Refactor deactivate tests into their
+	own script.
+
+	* virtualenvwrapper.sh (virtualenvwrapper_get_python_version): Add
+	a comment about why we're using the $PATH python instead of the
+	one where the wrappers are installed.
+	(add2virtualenv): Use the install-tree python instead of the one
+	from $PATH.
+	(deactivate): Ignore errors from redundant unset calls.
+
+2010-04-26  Doug Hellmann  <dhellmann@racemi.com>
+
+	* virtualenvwrapper.sh (virtualenvwrapper_tempfile): Add a suffix
+	to the tempfile name so we know the tempfile module isn't going to
+	erase it.
 include setup.py
-include paver-minilib.zip
-include pavement.py
+include distribute_setup.py
 include tests/*
-recursive-include virtualenvwrapper *.html *.txt *.css *.js *.png
-recursive-include docsource *.rst
+recursive-include docs *.rst *.py *.html *.css *.js *.png *.txt
+
+# Default target is to show help
+help:
+	@echo "sdist          - Source distribution"
+	@echo "html           - HTML documentation"
+	@echo "docclean       - Remove documentation build files"
+	@echo "upload         - upload a new release to PyPI"
+	@echo "develop        - install development version"
+	@echo "test           - run the test suite"
+	@echo "test-quick     - run the test suite for bash and one version of Python ($(PYTHON26))"
+	@echo "website        - generate web version of the docs"
+	@echo "installwebsite - copy web version of HTML docs up to server"
+
+.PHONY: sdist
+sdist: html
+	rm -f dist/*.gz
+	rm -rf docs/website
+	python setup.py sdist
+	cp -v dist/*.gz ~/Desktop
+
+# Documentation
+.PHONY: html
+html:
+	(cd docs && $(MAKE) html LANGUAGE="en")
+	(cd docs && $(MAKE) html LANGUAGE="es")
+	(cd docs && $(MAKE) html LANGUAGE="ja")
+
+.PHONY: docclean
+docclean:
+	rm -rf docs/build docs/html
+
+# Website copy of documentation
+.PHONY: website
+website: 
+	[ ~/Devel/doughellmann/doughellmann/templates/base.html -nt docs/sphinx/web/templates/base.html ] && (echo "Updating base.html" ; cp ~/Devel/doughellmann/doughellmann/templates/base.html docs/sphinx/web/templates/base.html) || exit 0
+	rm -rf docs/website
+	(cd docs && $(MAKE) html BUILDDIR="website/en" LANGUAGE="en")
+	(cd docs && $(MAKE) html BUILDDIR="website/es" LANGUAGE="es")
+	(cd docs && $(MAKE) html BUILDDIR="website/ja" LANGUAGE="ja")
+
+installwebsite: website
+	(cd docs/website/en && rsync --rsh=ssh --archive --delete --verbose . www.doughellmann.com:/var/www/doughellmann/DocumentRoot/docs/virtualenvwrapper/)
+	(cd docs/website/es && rsync --rsh=ssh --archive --delete --verbose . www.doughellmann.com:/var/www/doughellmann/DocumentRoot/docs/virtualenvwrapper/es/)
+	(cd docs/website/ja && rsync --rsh=ssh --archive --delete --verbose . www.doughellmann.com:/var/www/doughellmann/DocumentRoot/docs/virtualenvwrapper/ja/)
+
+# Register the new version on pypi
+.PHONY: register
+register:
+	echo "USE upload target"
+	exit 1
+	python setup.py register
+
+.PHONY: upload
+upload:
+	python setup.py sdist upload
+
+# Testing
+test:
+	tox
+
+test-quick:
+	tox -e py27
+
+develop:
+	python setup.py develop

File README

-#################
-virtualenvwrapper
-#################
-
-virtualenvwrapper is a set of extensions to Ian Bicking's `virtualenv
-<http://pypi.python.org/pypi/virtualenv>`_ tool.  The extensions include
-wrappers for creating and deleting virtual environments and otherwise
-managing your development workflow, making it easier to work on more
-than one project at a time without introducing conflicts in their
-dependencies.
-
-========
-Features
-========
-
-1.  Organizes all of your virtual environments in one place.
-
-2.  Wrappers for creating and deleting environments, including
-    user-configurable hooks.
-
-3.  Use a single command to switch between environments.
-
-4.  Tab completion for commands that take a virtual environment as
-    argument.
-
-Rich Leland has created a short `screencast
-<http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/>`__
-showing off the features of virtualenvwrapper.
-
-===========
-Quick Setup
-===========
-
-1. Create a directory to hold all of the virtual environments. The default is
-   ``$HOME/.virtualenvs``.
-
-2. Add two lines to your .bashrc to set the location where the virtual environments should
-   live and the location of the script installed with this package::
-
-    export WORKON_HOME=$HOME/.virtualenvs
-    source /usr/local/bin/virtualenvwrapper_bashrc
-
-3. Run: ``source ~/.bashrc``
-4. Run: ``workon``
-5. A list of environments, empty, is printed.
-6. Run: ``mkvirtualenv temp``
-7. A new environment, ``temp`` is created and activated.
-8. Run: ``workon``
-9. This time, the ``temp`` environment is included.
-
-=======
-License
-=======
-
-Copyright Doug Hellmann, All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Doug Hellmann not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.

File README.es.txt

+..   -*- mode: rst -*-
+
+#################
+virtualenvwrapper
+#################
+
+virtualenvwrapper es un conjunto de extensiones de la herramienta de Ian
+Bicking `virtualenv <http://pypi.python.org/pypi/virtualenv>`_. Las extensiones
+incluyen funciones para la creación y eliminación de entornos virtuales y por otro
+lado administración de tu rutina de desarrollo, haciendo fácil trabajar en más
+de un proyecto al mismo tiempo sin introducir conflictos entre sus dependencias.
+
+===============
+Características
+===============
+
+1. Organiza todos tus entornos virtuales en un sólo lugar.
+
+2. Funciones para administrar tus entornos virtuales (crear, eliminar, copiar).
+
+3. Usa un sólo comando para cambiar entre los entornos.
+
+4. Completa con Tab los comandos que toman un entorno virtual como argumento.
+
+5. Ganchos configurables para todas las operaciones.
+
+6. Sistema de plugins para la creación de extensiones compartibles.
+
+Rich Leland ha grabado un pequeño `screencast
+<http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/>`__
+mostrando las características de virtualenvwrapper.
+
+
+===========
+Instalación
+===========
+
+Ve a la `documentación del proyecto <http://www.doughellmann.com/docs/virtualenvwrapper/>`__
+para las instrucciones de instalación y configuración.
+
+Actualizar desde 1.x
+====================
+
+El script de shell que contiene las funciones ha sido renombrado en la serie
+2.x para reflejar el hecho de que otros shells, además de bash, son soportados. En
+tu archivo de inicio del shell, cambia ``source
+/usr/local/bin/virtualenvwrapper_bashrc`` por ``source
+/usr/local/bin/virtualenvwrapper.sh``.
+
+==============
+Contribuciones
+==============
+
+Antes de contribuir con nuevas características al *core* de virtualenvwrapper,
+por favor considera, en vez, si no debe ser implementada como una extensión.
+
+Ve a la `documentación para desarrolladores 
+<http://www.doughellmann.com/docs/virtualenvwrapper/developers.html>`__
+por trucos sobre parches.
+
+========
+Licencia
+========
+
+Copyright Doug Hellmann, All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Doug Hellmann not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+.. _BitBucket: http://bitbucket.org/dhellmann/virtualenvwrapper/overview/

File README.ja.txt

+..   -*- mode: rst -*-
+
+#################
+virtualenvwrapper
+#################
+
+virtualenvwrapper は Ian Bicking の 
+`virtualenv <http://pypi.python.org/pypi/virtualenv>`_ ツールの
+拡張機能です。この拡張機能は仮想環境の作成・削除を行ったり、
+開発ワークフローを管理するラッパーを提供します。このラッパーを
+使用することで、開発環境の依存による競合を発生させず、1つ以上の
+プロジェクトで同時に作業し易くなります。
+
+====
+機能
+====
+
+1. 1つの開発環境で全ての仮想環境を構成する
+
+2. 仮想環境を管理(作成、削除、コピー)するラッパー
+
+3. たった1つのコマンドで仮想環境を切り替える
+
+4. コマンドの引数として仮想環境がタブ補完できる
+
+5. 全ての操作に対してユーザ設定でフックできる(:ref:`scripts` を参照)
+
+6. さらに共有可能な拡張機能を作成できるプラグインシステム(:ref:`plugins` を参照)
+
+Rich Leland は virtualenvwrapper の機能を誇示するために短い
+`スクリーンキャスト <http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/>`__
+を作成しました。
+
+============
+インストール
+============
+
+インストールとインフラを設定するには
+`プロジェクトのドキュメント <http://www.doughellmann.com/docs/virtualenvwrapper/ja/>`__ 
+を参照してください。
+
+サポートシェル
+==============
+
+virtualenvwrapper は Bourne シェル互換の構文で定義された
+シェル *関数* のセットです。それは `bash`, `ksh` と `zsh` で
+テストされています。その他のシェルでも動作するかもしれませんが、
+ここに記載されていないシェルで動作することを発見したら私に
+教えてください。もしあなたがその他のシェルで動作させるために
+virtualenvwrapper を完全に書き直すことなく修正できるなら、
+bitbucket のプロジェクトページを通じて pull リクエストを
+送ってください。あなたが非互換なシェル上で動作させるクローンを
+作成するなら、このページでリンクを張るので私に連絡してください。
+
+Python バージョン
+=================
+
+virtualenvwrapper は Python 2.4 - 2.7 でテストされています。
+
+1.x からのアップグレード
+========================
+
+ラッパー関数を含むシェルスクリプトは 2.x バージョンで bash 
+以外のシェルをサポートするためにその名前が変更されました。
+あなたの起動ファイルの ``source /usr/local/bin/virtualenvwrapper_bashrc`` を
+``source /usr/local/bin/virtualenvwrapper.sh`` へ変更してください。
+
+====
+貢献
+====
+
+virtualenvwrapper のコアへ新しい機能を追加する前に、
+その代わりに機能拡張として実装すべきかどうかをよく考えてください。
+
+パッチを提供するための tips は
+`開発者ドキュメント <http://www.doughellmann.com/docs/virtualenvwrapper/developers.html>`__
+を参照してください。
+
+========
+サポート
+========
+
+問題や機能を議論するには
+`virtualenvwrapper Google Group <http://groups.google.com/group/virtualenvwrapper/>`__
+に参加してください。
+
+`BitBucket のバグトラッカー <http://bitbucket.org/dhellmann/virtualenvwrapper/>`__
+でバグを報告してください。
+
+シェルエイリアス
+================
+
+virtualenvwrapper は大きなシェルスクリプトなので、
+多くのアクションはシェルコマンドを使用します。
+あなたの環境が多くのシェルエイリアスやその他の
+カスタマイズを行っているなら、何かしら問題に
+遭遇する可能性があります。バグトラッカーにバグを
+報告する前に、そういったエイリアスを無効な *状態* で
+テストしてください。あなたがその問題を引き起こす
+エイリアスを判別できるなら virtualenvwrapper を
+もっと堅牢なものにすることに役立つでしょう。
+
+==========
+ライセンス
+==========
+
+Copyright Doug Hellmann, All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Doug Hellmann not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+..   -*- mode: rst -*-
+
+#################
+virtualenvwrapper
+#################
+
+virtualenvwrapper is a set of extensions to Ian Bicking's `virtualenv
+<http://pypi.python.org/pypi/virtualenv>`_ tool.  The extensions include
+wrappers for creating and deleting virtual environments and otherwise
+managing your development workflow, making it easier to work on more
+than one project at a time without introducing conflicts in their
+dependencies.
+
+========
+Features
+========
+
+1.  Organizes all of your virtual environments in one place.
+
+2.  Wrappers for creating, copying and deleting environments, including
+    user-configurable hooks.
+
+3.  Use a single command to switch between environments.
+
+4.  Tab completion for commands that take a virtual environment as
+    argument.
+
+5. User-configurable hooks for all operations.
+
+6. Plugin system for more creating sharable extensions.
+
+Rich Leland has created a short `screencast
+<http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/>`__
+showing off the features of virtualenvwrapper.
+
+============
+Installation
+============
+
+See the `project documentation
+<http://www.doughellmann.com/docs/virtualenvwrapper/>`__ for
+installation and setup instructions.
+
+Supported Shells
+================
+
+virtualenvwrapper is a set of shell *functions* defined in Bourne
+shell compatible syntax.  It is tested under `bash`, `ksh`, and `zsh`.
+It may work with other shells, so if you find that it does work with a
+shell not listed here please let me know.  If you can modify it to
+work with another shell, without completely rewriting it, send a pull
+request through the bitbucket project page.  If you write a clone to
+work with an incompatible shell, let me know and I will link to it
+from this page.
+
+Python Versions
+===============
+
+virtualenvwrapper is tested under Python 2.4 - 2.7.
+
+Upgrading from 1.x
+==================
+
+The shell script containing the wrapper functions has been renamed in
+the 2.x series to reflect the fact that shells other than bash are
+supported.  In your startup file, change ``source
+/usr/local/bin/virtualenvwrapper_bashrc`` to ``source
+/usr/local/bin/virtualenvwrapper.sh``.
+
+============
+Contributing
+============
+
+Before contributing new features to virtualenvwrapper core, consider
+whether they should be implemented as an extension instead.
+
+Refer to the `developers docs
+<http://www.doughellmann.com/docs/virtualenvwrapper/developers.html>`__
+for tips on contributing patches.
+
+=======
+Support
+=======
+
+Join the `virtualenvwrapper Google Group
+<http://groups.google.com/group/virtualenvwrapper/>`__ to discuss
+issues and features.  
+
+Report bugs via the `bug tracker on BitBucket
+<http://bitbucket.org/dhellmann/virtualenvwrapper/>`__.
+
+Shell Aliases
+=============
+
+Since virtualenvwrapper is largely a shell script, it uses shell
+commands for a lot of its actions.  If your environment makes heavy
+use of shell aliases or other customizations, you may encounter
+issues.  Before reporting bugs in the bug tracker, please test
+*without* your aliases enabled.  If you can identify the alias causing
+the problem, that will help make virtualenvwrapper more robust.
+
+=======
+License
+=======
+
+Copyright Doug Hellmann, All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Doug Hellmann not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.

File announce.es.rst

+¿Qué es virtualenvwrapper?
+==========================
+
+virtualenvwrapper es un conjunto de extensiones de la herramienta de Ian
+Bicking `virtualenv <http://pypi.python.org/pypi/virtualenv>`_. Las extensiones
+incluyen funciones para la creación y eliminación de entornos virtuales y por otro
+lado administración de tu rutina de desarrollo, haciendo fácil trabajar en más
+de un proyecto al mismo tiempo sin introducir conflictos entre sus dependencias.
+
+
+¿Qué es lo nuevo en 2.1?
+========================
+
+El principal propósito de esta *release* es un conjunto de mejoras para soportar
+virtualenvwrapper.project_, una nueva extensión para administrar los directorios
+de trabajo para los proyectos con plantillas. 2.1 también incluye pequeños
+cambios y corrección de bugs.
+
+- Agregado soporte para ksh. Gracias a Doug Latornell por hacer la investigación
+  sobre qué era necesario cambiar.
+- Testeo de importación de virtualenvwrapper.hook_loader en el inicio que reporta
+  el error de manera que debería ayudar al usuario a resolver cómo solucionarlo
+  (ticket #33).
+- Actualizada la documentación de mkvirtualenv para incluir el hecho de que un
+  nuevo entorno es activado inmediatamente luego de que es creado (ticket #30).
+- Agregados ganchos alrededor cpvirtualenv.
+- *deactivation* es más robusto, especialmente bajo ksh.
+- Uso del módulo de Python ``tempfile`` para creación de archivos temporales
+  de forma segura y portable.
+- Corregido un problema con ``virtualenvwrapper_show_workon_options`` que
+  causaba que este muestre ``*`` como el nombre de un virtualenv cuando no había
+  entornos creados todavía.
+- Cambio en el cargador de ganchos para que pueda ejecutar sólo un conjunto de
+  ganchos nombrados.
+- Agregado soporte para listar los ganchos disponibles, para ser usado en la
+  ayuda de los comandos como mkproject en virtualenvwrapper.project.
+- Corregida la opción -h de mkvirtualenv.
+- Cambiado el registro para que $WORKON_HOME/hook.log rote después de 10KiB.
+
+
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv
+
+.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/
+
+.. _virtualenvwrapper.project: http://www.doughellmann.com/projects/virtualenvwrapper.project/

File announce.rst

+=======================
+ virtualenvwrapper 2.8
+=======================
+
+What is virtualenvwrapper
+=========================
+
+virtualenvwrapper_ is a set of extensions to Ian Bicking's virtualenv_
+tool.  The extensions include wrappers for creating and deleting
+virtual environments and otherwise managing your development workflow,
+making it easier to work on more than one project at a time without
+introducing conflicts in their dependencies.
+
+What's New in 2.8
+=================
+
+This release includes a fix to make ``cpvirtualenv`` use the copy of
+``virtualenv`` specified by the ``VIRTUALENVWRAPPER_VIRTUALENV``
+variable. It also adds support for running the wrapper commands under
+the MSYS environment on Microsoft Windows systems (contributed by
+noirbizarre).
+
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv
+
+.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/

File distribute_setup.py

+#!python
+"""Bootstrap distribute installation
+
+If you want to use setuptools in your package's setup.py, just include this
+file in the same directory with it, and add this to the top of your setup.py::
+
+    from distribute_setup import use_setuptools
+    use_setuptools()
+
+If you want to require a specific version of setuptools, set a download
+mirror, or use an alternate download directory, you can do so by supplying
+the appropriate options to ``use_setuptools()``.
+
+This file can also be run as a script to install or upgrade setuptools.
+"""
+import os
+import sys
+import time
+import fnmatch
+import tempfile
+import tarfile
+from distutils import log
+
+try:
+    from site import USER_SITE
+except ImportError:
+    USER_SITE = None
+
+try:
+    import subprocess
+
+    def _python_cmd(*args):
+        args = (sys.executable,) + args
+        return subprocess.call(args) == 0
+
+except ImportError:
+    # will be used for python 2.3
+    def _python_cmd(*args):
+        args = (sys.executable,) + args
+        # quoting arguments if windows
+        if sys.platform == 'win32':
+            def quote(arg):
+                if ' ' in arg:
+                    return '"%s"' % arg
+                return arg
+            args = [quote(arg) for arg in args]
+        return os.spawnl(os.P_WAIT, sys.executable, *args) == 0
+
+DEFAULT_VERSION = "0.6.10"
+DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
+SETUPTOOLS_FAKED_VERSION = "0.6c11"
+
+SETUPTOOLS_PKG_INFO = """\
+Metadata-Version: 1.0
+Name: setuptools
+Version: %s
+Summary: xxxx
+Home-page: xxx
+Author: xxx
+Author-email: xxx
+License: xxx
+Description: xxx
+""" % SETUPTOOLS_FAKED_VERSION
+
+
+def _install(tarball):
+    # extracting the tarball
+    tmpdir = tempfile.mkdtemp()
+    log.warn('Extracting in %s', tmpdir)
+    old_wd = os.getcwd()
+    try:
+        os.chdir(tmpdir)
+        tar = tarfile.open(tarball)
+        _extractall(tar)
+        tar.close()
+
+        # going in the directory
+        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
+        os.chdir(subdir)
+        log.warn('Now working in %s', subdir)
+
+        # installing
+        log.warn('Installing Distribute')
+        if not _python_cmd('setup.py', 'install'):
+            log.warn('Something went wrong during the installation.')
+            log.warn('See the error message above.')
+    finally:
+        os.chdir(old_wd)
+
+
+def _build_egg(egg, tarball, to_dir):
+    # extracting the tarball
+    tmpdir = tempfile.mkdtemp()
+    log.warn('Extracting in %s', tmpdir)
+    old_wd = os.getcwd()
+    try:
+        os.chdir(tmpdir)
+        tar = tarfile.open(tarball)
+        _extractall(tar)
+        tar.close()
+
+        # going in the directory
+        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
+        os.chdir(subdir)
+        log.warn('Now working in %s', subdir)
+
+        # building an egg
+        log.warn('Building a Distribute egg in %s', to_dir)
+        _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
+
+    finally:
+        os.chdir(old_wd)
+    # returning the result
+    log.warn(egg)
+    if not os.path.exists(egg):
+        raise IOError('Could not build the egg.')
+
+
+def _do_download(version, download_base, to_dir, download_delay):
+    egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg'
+                       % (version, sys.version_info[0], sys.version_info[1]))
+    if not os.path.exists(egg):
+        tarball = download_setuptools(version, download_base,
+                                      to_dir, download_delay)
+        _build_egg(egg, tarball, to_dir)
+    sys.path.insert(0, egg)
+    import setuptools
+    setuptools.bootstrap_install_from = egg
+
+
+def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
+                   to_dir=os.curdir, download_delay=15, no_fake=True):
+    # making sure we use the absolute path
+    to_dir = os.path.abspath(to_dir)
+    was_imported = 'pkg_resources' in sys.modules or \
+        'setuptools' in sys.modules
+    try:
+        try:
+            import pkg_resources
+            if not hasattr(pkg_resources, '_distribute'):
+                if not no_fake:
+                    _fake_setuptools()
+                raise ImportError
+        except ImportError:
+            return _do_download(version, download_base, to_dir, download_delay)
+        try:
+            pkg_resources.require("distribute>="+version)
+            return
+        except pkg_resources.VersionConflict:
+            e = sys.exc_info()[1]
+            if was_imported:
+                sys.stderr.write(
+                "The required version of distribute (>=%s) is not available,\n"
+                "and can't be installed while this script is running. Please\n"
+                "install a more recent version first, using\n"
+                "'easy_install -U distribute'."
+                "\n\n(Currently using %r)\n" % (version, e.args[0]))
+                sys.exit(2)
+            else:
+                del pkg_resources, sys.modules['pkg_resources']    # reload ok
+                return _do_download(version, download_base, to_dir,
+                                    download_delay)
+        except pkg_resources.DistributionNotFound:
+            return _do_download(version, download_base, to_dir,
+                                download_delay)
+    finally:
+        if not no_fake:
+            _create_fake_setuptools_pkg_info(to_dir)
+
+def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
+                        to_dir=os.curdir, delay=15):
+    """Download distribute from a specified location and return its filename
+
+    `version` should be a valid distribute version number that is available
+    as an egg for download under the `download_base` URL (which should end
+    with a '/'). `to_dir` is the directory where the egg will be downloaded.
+    `delay` is the number of seconds to pause before an actual download
+    attempt.
+    """
+    # making sure we use the absolute path
+    to_dir = os.path.abspath(to_dir)
+    try:
+        from urllib.request import urlopen
+    except ImportError:
+        from urllib2 import urlopen
+    tgz_name = "distribute-%s.tar.gz" % version
+    url = download_base + tgz_name
+    saveto = os.path.join(to_dir, tgz_name)
+    src = dst = None
+    if not os.path.exists(saveto):  # Avoid repeated downloads
+        try:
+            log.warn("Downloading %s", url)
+            src = urlopen(url)
+            # Read/write all in one block, so we don't create a corrupt file
+            # if the download is interrupted.
+            data = src.read()
+            dst = open(saveto, "wb")
+            dst.write(data)
+        finally:
+            if src:
+                src.close()
+            if dst:
+                dst.close()
+    return os.path.realpath(saveto)
+
+
+def _patch_file(path, content):
+    """Will backup the file then patch it"""
+    existing_content = open(path).read()
+    if existing_content == content:
+        # already patched
+        log.warn('Already patched.')
+        return False
+    log.warn('Patching...')
+    _rename_path(path)
+    f = open(path, 'w')
+    try:
+        f.write(content)
+    finally:
+        f.close()
+    return True
+
+
+def _same_content(path, content):
+    return open(path).read() == content
+
+def _no_sandbox(function):
+    def __no_sandbox(*args, **kw):
+        try:
+            from setuptools.sandbox import DirectorySandbox
+            def violation(*args):
+                pass
+            DirectorySandbox._old = DirectorySandbox._violation
+            DirectorySandbox._violation = violation
+            patched = True
+        except ImportError:
+            patched = False
+
+        try:
+            return function(*args, **kw)
+        finally:
+            if patched:
+                DirectorySandbox._violation = DirectorySandbox._old
+                del DirectorySandbox._old
+
+    return __no_sandbox
+
+@_no_sandbox
+def _rename_path(path):
+    new_name = path + '.OLD.%s' % time.time()
+    log.warn('Renaming %s into %s', path, new_name)
+    os.rename(path, new_name)
+    return new_name
+
+def _remove_flat_installation(placeholder):
+    if not os.path.isdir(placeholder):
+        log.warn('Unkown installation at %s', placeholder)
+        return False
+    found = False
+    for file in os.listdir(placeholder):
+        if fnmatch.fnmatch(file, 'setuptools*.egg-info'):
+            found = True
+            break
+    if not found:
+        log.warn('Could not locate setuptools*.egg-info')
+        return
+
+    log.warn('Removing elements out of the way...')
+    pkg_info = os.path.join(placeholder, file)
+    if os.path.isdir(pkg_info):
+        patched = _patch_egg_dir(pkg_info)
+    else:
+        patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO)
+
+    if not patched:
+        log.warn('%s already patched.', pkg_info)
+        return False
+    # now let's move the files out of the way
+    for element in ('setuptools', 'pkg_resources.py', 'site.py'):
+        element = os.path.join(placeholder, element)
+        if os.path.exists(element):
+            _rename_path(element)
+        else:
+            log.warn('Could not find the %s element of the '
+                     'Setuptools distribution', element)
+    return True
+
+
+def _after_install(dist):
+    log.warn('After install bootstrap.')
+    placeholder = dist.get_command_obj('install').install_purelib
+    _create_fake_setuptools_pkg_info(placeholder)
+
+@_no_sandbox
+def _create_fake_setuptools_pkg_info(placeholder):
+    if not placeholder or not os.path.exists(placeholder):
+        log.warn('Could not find the install location')
+        return
+    pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1])
+    setuptools_file = 'setuptools-%s-py%s.egg-info' % \
+            (SETUPTOOLS_FAKED_VERSION, pyver)
+    pkg_info = os.path.join(placeholder, setuptools_file)
+    if os.path.exists(pkg_info):
+        log.warn('%s already exists', pkg_info)
+        return
+
+    log.warn('Creating %s', pkg_info)
+    f = open(pkg_info, 'w')
+    try:
+        f.write(SETUPTOOLS_PKG_INFO)
+    finally:
+        f.close()
+
+    pth_file = os.path.join(placeholder, 'setuptools.pth')
+    log.warn('Creating %s', pth_file)
+    f = open(pth_file, 'w')
+    try:
+        f.write(os.path.join(os.curdir, setuptools_file))
+    finally:
+        f.close()
+
+def _patch_egg_dir(path):
+    # let's check if it's already patched
+    pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
+    if os.path.exists(pkg_info):
+        if _same_content(pkg_info, SETUPTOOLS_PKG_INFO):
+            log.warn('%s already patched.', pkg_info)
+            return False
+    _rename_path(path)
+    os.mkdir(path)
+    os.mkdir(os.path.join(path, 'EGG-INFO'))
+    pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
+    f = open(pkg_info, 'w')
+    try:
+        f.write(SETUPTOOLS_PKG_INFO)
+    finally:
+        f.close()
+    return True
+
+
+def _before_install():
+    log.warn('Before install bootstrap.')
+    _fake_setuptools()
+
+
+def _under_prefix(location):
+    if 'install' not in sys.argv:
+        return True
+    args = sys.argv[sys.argv.index('install')+1:]
+    for index, arg in enumerate(args):
+        for option in ('--root', '--prefix'):
+            if arg.startswith('%s=' % option):
+                top_dir = arg.split('root=')[-1]
+                return location.startswith(top_dir)
+            elif arg == option:
+                if len(args) > index:
+                    top_dir = args[index+1]
+                    return location.startswith(top_dir)
+            elif option == '--user' and USER_SITE is not None:
+                return location.startswith(USER_SITE)
+    return True
+
+
+def _fake_setuptools():
+    log.warn('Scanning installed packages')
+    try:
+        import pkg_resources
+    except ImportError:
+        # we're cool
+        log.warn('Setuptools or Distribute does not seem to be installed.')
+        return
+    ws = pkg_resources.working_set
+    try:
+        setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools',
+                                  replacement=False))
+    except TypeError:
+        # old distribute API
+        setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools'))
+
+    if setuptools_dist is None:
+        log.warn('No setuptools distribution found')
+        return
+    # detecting if it was already faked
+    setuptools_location = setuptools_dist.location
+    log.warn('Setuptools installation detected at %s', setuptools_location)
+
+    # if --root or --preix was provided, and if
+    # setuptools is not located in them, we don't patch it
+    if not _under_prefix(setuptools_location):
+        log.warn('Not patching, --root or --prefix is installing Distribute'
+                 ' in another location')
+        return
+
+    # let's see if its an egg
+    if not setuptools_location.endswith('.egg'):
+        log.warn('Non-egg installation')
+        res = _remove_flat_installation(setuptools_location)
+        if not res:
+            return
+    else:
+        log.warn('Egg installation')
+        pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO')
+        if (os.path.exists(pkg_info) and
+            _same_content(pkg_info, SETUPTOOLS_PKG_INFO)):
+            log.warn('Already patched.')
+            return
+        log.warn('Patching...')
+        # let's create a fake egg replacing setuptools one
+        res = _patch_egg_dir(setuptools_location)
+        if not res:
+            return
+    log.warn('Patched done.')
+    _relaunch()
+
+
+def _relaunch():
+    log.warn('Relaunching...')
+    # we have to relaunch the process
+    args = [sys.executable] + sys.argv
+    sys.exit(subprocess.call(args))
+
+
+def _extractall(self, path=".", members=None):
+    """Extract all members from the archive to the current working
+       directory and set owner, modification time and permissions on
+       directories afterwards. `path' specifies a different directory
+       to extract to. `members' is optional and must be a subset of the
+       list returned by getmembers().
+    """
+    import copy
+    import operator
+    from tarfile import ExtractError
+    directories = []
+
+    if members is None:
+        members = self
+
+    for tarinfo in members:
+        if tarinfo.isdir():
+            # Extract directories with a safe mode.
+            directories.append(tarinfo)
+            tarinfo = copy.copy(tarinfo)
+            tarinfo.mode = 448 # decimal for oct 0700
+        self.extract(tarinfo, path)
+
+    # Reverse sort directories.
+    if sys.version_info < (2, 4):
+        def sorter(dir1, dir2):
+            return cmp(dir1.name, dir2.name)
+        directories.sort(sorter)
+        directories.reverse()
+    else:
+        directories.sort(key=operator.attrgetter('name'), reverse=True)
+
+    # Set correct owner, mtime and filemode on directories.
+    for tarinfo in directories:
+        dirpath = os.path.join(path, tarinfo.name)
+        try:
+            self.chown(tarinfo, dirpath)
+            self.utime(tarinfo, dirpath)
+            self.chmod(tarinfo, dirpath)
+        except ExtractError:
+            e = sys.exc_info()[1]
+            if self.errorlevel > 1:
+                raise
+            else:
+                self._dbg(1, "tarfile: %s" % e)
+
+
+def main(argv, version=DEFAULT_VERSION):
+    """Install or upgrade setuptools and EasyInstall"""
+    tarball = download_setuptools()
+    _install(tarball)
+
+
+if __name__ == '__main__':
+    main(sys.argv[1:])

File docs/Makefile

+# Makefile for Sphinx documentation
+#
+
+# If doc language is English you don't need to set this variable
+LANGUAGE      = en
+
+# You can set these variables from the command line.
+SPHINXOPTS    = -c sphinx
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = html/$(LANGUAGE)
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d build/$(LANGUAGE)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(LANGUAGE)
+
+.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html      to make standalone HTML files"
+	@echo "  dirhtml   to make HTML files named index.html in directories"
+	@echo "  pickle    to make pickle files"
+	@echo "  json      to make JSON files"
+	@echo "  htmlhelp  to make HTML files and a HTML help project"
+	@echo "  qthelp    to make HTML files and a qthelp project"
+	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  changes   to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck to check all external links for integrity"
+	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)."
+
+# dirhtml:
+# 	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+# 	@echo
+# 	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+# pickle:
+# 	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+# 	@echo
+# 	@echo "Build finished; now you can process the pickle files."
+
+# json:
+# 	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+# 	@echo
+# 	@echo "Build finished; now you can process the JSON files."
+
+# htmlhelp:
+# 	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+# 	@echo
+# 	@echo "Build finished; now you can run HTML Help Workshop with the" \
+# 	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+# qthelp:
+# 	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+# 	@echo
+# 	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+# 	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+# 	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/virtualenvwrapper.qhcp"
+# 	@echo "To view the help file:"
+# 	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/virtualenvwrapper.qhc"
+
+# latex:
+# 	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+# 	@echo
+# 	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+# 	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+# 	      "run these through (pdf)latex."
+
+# changes:
+# 	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+# 	@echo
+# 	@echo "The overview file is in $(BUILDDIR)/changes."
+
+# linkcheck:
+# 	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+# 	@echo
+# 	@echo "Link check complete; look for any errors in the above output " \
+# 	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+# doctest:
+# 	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+# 	@echo "Testing of doctests in the sources finished, look at the " \
+# 	      "results in $(BUILDDIR)/doctest/output.txt."

File docs/en/command_ref.rst

+.. Quick reference documentation for virtualenvwrapper command line functions
+    Originally contributed Thursday, May 28, 2009 by Steve Steiner (ssteinerX@gmail.com)
+
+.. _command:
+
+#################
+Command Reference
+#################
+
+All of the commands below are to be used on the Terminal command line.
+
+=====================
+Managing Environments
+=====================
+
+.. _command-mkvirtualenv:
+
+mkvirtualenv
+------------
+
+Create a new environment, in the WORKON_HOME.
+
+Syntax::
+
+    mkvirtualenv [options] ENVNAME
+
+All command line options are passed directly to ``virtualenv``.  The
+new environment is automatically activated after being initialized.
+
+::
+
+    $ workon
+    $ mkvirtualenv mynewenv
+    New python executable in mynewenv/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (mynewenv)$ workon
+    mynewenv
+    (mynewenv)$ 
+
+.. seealso::
+
+   * :ref:`scripts-premkvirtualenv`
+   * :ref:`scripts-postmkvirtualenv`
+
+.. _command-lsvirtualenv:
+
+lsvirtualenv
+------------
+
+List all of the environments.
+
+Syntax::
+
+    lsvirtualenv [-b] [-l] [-h]
+
+-b
+  Brief mode, disables verbose output.
+-l
+  Long mode, enables verbose output.  Default.
+-h
+  Print the help for lsvirtualenv.
+
+.. seealso::
+
+   * :ref:`scripts-get_env_details`
+
+.. _command-showvirtualenv:
+
+showvirtualenv
+--------------
+
+Show the details for a single virtualenv.
+
+Syntax::
+
+    showvirtualenv [env]
+
+.. seealso::
+
+   * :ref:`scripts-get_env_details`
+
+rmvirtualenv
+------------
+
+Remove an environment, in the WORKON_HOME.
+
+Syntax::
+
+    rmvirtualenv ENVNAME
+
+You must use :ref:`command-deactivate` before removing the current
+environment.
+
+::
+
+    (mynewenv)$ deactivate
+    $ rmvirtualenv mynewenv
+    $ workon
+    $
+
+.. seealso::
+
+   * :ref:`scripts-prermvirtualenv`
+   * :ref:`scripts-postrmvirtualenv`
+
+.. _command-cpvirtualenv:
+
+cpvirtualenv
+------------
+
+Duplicate an environment, in the WORKON_HOME.
+
+Syntax::
+
+    cpvirtualenv ENVNAME TARGETENVNAME
+
+.. note::
+
+   The environment created by the copy operation is made `relocatable
+   <http://virtualenv.openplans.org/#making-environments-relocatable>`__.
+
+::
+
+    $ workon 
+    $ mkvirtualenv source
+    New python executable in source/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (source)$ cpvirtualenv source dest
+    Making script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/easy_install relative
+    Making script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/easy_install-2.6 relative
+    Making script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/pip relative
+    Script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/postactivate cannot be made relative (it's not a normal script that starts with #!/Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/python)
+    Script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/postdeactivate cannot be made relative (it's not a normal script that starts with #!/Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/python)
+    Script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/preactivate cannot be made relative (it's not a normal script that starts with #!/Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/python)
+    Script /Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/predeactivate cannot be made relative (it's not a normal script that starts with #!/Users/dhellmann/Devel/virtualenvwrapper/tmp/dest/bin/python)
+    (dest)$ workon 
+    dest
+    source
+    (dest)$ 
+
+.. seealso::
+
+   * :ref:`scripts-precpvirtualenv`
+   * :ref:`scripts-postcpvirtualenv`
+   * :ref:`scripts-premkvirtualenv`
+   * :ref:`scripts-postmkvirtualenv`
+
+==================================
+Controlling the Active Environment
+==================================
+
+workon
+------
+
+List or change working virtual environments
+
+Syntax::
+
+    workon [environment_name]
+
+If no ``environment_name`` is given the list of available environments
+is printed to stdout.
+
+::
+
+    $ workon 
+    $ mkvirtualenv env1
+      New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ mkvirtualenv env2
+    New python executable in env2/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env2)$ workon 
+    env1
+    env2
+    (env2)$ workon env1
+    (env1)$ echo $VIRTUAL_ENV
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1
+    (env1)$ workon env2
+    (env2)$ echo $VIRTUAL_ENV
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env2
+    (env2)$ 
+
+
+.. seealso::
+
+   * :ref:`scripts-predeactivate`
+   * :ref:`scripts-postdeactivate`
+   * :ref:`scripts-preactivate`
+   * :ref:`scripts-postactivate`
+
+.. _command-deactivate:
+
+deactivate
+----------
+
+Switch from a virtual environment to the system-installed version of
+Python.
+
+Syntax::
+
+    deactivate
+
+.. note::
+
+    This command is actually part of virtualenv, but is wrapped to
+    provide before and after hooks, just as workon does for activate.
+
+::
+
+    $ workon 
+    $ echo $VIRTUAL_ENV
+
+    $ mkvirtualenv env1
+    New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ echo $VIRTUAL_ENV
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1
+    (env1)$ deactivate
+    $ echo $VIRTUAL_ENV
+
+    $ 
+
+.. seealso::
+
+   * :ref:`scripts-predeactivate`
+   * :ref:`scripts-postdeactivate`
+
+==================================
+Quickly Navigating to a virtualenv
+==================================
+
+There are two functions to provide shortcuts to navigate into the
+currently-active virtualenv.
+
+cdvirtualenv
+------------
+
+Change the current working directory to ``$VIRTUAL_ENV``.
+
+Syntax::
+
+    cdvirtualenv [subdir]
+
+Calling ``cdvirtualenv`` changes the current working directory to the
+top of the virtualenv (``$VIRTUAL_ENV``).  An optional argument is
+appended to the path, allowing navigation directly into a
+subdirectory.
+
+::
+
+    $ mkvirtualenv env1
+    New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ echo $VIRTUAL_ENV
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1
+    (env1)$ cdvirtualenv
+    (env1)$ pwd
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1
+    (env1)$ cdvirtualenv bin
+    (env1)$ pwd
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1/bin
+
+cdsitepackages
+--------------
+
+Change the current working directory to the ``site-packages`` for
+``$VIRTUAL_ENV``.
+
+Syntax::
+
+    cdsitepackages [subdir]
+
+Because the exact path to the site-packages directory in the
+virtualenv depends on the version of Python, ``cdsitepackages`` is
+provided as a shortcut for ``cdvirtualenv
+lib/python${pyvers}/site-packages``. An optional argument is also
+allowed, to specify a directory hierarchy within the ``site-packages``
+directory to change into.
+
+::
+
+    $ mkvirtualenv env1
+    New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ echo $VIRTUAL_ENV
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1
+    (env1)$ cdsitepackages PyMOTW/bisect/
+    (env1)$ pwd
+    /Users/dhellmann/Devel/virtualenvwrapper/tmp/env1/lib/python2.6/site-packages/PyMOTW/bisect
+
+lssitepackages
+--------------
+
+Calling ``lssitepackages`` shows the content of the ``site-packages``
+directory of the currently-active virtualenv.
+
+Syntax::
+
+    lssitepackages
+
+::
+
+    $ mkvirtualenv env1
+    New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ $ workon env1
+    (env1)$ lssitepackages 
+    distribute-0.6.10-py2.6.egg     pip-0.6.3-py2.6.egg
+    easy-install.pth                setuptools.pth
+
+===============
+Path Management
+===============
+
+add2virtualenv
+--------------
+
+Adds the specified directories to the Python path for the
+currently-active virtualenv.
+
+Syntax::
+
+    add2virtualenv directory1 directory2 ...
+
+Sometimes it is desirable to share installed packages that are not in
+the system ``site-pacakges`` directory and which should not be
+installed in each virtualenv.  One possible solution is to symlink the
+source into the environment ``site-packages`` directory, but it is
+also easy to add extra directories to the PYTHONPATH by including them
+in a ``.pth`` file inside ``site-packages`` using ``add2virtualenv``.
+
+1. Check out the source for a big project, such as Django.
+2. Run: ``add2virtualenv path_to_source``.
+3. Run: ``add2virtualenv``.
+4. A usage message and list of current "extra" paths is printed.
+
+The directory names are added to a path file named
+``virtualenv_path_extensions.pth`` inside the site-packages directory
+for the environment.
+
+*Based on a contribution from James Bennett and Jannis Leidel.*
+
+.. _command-toggleglobalsitepackages:
+
+toggleglobalsitepackages
+------------------------
+
+Controls whether the active virtualenv will access the packages in the
+global Python ``site-packages`` directory.
+
+Syntax::
+
+    toggleglobalsitepackages [-q]
+
+Outputs the new state of the virtualenv. Use the ``-q`` switch to turn off all
+output.
+
+::
+
+    $ mkvirtualenv env1
+    New python executable in env1/bin/python
+    Installing distribute.............................................
+    ..................................................................
+    ..................................................................
+    done.
+    (env1)$ toggleglobalsitepackages
+    Disabled global site-packages
+    (env1)$ toggleglobalsitepackages
+    Enabled global site-packages
+    (env1)$ toggleglobalsitepackages -q
+    (env1)$

File docs/en/developers.rst

+##############
+For Developers
+##############
+
+If you would like to contribute to virtualenvwrapper directly, these
+instructions should help you get started.  Patches, bug reports, and
+feature requests are all welcome through the `BitBucket site
+<http://bitbucket.org/dhellmann/virtualenvwrapper/>`_.  Contributions
+in the form of patches or pull requests are easier to integrate and
+will receive priority attention.
+
+.. note::
+
+  Before contributing new features to virtualenvwrapper core, please
+  consider whether they should be implemented as an extension instead.
+
+Building Documentation
+======================
+
+The documentation for virtualenvwrapper is written in reStructuredText
+and converted to HTML using Sphinx. The build itself is driven by
+make.  You will need the following packages in order to build the
+docs:
+
+- Sphinx
+- docutils
+
+Once all of the tools are installed into a virtualenv using
+pip, run ``make html`` to generate the HTML version of the
+documentation::
+
+    $ make html
+    rm -rf virtualenvwrapper/docs
+    (cd docs && make html SPHINXOPTS="-c sphinx/pkg")
+    sphinx-build -b html -d build/doctrees  -c sphinx/pkg source build/html
+    Running Sphinx v0.6.4
+    loading pickled environment... done
+    building [html]: targets for 2 source files that are out of date
+    updating environment: 0 added, 2 changed, 0 removed
+    reading sources... [ 50%] command_ref
+    reading sources... [100%] developers
+    
+    looking for now-outdated files... none found
+    pickling environment... done
+    checking consistency... done
+    preparing documents... done
+    writing output... [ 33%] command_ref
+    writing output... [ 66%] developers
+    writing output... [100%] index
+    
+    writing additional files... search
+    copying static files... WARNING: static directory '/Users/dhellmann/Devel/virtualenvwrapper/plugins/docs/sphinx/pkg/static' does not exist
+    done
+    dumping search index... done
+    dumping object inventory... done
+    build succeeded, 1 warning.
+    
+    Build finished. The HTML pages are in build/html.
+    cp -r docs/build/html virtualenvwrapper/docs
+    
+The output version of the documentation ends up in
+``./virtualenvwrapper/docs`` inside your sandbox.
+
+Running Tests
+=============
+
+The test suite for virtualenvwrapper uses shunit2_ and tox_.  The
+shunit2 source is included in the ``tests`` directory, but tox must be
+installed separately (``pip install tox``).
+
+To run the tests under bash, zsh, and ksh for Python 2.4 through 2.7,
+run ``tox`` from the top level directory of the hg repository.
+
+To run individual test scripts, use a command like::
+
+  $ tox tests/test_cd.sh
+
+To run tests under a single version of Python, specify the appropriate
+environment when running tox::
+
+  $ tox -e py27
+
+Combine the two modes to run specific tests with a single version of
+Python::
+
+  $ tox -e py27 tests/test_cd.sh
+
+Add new tests by modifying an existing file or creating new script in
+the ``tests`` directory.
+
+.. _shunit2: http://shunit2.googlecode.com/
+
+.. _tox: http://codespeak.net/tox

File docs/en/extensions.rst

+=====================
+ Existing Extensions
+=====================
+
+Below is a list of some of the extensions available for use with
+virtualenvwrapper.
+
+.. _extensions-user_scripts:
+
+project
+=======
+
+The project_ extension adds development directory management with
+templates to virtualenvwrapper.
+
+bitbucket
+---------
+
+The bitbucket_ project template creates a working directory and
+automatically clones the repository from BitBucket.  Requires
+project_.
+
+.. _project: http://www.doughellmann.com/projects/virtualenvwrapper.project/
+
+.. _bitbucket: http://www.doughellmann.com/projects/virtualenvwrapper.bitbucket/
+
+emacs-desktop
+=============
+
+Emacs desktop-mode_ lets you save the state of emacs (open buffers,
+kill rings, buffer positions, etc.) between sessions.  It can also be
+used as a project file similar to other IDEs.  The emacs-desktop_
+plugin adds a trigger to save the current desktop file and load a new
+one when activating a new virtualenv using ``workon``.
+
+.. _desktop-mode: http://www.emacswiki.org/emacs/DeskTop
+
+.. _emacs-desktop: http://www.doughellmann.com/projects/virtualenvwrapper-emacs-desktop/
+
+user_scripts
+============
+
+The ``user_scripts`` extension is delivered with virtualenvwrapper and
+enabled by default.  It implements the user customization script
+features described in :ref:`scripts`.
+
+vim-virtualenv
+==============
+
+`vim-virtualenv`_ is Jeremey Cantrell's plugin for controlling
+virtualenvs from within vim. When used together with
+virtualenvwrapper, vim-virtualenv identifies the virtualenv to
+activate based on the name of the file being edited.
+
+.. _vim-virtualenv: https://github.com/jmcantrell/vim-virtualenv

File docs/en/history.rst

+===============
+Release History
+===============
+
+2.8
+
+  - Use VIRTUALENVWRAPPER_VIRTUALENV in `cpvirtualenv` (:bbissue:`104`).
+  - Add support for `MSYS <http://www.mingw.org/wiki/MSYS>`_
+    environment under Windows. Contributed by Axel
+    H. (:bbuser:`noirbizarre`).
+
+2.7.2
+
+  - Move setup code for tab completion later in the startup code so
+    all of the needed variables are configured. (:bbissue:`97`)
+  - Expand tab completion for zsh to work for all commands.
+
+2.7.1
+
+  - When testing for WORKON_HOME during startup, dereference any
+    symlink to make sure it is a directory.
+  - Set VIRTUALENVWRAPPER_HOOK_DIR and VIRTUALENV_WRAPPER_LOG DIR in
+    virtualenvwrapper_initialize after WORKON_HOME is set
+    (:bbissue:`94`).
+  - Update the :ref:`install-basic` instructions to be more explicit
+    about needing to install virtualenvwrapper globally (or at least
+    outside of a virtualenv).
+
+2.7
+
+  - Fix problem with space in WORKON_HOME path (:bbissue:`79`).
+  - Fix problem with argument processing in lsvirtualenv under zsh
+    (:bbissue:`86`). Thanks to Nat Williams (:bbuser:`natw`) for the
+    bug report and patch.
+  - If WORKON_HOME does not exist, create it. Patch from Carl Karsten
+    (:bbuser:`CarlFK`). Test updates based on patches from Matt Austin
+    (:bbuser:`maafy6`) and Hugo Lopes Tavares (:bbuser:`hltbra`).
+  - Merge in contributions from Paul McLanahan (:bbuser:`pmclanahan`)
+    to fix the test harness to ensure that the test scripts are
+    actually running under the expected shell.
+  - Merge in new shell command :ref:`command-toggleglobalsitepackages`
+    from Paul McLanahan (:bbuser:`pmclanahan`). The new command
+    changes the configuration of the active virtualenv to enable or
+    disable the global ``site-packages`` directory.
+  - Fixed some tests that were failing under ksh on Ubuntu 10.10.
+  - Document the :ref:`VIRTUALENVWRAPPER_VIRTUALENV
+    <variable-VIRTUALENVWRAPPER_VIRTUALENV>` variable.
+  - Implement suggestion by Van Lindberg to have
+    :ref:`VIRTUALENVWRAPPER_HOOK_DIR
+    <variable-VIRTUALENVWRAPPER_HOOK_DIR>` and
+    :ref:`VIRTUALENVWRAPPER_LOG_DIR
+    <variable-VIRTUALENVWRAPPER_LOG_DIR>` variables to control the
+    locations of hooks and logs.
+  - Enabled tab completion for :ref:`command-showvirtualenv`
+    (:bbissue:`78`).
+  - Fixed a problem with running :ref:`command-rmvirtualenv` from
+    within the environment being removed (:bbissue:`83`).
+  - Removed use of -e option in calls to grep for better portability
+    (:bbissue:`85`).
+
+2.6.3
+
+  - Hard-code the version information in the setup.py and conf.py
+    scripts. This still doesn't work for http://readthedocs.org, since
+    the doc build needs the sphinxcontrib.bitbucket extension, but
+    will make it easier to transition the docs to another site later.
+
+2.6.2
+
+  - Attempted to make the doc build work with http://readthedocs.org.
+  - Merged in `Japanese translation of the documentation
+    <http://www.doughellmann.com/docs/virtualenvwrapper/ja/>`__ from
+    Tetsuya Morimoto.
+  - Incorporate a suggestion from Ales Zoulek to let the user specify
+    the virtualenv binary through an environment variable
+    (:ref:`VIRTUALENVWRAPPER_VIRTUALENV <variable-VIRTUALENVWRAPPER_VIRTUALENV>`).
+
+2.6.1
+
+  - Fixed virtualenvwrapper_get_python_version (:bbissue:`73`).
+
+2.6
+
+  - Fixed a problem with hook script line endings under Cygwin
+    (:bbissue:`68`).
+  - Updated documentation to include a list of the compatible shells
+    (:ref:`supported-shells`) and Python versions
+    (:ref:`supported-versions`) (:bbissue:`70`).
+  - Fixed installation dependency on virtualenv (:bbissue:`60`).
+  - Fixed the method for determining the Python version so it works
+    under Python 2.4 (:bbissue:`61`).
+  - Converted the test infrastructure to use `tox
+    <http://codespeak.net/tox/index.html>`_ instead of home-grown
+    scripts in the Makefile.
+
+2.5.3
+
+  - Point release uploaded to PyPI during outage on doughellmann.com.
+
+2.5.2
+
+  - Apply patch from Zach Voase to fix :ref:`command-lsvirtualenv`
+    under zsh. Resolves :bbissue:`64`.
+
+2.5.1
+
+  - Make :ref:`command-workon` list brief environment details when run
+    without argument, instead of full details.
+
+2.5
+
+  - Add :ref:`command-showvirtualenv` command.  Modify
+    :ref:`command-lsvirtualenv` to make verbose output the default.