mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a8220a20ba | |||
| 123639b436 | |||
| eaae6b90d4 | |||
| 746ba06894 | |||
| faa349ca19 | |||
| 825d41695d | |||
| de0b6556b6 | |||
| 8486015d7c | |||
| ce268a3c8f | |||
| 8072330640 | |||
| 327b1dea25 | |||
| 8f29269e41 | |||
| 1b4d14e24c | |||
| 710f932184 | |||
| 02e410fd20 | |||
| c90128faf6 | |||
| c5ff543a69 | |||
| 639d1dc9cc | |||
| 118cc029fb | |||
| 54545df970 | |||
| 4c94607882 | |||
| ff893b7a72 | |||
| 034fbc1c8f | |||
| 2eb941b077 | |||
| bedd8ea111 | |||
| 9ed91cd53a | |||
| 17d97cde49 | |||
| 09eff5f4d7 | |||
| 3400cebfd2 | |||
| ac4fb2ad9d | |||
| 13186e4674 | |||
| aaa3f1ee1a | |||
| 74cad013b9 | |||
| 8ec956758e | |||
| c0b4a0e3c7 | |||
| 8566a65067 | |||
| 9c82d44129 | |||
| 4e2dd4b6cf | |||
| f9f9ae54fa | |||
| a00b4900cd | |||
| cd01dc0c17 | |||
| 2750238a0c | |||
| f2596e4cbc | |||
| b6955dd9b6 | |||
| 36994d02b3 | |||
| 9902caea79 |
+26
-1
@@ -1,9 +1,33 @@
|
|||||||
|
## v5 (02/01/2012)
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
|
||||||
|
* Git requirements 100% work.
|
||||||
|
|
||||||
|
|
||||||
|
## v4 (01/20/2012)
|
||||||
|
|
||||||
|
Features:
|
||||||
|
|
||||||
|
* Updated to virtualenv v1.7 with patched pip v1.2.
|
||||||
|
* Actually activate created virtualenv within compile process.
|
||||||
|
* Use distribute instead of deprecated setuptools.
|
||||||
|
* Automatically destroy and rebuild corrupt virtualenvs.
|
||||||
|
* Refactor django and pylibmc detection.
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
|
||||||
|
* Fixed `package==dev` in requirements with patched pip embedded within virtualenv. Patch upstreamed.
|
||||||
|
* Minor curl/rm flag fixes (thanks, contributors!)
|
||||||
|
|
||||||
|
|
||||||
## v3 (12/07/2011)
|
## v3 (12/07/2011)
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
|
||||||
* Better django setup.py injection.
|
* Better django setup.py injection.
|
||||||
|
|
||||||
|
|
||||||
## v2 (11/15/2011)
|
## v2 (11/15/2011)
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
@@ -14,6 +38,7 @@ Bugfixes:
|
|||||||
|
|
||||||
* Detect when virtualenv is checked in and alert user.
|
* Detect when virtualenv is checked in and alert user.
|
||||||
|
|
||||||
|
|
||||||
## v1 (10/01/2011)
|
## v1 (10/01/2011)
|
||||||
|
|
||||||
* Conception.
|
* Conception.
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
pip:
|
||||||
|
git clone git@github.com:kennethreitz/pip.git --branch heroku --depth 1
|
||||||
|
rm -fr src/virtualenv-1.7/virtualenv_support/pip-1.0.2.tar.gz
|
||||||
|
rm -fr pip/.git
|
||||||
|
tar -pczf src/virtualenv-1.7/virtualenv_support/pip-1.0.2.tar.gz pip
|
||||||
|
rm -fr pip
|
||||||
+45
-86
@@ -3,6 +3,9 @@
|
|||||||
|
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
|
|
||||||
|
# Prepend proper path for virtualenv hackery. Will be deprecated soon.
|
||||||
|
export PATH=:/usr/local/bin:$PATH
|
||||||
|
|
||||||
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
|
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
|
||||||
ROOT_DIR=$(dirname $BIN_DIR)
|
ROOT_DIR=$(dirname $BIN_DIR)
|
||||||
BUILD_DIR=$1
|
BUILD_DIR=$1
|
||||||
@@ -13,130 +16,86 @@ PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE:-$CACHE_DIR/pip_downloads}
|
|||||||
VIRTUALENV_DIRS="bin include lib"
|
VIRTUALENV_DIRS="bin include lib"
|
||||||
VENDORED_MEMCACHED="http://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.tar.gz"
|
VENDORED_MEMCACHED="http://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.tar.gz"
|
||||||
|
|
||||||
|
unset GIT_DIR
|
||||||
|
export PIP_DOWNLOAD_CACHE
|
||||||
|
|
||||||
indent() {
|
indent() {
|
||||||
RE="s/^/ /"
|
RE="s/^/ /"
|
||||||
[ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE"
|
[ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE"
|
||||||
}
|
}
|
||||||
|
|
||||||
virtualenv() {
|
function virtualenv (){
|
||||||
python - "$@" <<EOF
|
python "$ROOT_DIR/src/virtualenv-1.7/virtualenv.py" "$@"
|
||||||
import sys
|
|
||||||
sys.path.insert(0, "$ROOT_DIR/src/virtualenv-1.6.4")
|
|
||||||
import virtualenv
|
|
||||||
virtualenv.main()
|
|
||||||
EOF
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cd $BUILD_DIR
|
cd $BUILD_DIR
|
||||||
|
|
||||||
# reject a non-packaged Django app
|
# Reject a non-packaged Django app.
|
||||||
if [ "$NAME" = "Python" ]; then
|
if [ "$NAME" = "Python" ]; then
|
||||||
[ -f manage.py ] && [ -f settings.py ] && { echo " ! Django app must be in a package subdirectory"; exit 1; }
|
[ -f manage.py ] && [ -f settings.py ] && { echo " ! Django app must be in a package subdirectory"; exit 1; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# warn a checked-in virtualenv
|
# Warn a checked-in virtualenv.
|
||||||
if [ -d "lib" ] || [ -d "bin" ]; then
|
if [ -d "lib" ] || [ -d "bin" ]; then
|
||||||
echo " ! You have a virtualenv checked in. You should ignore the appropriate paths in your repo. See http://devcenter.heroku.com/articles/gitignore for more info.";
|
echo " ! You have a virtualenv checked in. You should ignore the appropriate paths in your repo. See http://devcenter.heroku.com/articles/gitignore for more info.";
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# reject a conflicting checked-in virtualenv
|
# Reject a conflicting checked-in virtualenv.
|
||||||
if [ -f "lib/python2.7" ]; then
|
if [ -f "lib/python2.7" ]; then
|
||||||
echo " ! Checked-in virtualenv conflict."
|
echo " ! Checked-in virtualenv conflict."
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Copy artifacts out of cache if exists.
|
||||||
# copy artifacts out of cache if exists
|
|
||||||
mkdir -p $CACHE_DIR
|
mkdir -p $CACHE_DIR
|
||||||
for dir in $VIRTUALENV_DIRS; do
|
for dir in $VIRTUALENV_DIRS; do
|
||||||
cp -R $CACHE_DIR/$dir . &> /dev/null || true
|
cp -R $CACHE_DIR/$dir . &> /dev/null || true
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Create virtualenv. Rebuild if corrupt.
|
||||||
|
set +e
|
||||||
echo "-----> Preparing virtualenv version $(virtualenv --version)"
|
echo "-----> Preparing virtualenv version $(virtualenv --version)"
|
||||||
virtualenv --no-site-packages . | indent
|
|
||||||
|
|
||||||
# create set-aside .heroku folder.
|
# Try to create the virtualenv.
|
||||||
mkdir .heroku
|
OUT=$(virtualenv --distribute --never-download --prompt=venv . 2>&1)
|
||||||
|
|
||||||
|
# If there's an error, purge and recreate.
|
||||||
|
[ $? -ne 0 ] && {
|
||||||
|
echo " ! Virtualenv corrupt, rebuilding."
|
||||||
|
for dir in $VIRTUALENV_DIRS; do
|
||||||
|
rm -fr $dir &> /dev/null || true
|
||||||
|
done
|
||||||
|
OUT=$(virtualenv --distribute --never-download --prompt=venv . )
|
||||||
|
}
|
||||||
|
echo "$OUT" | indent
|
||||||
|
|
||||||
# if pylibmc within requirements, use vendored libmemcached
|
set -e
|
||||||
if (grep -Fxiq "pylibmc" requirements.txt) || (grep -Fiq "pylibmc=" requirements.txt)
|
|
||||||
then
|
|
||||||
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
|
|
||||||
cd .heroku
|
|
||||||
|
|
||||||
if [ -d "vendor/lib/sasl2" ]; then
|
# Create set-aside .heroku folder.
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
mkdir -p .heroku
|
||||||
else
|
|
||||||
curl -s -L -O $VENDORED_MEMCACHED
|
|
||||||
tar -zxvf vendor-libmemcached.tar.gz > /dev/null
|
|
||||||
rm vendor-libmemcached.tar.gz
|
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
|
||||||
fi
|
|
||||||
|
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
# Pylibmc support.
|
||||||
cd ..
|
source $BIN_DIR/steps/pylibmc
|
||||||
fi
|
|
||||||
|
|
||||||
|
# Activate the virtualenv.
|
||||||
|
echo "-----> Activating virtualenv"
|
||||||
|
source bin/activate
|
||||||
|
|
||||||
|
# Install mercurial, if needed.
|
||||||
# if Django, append settings
|
|
||||||
if [ "$NAME" = "Python/Django" ]; then
|
|
||||||
echo "-----> Django settings injection"
|
|
||||||
|
|
||||||
SETTINGS_FILE=$(ls **/settings.py | head -1)
|
|
||||||
PROJECT=$(dirname $SETTINGS_FILE)
|
|
||||||
echo "Injecting code into $SETTINGS_FILE to read from DATABASE_URL" | indent
|
|
||||||
|
|
||||||
cat >>$SETTINGS_FILE <<EOF
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import urlparse
|
|
||||||
urlparse.uses_netloc.append('postgres')
|
|
||||||
urlparse.uses_netloc.append('mysql')
|
|
||||||
|
|
||||||
try:
|
|
||||||
|
|
||||||
# Check to make sure DATABASES is set in settings.py file.
|
|
||||||
# If not default to {}
|
|
||||||
|
|
||||||
if 'DATABASES' not in locals():
|
|
||||||
DATABASES = {}
|
|
||||||
|
|
||||||
if 'DATABASE_URL' in os.environ:
|
|
||||||
url = urlparse.urlparse(os.environ['DATABASE_URL'])
|
|
||||||
|
|
||||||
# Ensure default database exists.
|
|
||||||
DATABASES['default'] = DATABASES.get('default', {})
|
|
||||||
|
|
||||||
# Update with environment configuration.
|
|
||||||
DATABASES['default'].update({
|
|
||||||
'NAME': url.path[1:],
|
|
||||||
'USER': url.username,
|
|
||||||
'PASSWORD': url.password,
|
|
||||||
'HOST': url.hostname,
|
|
||||||
'PORT': url.port,
|
|
||||||
})
|
|
||||||
if url.scheme == 'postgres':
|
|
||||||
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
|
|
||||||
|
|
||||||
if url.scheme == 'mysql':
|
|
||||||
DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
|
|
||||||
except:
|
|
||||||
print 'Unexpected error:', sys.exc_info()
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (grep -Fiq "hg+" requirements.txt) then
|
if (grep -Fiq "hg+" requirements.txt) then
|
||||||
PIP_DOWNLOAD_CACHE=$PIP_DOWNLOAD_CACHE bin/pip install --use-mirrors mercurial | indent
|
pip install --use-mirrors mercurial | indent
|
||||||
source bin/activate
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "-----> Installing dependencies using pip version $(bin/pip --version | awk '{print $2}')"
|
# Install dependencies.
|
||||||
PIP_DOWNLOAD_CACHE=$PIP_DOWNLOAD_CACHE bin/pip install --use-mirrors -r requirements.txt | indent
|
echo "-----> Installing dependencies using pip version $(pip --version | awk '{print $2}')"
|
||||||
|
pip install --use-mirrors -r requirements.txt --src ./.heroku/src | indent
|
||||||
|
|
||||||
|
# Django support.
|
||||||
|
if [ "$NAME" = "Python/Django" ]; then
|
||||||
|
source $BIN_DIR/steps/django
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make virtualenv relocatable.
|
||||||
set +e
|
set +e
|
||||||
OUT=$(virtualenv --relocatable .)
|
OUT=$(virtualenv --relocatable .)
|
||||||
[ $? -ne 0 ] && {
|
[ $? -ne 0 ] && {
|
||||||
@@ -146,7 +105,7 @@ OUT=$(virtualenv --relocatable .)
|
|||||||
}
|
}
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# store new artifacts in cache
|
# Store new artifacts in cache.
|
||||||
for dir in $VIRTUALENV_DIRS; do
|
for dir in $VIRTUALENV_DIRS; do
|
||||||
rm -rf $CACHE_DIR/$dir
|
rm -rf $CACHE_DIR/$dir
|
||||||
cp -R $dir $CACHE_DIR/
|
cp -R $dir $CACHE_DIR/
|
||||||
|
|||||||
Executable
+49
@@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
echo "-----> Injecting Django settings..."
|
||||||
|
|
||||||
|
SETTINGS_FILE=$(ls **/settings.py | head -1)
|
||||||
|
PROJECT=$(dirname $SETTINGS_FILE)
|
||||||
|
echo "Injecting code into $SETTINGS_FILE to read from DATABASE_URL" | indent
|
||||||
|
|
||||||
|
cat >>$SETTINGS_FILE <<EOF
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import urlparse
|
||||||
|
|
||||||
|
# Register database schemes in URLs.
|
||||||
|
urlparse.uses_netloc.append('postgres')
|
||||||
|
urlparse.uses_netloc.append('mysql')
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# Check to make sure DATABASES is set in settings.py file.
|
||||||
|
# If not default to {}
|
||||||
|
|
||||||
|
if 'DATABASES' not in locals():
|
||||||
|
DATABASES = {}
|
||||||
|
|
||||||
|
if 'DATABASE_URL' in os.environ:
|
||||||
|
url = urlparse.urlparse(os.environ['DATABASE_URL'])
|
||||||
|
|
||||||
|
# Ensure default database exists.
|
||||||
|
DATABASES['default'] = DATABASES.get('default', {})
|
||||||
|
|
||||||
|
# Update with environment configuration.
|
||||||
|
DATABASES['default'].update({
|
||||||
|
'NAME': url.path[1:],
|
||||||
|
'USER': url.username,
|
||||||
|
'PASSWORD': url.password,
|
||||||
|
'HOST': url.hostname,
|
||||||
|
'PORT': url.port,
|
||||||
|
})
|
||||||
|
if url.scheme == 'postgres':
|
||||||
|
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
|
||||||
|
|
||||||
|
if url.scheme == 'mysql':
|
||||||
|
DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
|
||||||
|
except Exception:
|
||||||
|
print 'Unexpected error:', sys.exc_info()
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# if pylibmc within requirements, use vendored libmemcached
|
||||||
|
if (grep -Fxiq "pylibmc" requirements.txt) || (grep -Fiq "pylibmc=" requirements.txt)
|
||||||
|
then
|
||||||
|
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
|
||||||
|
cd .heroku
|
||||||
|
|
||||||
|
if [ -d "vendor/lib/sasl2" ]; then
|
||||||
|
export LIBMEMCACHED=$(pwd)/vendor
|
||||||
|
else
|
||||||
|
curl -s -L -o tmp-libmemcached.tar.gz $VENDORED_MEMCACHED
|
||||||
|
tar -zxvf tmp-libmemcached.tar.gz > /dev/null
|
||||||
|
rm tmp-libmemcached.tar.gz
|
||||||
|
export LIBMEMCACHED=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
|
||||||
|
export LIBMEMCACHED=$(pwd)/vendor
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
Binary file not shown.
Binary file not shown.
@@ -13,11 +13,15 @@ Jannis Leidel
|
|||||||
Contributors
|
Contributors
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
Alex Grönholm
|
||||||
Antonio Cuni
|
Antonio Cuni
|
||||||
Armin Ronacher
|
Armin Ronacher
|
||||||
|
Chris McDonough
|
||||||
|
Christian Stefanescu
|
||||||
Christopher Nilsson
|
Christopher Nilsson
|
||||||
Curt Micol
|
Curt Micol
|
||||||
Douglas Creager
|
Douglas Creager
|
||||||
|
Gunnlaugur Thor Briem
|
||||||
Jeff Hammel
|
Jeff Hammel
|
||||||
Jorge Vargas
|
Jorge Vargas
|
||||||
Josh Bronson
|
Josh Bronson
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
virtualenv
|
||||||
|
==========
|
||||||
|
|
||||||
|
See docs/index.txt for user documentation.
|
||||||
|
|
||||||
|
Contributor notes
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* virtualenv is designed to work on python 2 and 3 with a single code base.
|
||||||
|
Use Python 3 print-function syntax, and always use sys.exc_info()[1]
|
||||||
|
inside the `except` block to get at exception objects.
|
||||||
|
|
||||||
|
* virtualenv uses git-flow_ to `coordinate development`_.
|
||||||
|
|
||||||
|
.. _git-flow: https://github.com/nvie/gitflow
|
||||||
|
.. _coordinate development: http://nvie.com/posts/a-successful-git-branching-model/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
Metadata-Version: 1.0
|
Metadata-Version: 1.0
|
||||||
Name: virtualenv
|
Name: virtualenv
|
||||||
Version: 1.6.4
|
Version: 1.7
|
||||||
Summary: Virtual Python Environment builder
|
Summary: Virtual Python Environment builder
|
||||||
Home-page: http://www.virtualenv.org
|
Home-page: http://www.virtualenv.org
|
||||||
Author: Jannis Leidel, Carl Meyer and Brian Rosner
|
Author: Jannis Leidel, Carl Meyer and Brian Rosner
|
||||||
@@ -22,9 +22,16 @@ Description:
|
|||||||
It is licensed under an
|
It is licensed under an
|
||||||
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
||||||
|
|
||||||
You can install it with ``easy_install virtualenv``, or the `latest
|
You can install it with ``pip install virtualenv``, or the `latest
|
||||||
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
||||||
with ``easy_install virtualenv==dev``.
|
with ``pip install virtualenv==dev``.
|
||||||
|
|
||||||
|
You can also use ``easy_install``, or if you have no Python package manager
|
||||||
|
available at all, you can just grab the single file `virtualenv.py`_ and run
|
||||||
|
it with ``python virtualenv.py``.
|
||||||
|
|
||||||
|
.. _virtualenv.py: https://raw.github.com/pypa/virtualenv/master/virtualenv.py
|
||||||
|
|
||||||
|
|
||||||
What It Does
|
What It Does
|
||||||
------------
|
------------
|
||||||
@@ -74,9 +81,65 @@ Description:
|
|||||||
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
||||||
|
|
||||||
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
||||||
installer, so you can use `ENV/bin/pip`` to install additional packages into
|
installer, so you can use ``ENV/bin/pip`` to install additional packages into
|
||||||
the environment.
|
the environment.
|
||||||
|
|
||||||
|
Environment variables and configuration files
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
virtualenv can not only be configured by passing command line options such as
|
||||||
|
``--distribute`` but also by two other means:
|
||||||
|
|
||||||
|
- Environment variables
|
||||||
|
|
||||||
|
Each command line option is automatically used to look for environment
|
||||||
|
variables with the name format ``VIRTUALENV_<UPPER_NAME>``. That means
|
||||||
|
the name of the command line options are capitalized and have dashes
|
||||||
|
(``'-'``) replaced with underscores (``'_'``).
|
||||||
|
|
||||||
|
For example, to automatically install Distribute instead of setuptools
|
||||||
|
you can also set an environment variable::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_USE_DISTRIBUTE=true
|
||||||
|
$ python virtualenv.py ENV
|
||||||
|
|
||||||
|
It's the same as passing the option to virtualenv directly::
|
||||||
|
|
||||||
|
$ python virtualenv.py --distribute ENV
|
||||||
|
|
||||||
|
This also works for appending command line options, like ``--find-links``.
|
||||||
|
Just leave an empty space between the passsed values, e.g.::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_EXTRA_SEARCH_DIR="/path/to/dists /path/to/other/dists"
|
||||||
|
$ virtualenv ENV
|
||||||
|
|
||||||
|
is the same as calling::
|
||||||
|
|
||||||
|
$ python virtualenv.py --extra-search-dir=/path/to/dists --extra-search-dir=/path/to/other/dists ENV
|
||||||
|
|
||||||
|
- Config files
|
||||||
|
|
||||||
|
virtualenv also looks for a standard ini config file. On Unix and Mac OS X
|
||||||
|
that's ``$HOME/.virtualenv/virtualenv.ini`` and on Windows, it's
|
||||||
|
``%HOME%\\virtualenv\\virtualenv.ini``.
|
||||||
|
|
||||||
|
The names of the settings are derived from the long command line option,
|
||||||
|
e.g. the option ``--distribute`` would look like this::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
distribute = true
|
||||||
|
|
||||||
|
Appending options like ``--extra-search-dir`` can be written on multiple
|
||||||
|
lines::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
extra-search-dir =
|
||||||
|
/path/to/dists
|
||||||
|
/path/to/other/dists
|
||||||
|
|
||||||
|
Please have a look at the output of ``virtualenv --help`` for a full list
|
||||||
|
of supported options.
|
||||||
|
|
||||||
Windows Notes
|
Windows Notes
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -167,7 +230,7 @@ Description:
|
|||||||
f = open('blog-bootstrap.py', 'w').write(output)
|
f = open('blog-bootstrap.py', 'w').write(output)
|
||||||
|
|
||||||
Another example is available `here
|
Another example is available `here
|
||||||
<https://svn.openplans.org/svn/fassembler/trunk/fassembler/create-venv-script.py>`_.
|
<https://github.com/socialplanning/fassembler/blob/master/fassembler/create-venv-script.py>`_.
|
||||||
|
|
||||||
activate script
|
activate script
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
@@ -184,7 +247,7 @@ Description:
|
|||||||
environment in-place.) This is all it does; it's purely a convenience. If
|
environment in-place.) This is all it does; it's purely a convenience. If
|
||||||
you directly run a script or the python interpreter from the virtualenv's
|
you directly run a script or the python interpreter from the virtualenv's
|
||||||
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
||||||
``/path/to/env/bin/python script.py``) there's no need for activation.
|
``/path/to/env/bin/python script.py``) there's no need for activation.
|
||||||
|
|
||||||
After activating an environment you can use the function ``deactivate`` to
|
After activating an environment you can use the function ``deactivate`` to
|
||||||
undo the changes to your ``$PATH``.
|
undo the changes to your ``$PATH``.
|
||||||
@@ -202,15 +265,16 @@ Description:
|
|||||||
|
|
||||||
And use ``deactivate.bat`` to undo the changes.
|
And use ``deactivate.bat`` to undo the changes.
|
||||||
|
|
||||||
The ``--no-site-packages`` Option
|
The ``--system-site-packages`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you build with ``virtualenv --no-site-packages ENV`` it will *not*
|
If you build with ``virtualenv --system-site-packages ENV``, your virtual
|
||||||
inherit any packages from ``/usr/lib/python2.5/site-packages`` (or
|
environment will inherit packages from ``/usr/lib/python2.7/site-packages``
|
||||||
wherever your global site-packages directory is). This can be used if
|
(or wherever your global site-packages directory is).
|
||||||
you don't have control over site-packages and don't want to depend on
|
|
||||||
the packages there, or you just want more isolation from the global
|
This can be used if you have control over the global site-packages directory,
|
||||||
system.
|
and you want to depend on the packages there. If you want isolation from the
|
||||||
|
global system, do not use this flag.
|
||||||
|
|
||||||
Using Virtualenv without ``bin/python``
|
Using Virtualenv without ``bin/python``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -231,11 +295,12 @@ Description:
|
|||||||
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
||||||
you to use an existing interpreter. Items in your environment will show up
|
you to use an existing interpreter. Items in your environment will show up
|
||||||
first on ``sys.path``, before global items. However, global items will
|
first on ``sys.path``, before global items. However, global items will
|
||||||
always be accessible -- this technique does not support the
|
always be accessible (as if the ``--system-site-packages`` flag had been used
|
||||||
``--no-site-packages`` flag. Also, this cannot undo the activation of other
|
in creating the environment, whether it was or not). Also, this cannot undo
|
||||||
environments, or modules that have been imported. You shouldn't try to, for
|
the activation of other environments, or modules that have been imported.
|
||||||
instance, activate an environment before a web request; you should activate
|
You shouldn't try to, for instance, activate an environment before a web
|
||||||
*one* environment as early as possible, and not do it again in that process.
|
request; you should activate *one* environment as early as possible, and not
|
||||||
|
do it again in that process.
|
||||||
|
|
||||||
Making Environments Relocatable
|
Making Environments Relocatable
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -272,8 +337,8 @@ Description:
|
|||||||
different (either different versions, or a different filesystem
|
different (either different versions, or a different filesystem
|
||||||
layout).
|
layout).
|
||||||
|
|
||||||
Currently the ``--no-site-packages`` option will not be honored if you
|
If you use this flag to create an environment, currently, the
|
||||||
use this on an environment.
|
``--system-site-packages`` option will be implied.
|
||||||
|
|
||||||
The ``--extra-search-dir`` Option
|
The ``--extra-search-dir`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -419,10 +484,24 @@ Description:
|
|||||||
Changes & News
|
Changes & News
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Next release (1.7) schedule
|
1.7 (2011-11-30)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Beta release mid-July 2011, final release early August.
|
* Updated embedded Distribute release to 0.6.24. Thanks Alex Grönholm.
|
||||||
|
|
||||||
|
* Made ``--no-site-packages`` behavior the default behavior. The
|
||||||
|
``--no-site-packages`` flag is still permitted, but displays a warning when
|
||||||
|
used. Thanks Chris McDonough.
|
||||||
|
|
||||||
|
* New flag: ``--system-site-packages``; this flag should be passed to get the
|
||||||
|
previous default global-site-package-including behavior back.
|
||||||
|
|
||||||
|
* Added ability to set command options as environment variables and options
|
||||||
|
in a ``virtualenv.ini`` file.
|
||||||
|
|
||||||
|
* Fixed various encoding related issues with paths. Thanks Gunnlaugur Thor Briem.
|
||||||
|
|
||||||
|
* Made ``virtualenv.py`` script executable.
|
||||||
|
|
||||||
1.6.4 (2011-07-21)
|
1.6.4 (2011-07-21)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
Executable
+70
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""
|
||||||
|
Helper script to rebuild virtualenv.py from virtualenv_support
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
here = os.path.dirname(__file__)
|
||||||
|
script = os.path.join(here, '..', 'virtualenv.py')
|
||||||
|
|
||||||
|
file_regex = re.compile(
|
||||||
|
r'##file (.*?)\n([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*convert\("""(.*?)"""\)',
|
||||||
|
re.S)
|
||||||
|
file_template = '##file %(filename)s\n%(varname)s = convert("""\n%(data)s""")'
|
||||||
|
|
||||||
|
def rebuild():
|
||||||
|
f = open(script, 'rb')
|
||||||
|
content = f.read()
|
||||||
|
f.close()
|
||||||
|
parts = []
|
||||||
|
last_pos = 0
|
||||||
|
match = None
|
||||||
|
for match in file_regex.finditer(content):
|
||||||
|
parts.append(content[last_pos:match.start()])
|
||||||
|
last_pos = match.end()
|
||||||
|
filename = match.group(1)
|
||||||
|
varname = match.group(2)
|
||||||
|
data = match.group(3)
|
||||||
|
print('Found reference to file %s' % filename)
|
||||||
|
f = open(os.path.join(here, '..', 'virtualenv_support', filename), 'rb')
|
||||||
|
c = f.read()
|
||||||
|
f.close()
|
||||||
|
new_data = c.encode('zlib').encode('base64')
|
||||||
|
if new_data == data:
|
||||||
|
print(' Reference up to date (%s bytes)' % len(c))
|
||||||
|
parts.append(match.group(0))
|
||||||
|
continue
|
||||||
|
print(' Content changed (%s bytes -> %s bytes)' % (
|
||||||
|
zipped_len(data), len(c)))
|
||||||
|
new_match = file_template % dict(
|
||||||
|
filename=filename,
|
||||||
|
varname=varname,
|
||||||
|
data=new_data)
|
||||||
|
parts.append(new_match)
|
||||||
|
parts.append(content[last_pos:])
|
||||||
|
new_content = ''.join(parts)
|
||||||
|
if new_content != content:
|
||||||
|
sys.stdout.write('Content updated; overwriting... ')
|
||||||
|
f = open(script, 'wb')
|
||||||
|
f.write(new_content)
|
||||||
|
f.close()
|
||||||
|
print('done.')
|
||||||
|
else:
|
||||||
|
print('No changes in content')
|
||||||
|
if match is None:
|
||||||
|
print('No variables were matched/found')
|
||||||
|
|
||||||
|
def zipped_len(data):
|
||||||
|
if not data:
|
||||||
|
return 'no data'
|
||||||
|
try:
|
||||||
|
return len(data.decode('base64').decode('zlib'))
|
||||||
|
except:
|
||||||
|
return 'unknown'
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
rebuild()
|
||||||
|
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""
|
||||||
|
Refresh any files in ../virtualenv_support/ that come from elsewhere
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
from urllib.request import urlopen
|
||||||
|
except ImportError:
|
||||||
|
from urllib2 import urlopen
|
||||||
|
import sys
|
||||||
|
|
||||||
|
here = os.path.dirname(__file__)
|
||||||
|
support_files = os.path.join(here, '..', 'virtualenv_support')
|
||||||
|
|
||||||
|
files = [
|
||||||
|
('http://peak.telecommunity.com/dist/ez_setup.py', 'ez_setup.py'),
|
||||||
|
('http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg', 'setuptools-0.6c11-py2.6.egg'),
|
||||||
|
('http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c11-py2.5.egg', 'setuptools-0.6c11-py2.5.egg'),
|
||||||
|
('http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg', 'setuptools-0.6c11-py2.4.egg'),
|
||||||
|
('http://python-distribute.org/distribute_setup.py', 'distribute_setup.py'),
|
||||||
|
('http://pypi.python.org/packages/source/d/distribute/distribute-0.6.24.tar.gz', 'distribute-0.6.24.tar.gz'),
|
||||||
|
('http://pypi.python.org/packages/source/p/pip/pip-1.0.2.tar.gz', 'pip-1.0.2.tar.gz'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
for url, filename in files:
|
||||||
|
sys.stdout.write('fetching %s ... ' % url)
|
||||||
|
sys.stdout.flush()
|
||||||
|
f = urlopen(url)
|
||||||
|
content = f.read()
|
||||||
|
f.close()
|
||||||
|
print('done.')
|
||||||
|
filename = os.path.join(support_files, filename)
|
||||||
|
if os.path.exists(filename):
|
||||||
|
f = open(filename, 'rb')
|
||||||
|
cur_content = f.read()
|
||||||
|
f.close()
|
||||||
|
else:
|
||||||
|
cur_content = ''
|
||||||
|
if cur_content == content:
|
||||||
|
print(' %s up-to-date' % filename)
|
||||||
|
else:
|
||||||
|
print(' overwriting %s' % filename)
|
||||||
|
f = open(filename, 'wb')
|
||||||
|
f.write(content)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man 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 " singlehtml to make a single large HTML file"
|
||||||
|
@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 " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@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)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
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/django-compressor.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django-compressor.qhc"
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/django-compressor"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django-compressor"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
make -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
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."
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
/**
|
||||||
|
* Sphinx stylesheet -- default theme
|
||||||
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("basic.css");
|
||||||
|
|
||||||
|
/* -- page layout ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 100%;
|
||||||
|
background-color: #111;
|
||||||
|
color: #555;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.documentwrapper {
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.bodywrapper {
|
||||||
|
margin: 0 0 0 230px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr{
|
||||||
|
border: 1px solid #B1B4B6;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.document {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #3E4349;
|
||||||
|
padding: 0 30px 30px 30px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.footer {
|
||||||
|
color: #555;
|
||||||
|
width: 100%;
|
||||||
|
padding: 13px 0;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.footer a {
|
||||||
|
color: #444;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related {
|
||||||
|
background-color: #6BA81E;
|
||||||
|
line-height: 32px;
|
||||||
|
color: #fff;
|
||||||
|
text-shadow: 0px 1px 0 #444;
|
||||||
|
font-size: 0.80em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related a {
|
||||||
|
color: #E2F3CC;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar {
|
||||||
|
font-size: 0.75em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebarwrapper{
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar h3,
|
||||||
|
div.sphinxsidebar h4 {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
color: #222;
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: normal;
|
||||||
|
margin: 0;
|
||||||
|
padding: 5px 10px;
|
||||||
|
background-color: #ddd;
|
||||||
|
text-shadow: 1px 1px 0 white
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar h4{
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar h3 a {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
div.sphinxsidebar p {
|
||||||
|
color: #888;
|
||||||
|
padding: 5px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar p.topless {
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul {
|
||||||
|
margin: 10px 20px;
|
||||||
|
padding: 0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar a {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar input {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar input[type=text]{
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- body styles ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #005B81;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #E32E00;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body h1,
|
||||||
|
div.body h2,
|
||||||
|
div.body h3,
|
||||||
|
div.body h4,
|
||||||
|
div.body h5,
|
||||||
|
div.body h6 {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #BED4EB;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #212224;
|
||||||
|
margin: 30px 0px 10px 0px;
|
||||||
|
padding: 5px 0 5px 10px;
|
||||||
|
text-shadow: 0px 1px 0 white
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
|
||||||
|
div.body h2 { font-size: 150%; background-color: #C8D5E3; }
|
||||||
|
div.body h3 { font-size: 120%; background-color: #D8DEE3; }
|
||||||
|
div.body h4 { font-size: 110%; background-color: #D8DEE3; }
|
||||||
|
div.body h5 { font-size: 100%; background-color: #D8DEE3; }
|
||||||
|
div.body h6 { font-size: 100%; background-color: #D8DEE3; }
|
||||||
|
|
||||||
|
a.headerlink {
|
||||||
|
color: #c60f0f;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding: 0 4px 0 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.headerlink:hover {
|
||||||
|
background-color: #c60f0f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p, div.body dd, div.body li {
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.admonition p.admonition-title + p {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight{
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.note {
|
||||||
|
background-color: #eee;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.seealso {
|
||||||
|
background-color: #ffc;
|
||||||
|
border: 1px solid #ff6;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.topic {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.warning {
|
||||||
|
background-color: #ffe4e4;
|
||||||
|
border: 1px solid #f66;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.admonition-title {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.admonition-title:after {
|
||||||
|
content: ":";
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 10px;
|
||||||
|
background-color: White;
|
||||||
|
color: #222;
|
||||||
|
line-height: 1.2em;
|
||||||
|
border: 1px solid #C6C9CB;
|
||||||
|
font-size: 1.2em;
|
||||||
|
margin: 1.5em 0 1.5em 0;
|
||||||
|
-webkit-box-shadow: 1px 1px 1px #d8d8d8;
|
||||||
|
-moz-box-shadow: 1px 1px 1px #d8d8d8;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt {
|
||||||
|
background-color: #ecf0f3;
|
||||||
|
color: #222;
|
||||||
|
padding: 1px 2px;
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
.c { color: #999988; font-style: italic } /* Comment */
|
||||||
|
.k { font-weight: bold } /* Keyword */
|
||||||
|
.o { font-weight: bold } /* Operator */
|
||||||
|
.cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
||||||
|
.cp { color: #999999; font-weight: bold } /* Comment.preproc */
|
||||||
|
.c1 { color: #999988; font-style: italic } /* Comment.Single */
|
||||||
|
.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||||
|
.ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.gr { color: #aa0000 } /* Generic.Error */
|
||||||
|
.gh { color: #999999 } /* Generic.Heading */
|
||||||
|
.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
||||||
|
.go { color: #111 } /* Generic.Output */
|
||||||
|
.gp { color: #555555 } /* Generic.Prompt */
|
||||||
|
.gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.gu { color: #aaaaaa } /* Generic.Subheading */
|
||||||
|
.gt { color: #aa0000 } /* Generic.Traceback */
|
||||||
|
.kc { font-weight: bold } /* Keyword.Constant */
|
||||||
|
.kd { font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.kp { font-weight: bold } /* Keyword.Pseudo */
|
||||||
|
.kr { font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
||||||
|
.m { color: #009999 } /* Literal.Number */
|
||||||
|
.s { color: #bb8844 } /* Literal.String */
|
||||||
|
.na { color: #008080 } /* Name.Attribute */
|
||||||
|
.nb { color: #999999 } /* Name.Builtin */
|
||||||
|
.nc { color: #445588; font-weight: bold } /* Name.Class */
|
||||||
|
.no { color: #ff99ff } /* Name.Constant */
|
||||||
|
.ni { color: #800080 } /* Name.Entity */
|
||||||
|
.ne { color: #990000; font-weight: bold } /* Name.Exception */
|
||||||
|
.nf { color: #990000; font-weight: bold } /* Name.Function */
|
||||||
|
.nn { color: #555555 } /* Name.Namespace */
|
||||||
|
.nt { color: #000080 } /* Name.Tag */
|
||||||
|
.nv { color: purple } /* Name.Variable */
|
||||||
|
.ow { font-weight: bold } /* Operator.Word */
|
||||||
|
.mf { color: #009999 } /* Literal.Number.Float */
|
||||||
|
.mh { color: #009999 } /* Literal.Number.Hex */
|
||||||
|
.mi { color: #009999 } /* Literal.Number.Integer */
|
||||||
|
.mo { color: #009999 } /* Literal.Number.Oct */
|
||||||
|
.sb { color: #bb8844 } /* Literal.String.Backtick */
|
||||||
|
.sc { color: #bb8844 } /* Literal.String.Char */
|
||||||
|
.sd { color: #bb8844 } /* Literal.String.Doc */
|
||||||
|
.s2 { color: #bb8844 } /* Literal.String.Double */
|
||||||
|
.se { color: #bb8844 } /* Literal.String.Escape */
|
||||||
|
.sh { color: #bb8844 } /* Literal.String.Heredoc */
|
||||||
|
.si { color: #bb8844 } /* Literal.String.Interpol */
|
||||||
|
.sx { color: #bb8844 } /* Literal.String.Other */
|
||||||
|
.sr { color: #808000 } /* Literal.String.Regex */
|
||||||
|
.s1 { color: #bb8844 } /* Literal.String.Single */
|
||||||
|
.ss { color: #bb8844 } /* Literal.String.Symbol */
|
||||||
|
.bp { color: #999999 } /* Name.Builtin.Pseudo */
|
||||||
|
.vc { color: #ff99ff } /* Name.Variable.Class */
|
||||||
|
.vg { color: #ff99ff } /* Name.Variable.Global */
|
||||||
|
.vi { color: #ff99ff } /* Name.Variable.Instance */
|
||||||
|
.il { color: #009999 } /* Literal.Number.Integer.Long */
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
[theme]
|
||||||
|
inherit = basic
|
||||||
|
stylesheet = nature.css
|
||||||
|
pygments_style = tango
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Paste documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Tue Apr 22 22:08:49 2008.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its containing dir.
|
||||||
|
#
|
||||||
|
# The contents of this file are pickled, so don't put values in the namespace
|
||||||
|
# that aren't pickleable (module imports are okay, they're removed automatically).
|
||||||
|
#
|
||||||
|
# All configuration values have a default value; values that are commented out
|
||||||
|
# serve to show the default value.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# If your extensions are in another directory, add it here.
|
||||||
|
#sys.path.append('some/directory')
|
||||||
|
|
||||||
|
# General configuration
|
||||||
|
# ---------------------
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||||
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
|
extensions = ['sphinx.ext.autodoc']
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
## FIXME: disabled for now because I haven't figured out how to use this:
|
||||||
|
#templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix of source filenames.
|
||||||
|
source_suffix = '.txt'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General substitutions.
|
||||||
|
project = 'virtualenv'
|
||||||
|
copyright = '2007-2011, Ian Bicking, The Open Planning Project, The virtualenv developers'
|
||||||
|
|
||||||
|
# The default replacements for |version| and |release|, also used in various
|
||||||
|
# other places throughout the built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
|
||||||
|
release = "1.7"
|
||||||
|
version = ".".join(release.split(".")[:2])
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of documents that shouldn't be included in the build.
|
||||||
|
unused_docs = []
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
|
||||||
|
# Options for HTML output
|
||||||
|
# -----------------------
|
||||||
|
|
||||||
|
# The style sheet to use for HTML and HTML Help pages. A file of that name
|
||||||
|
# must exist either in Sphinx' static/ path, or in one of the custom paths
|
||||||
|
# given in html_static_path.
|
||||||
|
#html_style = 'default.css'
|
||||||
|
|
||||||
|
html_theme = 'nature'
|
||||||
|
html_theme_path = ['_theme']
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
|
# Content template for the index page.
|
||||||
|
#html_index = ''
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_use_modindex = True
|
||||||
|
|
||||||
|
# If true, the reST sources are included in the HTML build as _sources/<name>.
|
||||||
|
#html_copy_source = True
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'Pastedoc'
|
||||||
|
|
||||||
|
|
||||||
|
# Options for LaTeX output
|
||||||
|
# ------------------------
|
||||||
|
|
||||||
|
# The paper size ('letter' or 'a4').
|
||||||
|
#latex_paper_size = 'letter'
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#latex_font_size = '10pt'
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title, author, document class [howto/manual]).
|
||||||
|
#latex_documents = []
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#latex_preamble = ''
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_use_modindex = True
|
||||||
@@ -27,9 +27,16 @@ Project <http://openplans.org>`_ and is now maintained by a
|
|||||||
It is licensed under an
|
It is licensed under an
|
||||||
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
||||||
|
|
||||||
You can install it with ``easy_install virtualenv``, or the `latest
|
You can install it with ``pip install virtualenv``, or the `latest
|
||||||
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
||||||
with ``easy_install virtualenv==dev``.
|
with ``pip install virtualenv==dev``.
|
||||||
|
|
||||||
|
You can also use ``easy_install``, or if you have no Python package manager
|
||||||
|
available at all, you can just grab the single file `virtualenv.py`_ and run
|
||||||
|
it with ``python virtualenv.py``.
|
||||||
|
|
||||||
|
.. _virtualenv.py: https://raw.github.com/pypa/virtualenv/master/virtualenv.py
|
||||||
|
|
||||||
|
|
||||||
What It Does
|
What It Does
|
||||||
------------
|
------------
|
||||||
@@ -79,9 +86,65 @@ Distribute instead of setuptools, just call virtualenv like this::
|
|||||||
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
||||||
|
|
||||||
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
||||||
installer, so you can use `ENV/bin/pip`` to install additional packages into
|
installer, so you can use ``ENV/bin/pip`` to install additional packages into
|
||||||
the environment.
|
the environment.
|
||||||
|
|
||||||
|
Environment variables and configuration files
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
virtualenv can not only be configured by passing command line options such as
|
||||||
|
``--distribute`` but also by two other means:
|
||||||
|
|
||||||
|
- Environment variables
|
||||||
|
|
||||||
|
Each command line option is automatically used to look for environment
|
||||||
|
variables with the name format ``VIRTUALENV_<UPPER_NAME>``. That means
|
||||||
|
the name of the command line options are capitalized and have dashes
|
||||||
|
(``'-'``) replaced with underscores (``'_'``).
|
||||||
|
|
||||||
|
For example, to automatically install Distribute instead of setuptools
|
||||||
|
you can also set an environment variable::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_USE_DISTRIBUTE=true
|
||||||
|
$ python virtualenv.py ENV
|
||||||
|
|
||||||
|
It's the same as passing the option to virtualenv directly::
|
||||||
|
|
||||||
|
$ python virtualenv.py --distribute ENV
|
||||||
|
|
||||||
|
This also works for appending command line options, like ``--find-links``.
|
||||||
|
Just leave an empty space between the passsed values, e.g.::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_EXTRA_SEARCH_DIR="/path/to/dists /path/to/other/dists"
|
||||||
|
$ virtualenv ENV
|
||||||
|
|
||||||
|
is the same as calling::
|
||||||
|
|
||||||
|
$ python virtualenv.py --extra-search-dir=/path/to/dists --extra-search-dir=/path/to/other/dists ENV
|
||||||
|
|
||||||
|
- Config files
|
||||||
|
|
||||||
|
virtualenv also looks for a standard ini config file. On Unix and Mac OS X
|
||||||
|
that's ``$HOME/.virtualenv/virtualenv.ini`` and on Windows, it's
|
||||||
|
``%HOME%\\virtualenv\\virtualenv.ini``.
|
||||||
|
|
||||||
|
The names of the settings are derived from the long command line option,
|
||||||
|
e.g. the option ``--distribute`` would look like this::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
distribute = true
|
||||||
|
|
||||||
|
Appending options like ``--extra-search-dir`` can be written on multiple
|
||||||
|
lines::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
extra-search-dir =
|
||||||
|
/path/to/dists
|
||||||
|
/path/to/other/dists
|
||||||
|
|
||||||
|
Please have a look at the output of ``virtualenv --help`` for a full list
|
||||||
|
of supported options.
|
||||||
|
|
||||||
Windows Notes
|
Windows Notes
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -172,7 +235,7 @@ Here's a more concrete example of how you could use this::
|
|||||||
f = open('blog-bootstrap.py', 'w').write(output)
|
f = open('blog-bootstrap.py', 'w').write(output)
|
||||||
|
|
||||||
Another example is available `here
|
Another example is available `here
|
||||||
<https://svn.openplans.org/svn/fassembler/trunk/fassembler/create-venv-script.py>`_.
|
<https://github.com/socialplanning/fassembler/blob/master/fassembler/create-venv-script.py>`_.
|
||||||
|
|
||||||
activate script
|
activate script
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
@@ -189,7 +252,7 @@ directory. (You have to use ``source`` because it changes your shell
|
|||||||
environment in-place.) This is all it does; it's purely a convenience. If
|
environment in-place.) This is all it does; it's purely a convenience. If
|
||||||
you directly run a script or the python interpreter from the virtualenv's
|
you directly run a script or the python interpreter from the virtualenv's
|
||||||
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
||||||
``/path/to/env/bin/python script.py``) there's no need for activation.
|
``/path/to/env/bin/python script.py``) there's no need for activation.
|
||||||
|
|
||||||
After activating an environment you can use the function ``deactivate`` to
|
After activating an environment you can use the function ``deactivate`` to
|
||||||
undo the changes to your ``$PATH``.
|
undo the changes to your ``$PATH``.
|
||||||
@@ -207,15 +270,16 @@ On Windows you just do::
|
|||||||
|
|
||||||
And use ``deactivate.bat`` to undo the changes.
|
And use ``deactivate.bat`` to undo the changes.
|
||||||
|
|
||||||
The ``--no-site-packages`` Option
|
The ``--system-site-packages`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you build with ``virtualenv --no-site-packages ENV`` it will *not*
|
If you build with ``virtualenv --system-site-packages ENV``, your virtual
|
||||||
inherit any packages from ``/usr/lib/python2.5/site-packages`` (or
|
environment will inherit packages from ``/usr/lib/python2.7/site-packages``
|
||||||
wherever your global site-packages directory is). This can be used if
|
(or wherever your global site-packages directory is).
|
||||||
you don't have control over site-packages and don't want to depend on
|
|
||||||
the packages there, or you just want more isolation from the global
|
This can be used if you have control over the global site-packages directory,
|
||||||
system.
|
and you want to depend on the packages there. If you want isolation from the
|
||||||
|
global system, do not use this flag.
|
||||||
|
|
||||||
Using Virtualenv without ``bin/python``
|
Using Virtualenv without ``bin/python``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -236,11 +300,12 @@ can setup the environment like::
|
|||||||
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
||||||
you to use an existing interpreter. Items in your environment will show up
|
you to use an existing interpreter. Items in your environment will show up
|
||||||
first on ``sys.path``, before global items. However, global items will
|
first on ``sys.path``, before global items. However, global items will
|
||||||
always be accessible -- this technique does not support the
|
always be accessible (as if the ``--system-site-packages`` flag had been used
|
||||||
``--no-site-packages`` flag. Also, this cannot undo the activation of other
|
in creating the environment, whether it was or not). Also, this cannot undo
|
||||||
environments, or modules that have been imported. You shouldn't try to, for
|
the activation of other environments, or modules that have been imported.
|
||||||
instance, activate an environment before a web request; you should activate
|
You shouldn't try to, for instance, activate an environment before a web
|
||||||
*one* environment as early as possible, and not do it again in that process.
|
request; you should activate *one* environment as early as possible, and not
|
||||||
|
do it again in that process.
|
||||||
|
|
||||||
Making Environments Relocatable
|
Making Environments Relocatable
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -277,8 +342,8 @@ libraries on the system, if those C libraries are located somewhere
|
|||||||
different (either different versions, or a different filesystem
|
different (either different versions, or a different filesystem
|
||||||
layout).
|
layout).
|
||||||
|
|
||||||
Currently the ``--no-site-packages`` option will not be honored if you
|
If you use this flag to create an environment, currently, the
|
||||||
use this on an environment.
|
``--system-site-packages`` option will be implied.
|
||||||
|
|
||||||
The ``--extra-search-dir`` Option
|
The ``--extra-search-dir`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set BUILDDIR=_build
|
||||||
|
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||||
|
if NOT "%PAPER%" == "" (
|
||||||
|
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
if "%1" == "help" (
|
||||||
|
: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. singlehtml to make a single large HTML file
|
||||||
|
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. devhelp to make HTML files and a Devhelp project
|
||||||
|
echo. epub to make an epub
|
||||||
|
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||||
|
echo. text to make text files
|
||||||
|
echo. man to make manual pages
|
||||||
|
echo. changes to make an overview over 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
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "clean" (
|
||||||
|
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||||
|
del /q /s %BUILDDIR%\*
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "html" (
|
||||||
|
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "dirhtml" (
|
||||||
|
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "singlehtml" (
|
||||||
|
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "pickle" (
|
||||||
|
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can process the pickle files.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "json" (
|
||||||
|
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can process the JSON files.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "htmlhelp" (
|
||||||
|
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||||
|
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "qthelp" (
|
||||||
|
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||||
|
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||||
|
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\django-compressor.qhcp
|
||||||
|
echo.To view the help file:
|
||||||
|
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\django-compressor.ghc
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "devhelp" (
|
||||||
|
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "epub" (
|
||||||
|
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "latex" (
|
||||||
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "text" (
|
||||||
|
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "man" (
|
||||||
|
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "changes" (
|
||||||
|
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.The overview file is in %BUILDDIR%/changes.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "linkcheck" (
|
||||||
|
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Link check complete; look for any errors in the above output ^
|
||||||
|
or in %BUILDDIR%/linkcheck/output.txt.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "doctest" (
|
||||||
|
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Testing of doctests in the sources finished, look at the ^
|
||||||
|
results in %BUILDDIR%/doctest/output.txt.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
:end
|
||||||
@@ -1,10 +1,24 @@
|
|||||||
Changes & News
|
Changes & News
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Next release (1.7) schedule
|
1.7 (2011-11-30)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Beta release mid-July 2011, final release early August.
|
* Updated embedded Distribute release to 0.6.24. Thanks Alex Grönholm.
|
||||||
|
|
||||||
|
* Made ``--no-site-packages`` behavior the default behavior. The
|
||||||
|
``--no-site-packages`` flag is still permitted, but displays a warning when
|
||||||
|
used. Thanks Chris McDonough.
|
||||||
|
|
||||||
|
* New flag: ``--system-site-packages``; this flag should be passed to get the
|
||||||
|
previous default global-site-package-including behavior back.
|
||||||
|
|
||||||
|
* Added ability to set command options as environment variables and options
|
||||||
|
in a ``virtualenv.ini`` file.
|
||||||
|
|
||||||
|
* Fixed various encoding related issues with paths. Thanks Gunnlaugur Thor Briem.
|
||||||
|
|
||||||
|
* Made ``virtualenv.py`` script executable.
|
||||||
|
|
||||||
1.6.4 (2011-07-21)
|
1.6.4 (2011-07-21)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
@@ -26,7 +26,7 @@ f.close()
|
|||||||
setup(name='virtualenv',
|
setup(name='virtualenv',
|
||||||
# If you change the version here, change it in virtualenv.py and
|
# If you change the version here, change it in virtualenv.py and
|
||||||
# docs/conf.py as well
|
# docs/conf.py as well
|
||||||
version="1.6.4",
|
version="1.7",
|
||||||
description="Virtual Python Environment builder",
|
description="Virtual Python Environment builder",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
classifiers=[
|
classifiers=[
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import virtualenv
|
||||||
|
from mock import patch, Mock
|
||||||
|
|
||||||
|
|
||||||
|
def test_version():
|
||||||
|
"""Should have a version string"""
|
||||||
|
assert virtualenv.virtualenv_version == "1.7", "Should have version"
|
||||||
|
|
||||||
|
|
||||||
|
@patch('os.path.exists')
|
||||||
|
def test_resolve_interpreter_with_absolute_path(mock_exists):
|
||||||
|
"""Should return absolute path if given and exists"""
|
||||||
|
mock_exists.return_value = True
|
||||||
|
virtualenv.is_executable = Mock(return_value=True)
|
||||||
|
|
||||||
|
exe = virtualenv.resolve_interpreter("/usr/bin/python42")
|
||||||
|
|
||||||
|
assert exe == "/usr/bin/python42", "Absolute path should return as is"
|
||||||
|
mock_exists.assert_called_with("/usr/bin/python42")
|
||||||
|
virtualenv.is_executable.assert_called_with("/usr/bin/python42")
|
||||||
|
|
||||||
|
|
||||||
|
@patch('os.path.exists')
|
||||||
|
def test_resolve_intepreter_with_nonexistant_interpreter(mock_exists):
|
||||||
|
"""Should exit when with absolute path if not exists"""
|
||||||
|
mock_exists.return_value = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
virtualenv.resolve_interpreter("/usr/bin/python42")
|
||||||
|
assert False, "Should raise exception"
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
|
||||||
|
mock_exists.assert_called_with("/usr/bin/python42")
|
||||||
|
|
||||||
|
|
||||||
|
@patch('os.path.exists')
|
||||||
|
def test_resolve_intepreter_with_invalid_interpreter(mock_exists):
|
||||||
|
"""Should exit when with absolute path if not exists"""
|
||||||
|
mock_exists.return_value = True
|
||||||
|
virtualenv.is_executable = Mock(return_value=False)
|
||||||
|
|
||||||
|
try:
|
||||||
|
virtualenv.resolve_interpreter("/usr/bin/python42")
|
||||||
|
assert False, "Should raise exception"
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
|
||||||
|
mock_exists.assert_called_with("/usr/bin/python42")
|
||||||
|
virtualenv.is_executable.assert_called_with("/usr/bin/python42")
|
||||||
+103
-24
@@ -1,6 +1,6 @@
|
|||||||
Metadata-Version: 1.0
|
Metadata-Version: 1.0
|
||||||
Name: virtualenv
|
Name: virtualenv
|
||||||
Version: 1.6.4
|
Version: 1.7
|
||||||
Summary: Virtual Python Environment builder
|
Summary: Virtual Python Environment builder
|
||||||
Home-page: http://www.virtualenv.org
|
Home-page: http://www.virtualenv.org
|
||||||
Author: Jannis Leidel, Carl Meyer and Brian Rosner
|
Author: Jannis Leidel, Carl Meyer and Brian Rosner
|
||||||
@@ -22,9 +22,16 @@ Description:
|
|||||||
It is licensed under an
|
It is licensed under an
|
||||||
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
`MIT-style permissive license <https://github.com/pypa/virtualenv/raw/master/LICENSE.txt>`_.
|
||||||
|
|
||||||
You can install it with ``easy_install virtualenv``, or the `latest
|
You can install it with ``pip install virtualenv``, or the `latest
|
||||||
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
development version <https://github.com/pypa/virtualenv/tarball/develop#egg=virtualenv-dev>`_
|
||||||
with ``easy_install virtualenv==dev``.
|
with ``pip install virtualenv==dev``.
|
||||||
|
|
||||||
|
You can also use ``easy_install``, or if you have no Python package manager
|
||||||
|
available at all, you can just grab the single file `virtualenv.py`_ and run
|
||||||
|
it with ``python virtualenv.py``.
|
||||||
|
|
||||||
|
.. _virtualenv.py: https://raw.github.com/pypa/virtualenv/master/virtualenv.py
|
||||||
|
|
||||||
|
|
||||||
What It Does
|
What It Does
|
||||||
------------
|
------------
|
||||||
@@ -74,9 +81,65 @@ Description:
|
|||||||
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
You can also set the environment variable VIRTUALENV_USE_DISTRIBUTE.
|
||||||
|
|
||||||
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
A new virtualenv also includes the `pip <http://pypy.python.org/pypi/pip>`_
|
||||||
installer, so you can use `ENV/bin/pip`` to install additional packages into
|
installer, so you can use ``ENV/bin/pip`` to install additional packages into
|
||||||
the environment.
|
the environment.
|
||||||
|
|
||||||
|
Environment variables and configuration files
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
virtualenv can not only be configured by passing command line options such as
|
||||||
|
``--distribute`` but also by two other means:
|
||||||
|
|
||||||
|
- Environment variables
|
||||||
|
|
||||||
|
Each command line option is automatically used to look for environment
|
||||||
|
variables with the name format ``VIRTUALENV_<UPPER_NAME>``. That means
|
||||||
|
the name of the command line options are capitalized and have dashes
|
||||||
|
(``'-'``) replaced with underscores (``'_'``).
|
||||||
|
|
||||||
|
For example, to automatically install Distribute instead of setuptools
|
||||||
|
you can also set an environment variable::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_USE_DISTRIBUTE=true
|
||||||
|
$ python virtualenv.py ENV
|
||||||
|
|
||||||
|
It's the same as passing the option to virtualenv directly::
|
||||||
|
|
||||||
|
$ python virtualenv.py --distribute ENV
|
||||||
|
|
||||||
|
This also works for appending command line options, like ``--find-links``.
|
||||||
|
Just leave an empty space between the passsed values, e.g.::
|
||||||
|
|
||||||
|
$ export VIRTUALENV_EXTRA_SEARCH_DIR="/path/to/dists /path/to/other/dists"
|
||||||
|
$ virtualenv ENV
|
||||||
|
|
||||||
|
is the same as calling::
|
||||||
|
|
||||||
|
$ python virtualenv.py --extra-search-dir=/path/to/dists --extra-search-dir=/path/to/other/dists ENV
|
||||||
|
|
||||||
|
- Config files
|
||||||
|
|
||||||
|
virtualenv also looks for a standard ini config file. On Unix and Mac OS X
|
||||||
|
that's ``$HOME/.virtualenv/virtualenv.ini`` and on Windows, it's
|
||||||
|
``%HOME%\\virtualenv\\virtualenv.ini``.
|
||||||
|
|
||||||
|
The names of the settings are derived from the long command line option,
|
||||||
|
e.g. the option ``--distribute`` would look like this::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
distribute = true
|
||||||
|
|
||||||
|
Appending options like ``--extra-search-dir`` can be written on multiple
|
||||||
|
lines::
|
||||||
|
|
||||||
|
[virtualenv]
|
||||||
|
extra-search-dir =
|
||||||
|
/path/to/dists
|
||||||
|
/path/to/other/dists
|
||||||
|
|
||||||
|
Please have a look at the output of ``virtualenv --help`` for a full list
|
||||||
|
of supported options.
|
||||||
|
|
||||||
Windows Notes
|
Windows Notes
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -167,7 +230,7 @@ Description:
|
|||||||
f = open('blog-bootstrap.py', 'w').write(output)
|
f = open('blog-bootstrap.py', 'w').write(output)
|
||||||
|
|
||||||
Another example is available `here
|
Another example is available `here
|
||||||
<https://svn.openplans.org/svn/fassembler/trunk/fassembler/create-venv-script.py>`_.
|
<https://github.com/socialplanning/fassembler/blob/master/fassembler/create-venv-script.py>`_.
|
||||||
|
|
||||||
activate script
|
activate script
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
@@ -184,7 +247,7 @@ Description:
|
|||||||
environment in-place.) This is all it does; it's purely a convenience. If
|
environment in-place.) This is all it does; it's purely a convenience. If
|
||||||
you directly run a script or the python interpreter from the virtualenv's
|
you directly run a script or the python interpreter from the virtualenv's
|
||||||
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
``bin/`` directory (e.g. ``path/to/env/bin/pip`` or
|
||||||
``/path/to/env/bin/python script.py``) there's no need for activation.
|
``/path/to/env/bin/python script.py``) there's no need for activation.
|
||||||
|
|
||||||
After activating an environment you can use the function ``deactivate`` to
|
After activating an environment you can use the function ``deactivate`` to
|
||||||
undo the changes to your ``$PATH``.
|
undo the changes to your ``$PATH``.
|
||||||
@@ -202,15 +265,16 @@ Description:
|
|||||||
|
|
||||||
And use ``deactivate.bat`` to undo the changes.
|
And use ``deactivate.bat`` to undo the changes.
|
||||||
|
|
||||||
The ``--no-site-packages`` Option
|
The ``--system-site-packages`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you build with ``virtualenv --no-site-packages ENV`` it will *not*
|
If you build with ``virtualenv --system-site-packages ENV``, your virtual
|
||||||
inherit any packages from ``/usr/lib/python2.5/site-packages`` (or
|
environment will inherit packages from ``/usr/lib/python2.7/site-packages``
|
||||||
wherever your global site-packages directory is). This can be used if
|
(or wherever your global site-packages directory is).
|
||||||
you don't have control over site-packages and don't want to depend on
|
|
||||||
the packages there, or you just want more isolation from the global
|
This can be used if you have control over the global site-packages directory,
|
||||||
system.
|
and you want to depend on the packages there. If you want isolation from the
|
||||||
|
global system, do not use this flag.
|
||||||
|
|
||||||
Using Virtualenv without ``bin/python``
|
Using Virtualenv without ``bin/python``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -231,11 +295,12 @@ Description:
|
|||||||
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
This will change ``sys.path`` and even change ``sys.prefix``, but also allow
|
||||||
you to use an existing interpreter. Items in your environment will show up
|
you to use an existing interpreter. Items in your environment will show up
|
||||||
first on ``sys.path``, before global items. However, global items will
|
first on ``sys.path``, before global items. However, global items will
|
||||||
always be accessible -- this technique does not support the
|
always be accessible (as if the ``--system-site-packages`` flag had been used
|
||||||
``--no-site-packages`` flag. Also, this cannot undo the activation of other
|
in creating the environment, whether it was or not). Also, this cannot undo
|
||||||
environments, or modules that have been imported. You shouldn't try to, for
|
the activation of other environments, or modules that have been imported.
|
||||||
instance, activate an environment before a web request; you should activate
|
You shouldn't try to, for instance, activate an environment before a web
|
||||||
*one* environment as early as possible, and not do it again in that process.
|
request; you should activate *one* environment as early as possible, and not
|
||||||
|
do it again in that process.
|
||||||
|
|
||||||
Making Environments Relocatable
|
Making Environments Relocatable
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -272,8 +337,8 @@ Description:
|
|||||||
different (either different versions, or a different filesystem
|
different (either different versions, or a different filesystem
|
||||||
layout).
|
layout).
|
||||||
|
|
||||||
Currently the ``--no-site-packages`` option will not be honored if you
|
If you use this flag to create an environment, currently, the
|
||||||
use this on an environment.
|
``--system-site-packages`` option will be implied.
|
||||||
|
|
||||||
The ``--extra-search-dir`` Option
|
The ``--extra-search-dir`` Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -419,10 +484,24 @@ Description:
|
|||||||
Changes & News
|
Changes & News
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Next release (1.7) schedule
|
1.7 (2011-11-30)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Beta release mid-July 2011, final release early August.
|
* Updated embedded Distribute release to 0.6.24. Thanks Alex Grönholm.
|
||||||
|
|
||||||
|
* Made ``--no-site-packages`` behavior the default behavior. The
|
||||||
|
``--no-site-packages`` flag is still permitted, but displays a warning when
|
||||||
|
used. Thanks Chris McDonough.
|
||||||
|
|
||||||
|
* New flag: ``--system-site-packages``; this flag should be passed to get the
|
||||||
|
previous default global-site-package-including behavior back.
|
||||||
|
|
||||||
|
* Added ability to set command options as environment variables and options
|
||||||
|
in a ``virtualenv.ini`` file.
|
||||||
|
|
||||||
|
* Fixed various encoding related issues with paths. Thanks Gunnlaugur Thor Briem.
|
||||||
|
|
||||||
|
* Made ``virtualenv.py`` script executable.
|
||||||
|
|
||||||
1.6.4 (2011-07-21)
|
1.6.4 (2011-07-21)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
+18
-1
@@ -1,11 +1,22 @@
|
|||||||
AUTHORS.txt
|
AUTHORS.txt
|
||||||
|
HACKING
|
||||||
LICENSE.txt
|
LICENSE.txt
|
||||||
MANIFEST.in
|
MANIFEST.in
|
||||||
setup.py
|
setup.py
|
||||||
virtualenv.py
|
virtualenv.py
|
||||||
|
bin/rebuild-script.py
|
||||||
|
bin/refresh-support-files.py
|
||||||
|
docs/Makefile
|
||||||
|
docs/conf.py
|
||||||
docs/index.txt
|
docs/index.txt
|
||||||
|
docs/make.bat
|
||||||
docs/news.txt
|
docs/news.txt
|
||||||
|
docs/_theme/nature/theme.conf
|
||||||
|
docs/_theme/nature/static/nature.css_t
|
||||||
|
docs/_theme/nature/static/pygments.css
|
||||||
scripts/virtualenv
|
scripts/virtualenv
|
||||||
|
tests/__init__.py
|
||||||
|
tests/test_virtualenv.py
|
||||||
virtualenv.egg-info/PKG-INFO
|
virtualenv.egg-info/PKG-INFO
|
||||||
virtualenv.egg-info/SOURCES.txt
|
virtualenv.egg-info/SOURCES.txt
|
||||||
virtualenv.egg-info/dependency_links.txt
|
virtualenv.egg-info/dependency_links.txt
|
||||||
@@ -13,7 +24,13 @@ virtualenv.egg-info/entry_points.txt
|
|||||||
virtualenv.egg-info/not-zip-safe
|
virtualenv.egg-info/not-zip-safe
|
||||||
virtualenv.egg-info/top_level.txt
|
virtualenv.egg-info/top_level.txt
|
||||||
virtualenv_support/__init__.py
|
virtualenv_support/__init__.py
|
||||||
virtualenv_support/distribute-0.6.19.tar.gz
|
virtualenv_support/activate.bat
|
||||||
|
virtualenv_support/activate.csh
|
||||||
|
virtualenv_support/activate.fish
|
||||||
|
virtualenv_support/activate.sh
|
||||||
|
virtualenv_support/deactivate.bat
|
||||||
|
virtualenv_support/distribute-0.6.24.tar.gz
|
||||||
|
virtualenv_support/distutils.cfg
|
||||||
virtualenv_support/pip-1.0.2.tar.gz
|
virtualenv_support/pip-1.0.2.tar.gz
|
||||||
virtualenv_support/setuptools-0.6c11-py2.4.egg
|
virtualenv_support/setuptools-0.6c11-py2.4.egg
|
||||||
virtualenv_support/setuptools-0.6c11-py2.5.egg
|
virtualenv_support/setuptools-0.6c11-py2.5.egg
|
||||||
Regular → Executable
+277
-131
@@ -2,9 +2,9 @@
|
|||||||
"""Create a "virtual" Python installation
|
"""Create a "virtual" Python installation
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# If you change the version here, change it in setup.py
|
# If you change the version here, change it in setup.py
|
||||||
# and docs/conf.py as well.
|
# and docs/conf.py as well.
|
||||||
virtualenv_version = "1.6.4"
|
virtualenv_version = "1.7"
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import sys
|
import sys
|
||||||
@@ -17,6 +17,8 @@ import tempfile
|
|||||||
import zlib
|
import zlib
|
||||||
import errno
|
import errno
|
||||||
import distutils.sysconfig
|
import distutils.sysconfig
|
||||||
|
from distutils.util import strtobool
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import subprocess
|
import subprocess
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@@ -36,6 +38,11 @@ try:
|
|||||||
except NameError:
|
except NameError:
|
||||||
basestring = str
|
basestring = str
|
||||||
|
|
||||||
|
try:
|
||||||
|
import ConfigParser
|
||||||
|
except ImportError:
|
||||||
|
import configparser as ConfigParser
|
||||||
|
|
||||||
join = os.path.join
|
join = os.path.join
|
||||||
py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
|
py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
|
||||||
|
|
||||||
@@ -44,6 +51,14 @@ is_pypy = hasattr(sys, 'pypy_version_info')
|
|||||||
is_win = (sys.platform == 'win32')
|
is_win = (sys.platform == 'win32')
|
||||||
abiflags = getattr(sys, 'abiflags', '')
|
abiflags = getattr(sys, 'abiflags', '')
|
||||||
|
|
||||||
|
user_dir = os.path.expanduser('~')
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
user_dir = os.environ.get('APPDATA', user_dir) # Use %APPDATA% for roaming
|
||||||
|
default_storage_dir = os.path.join(user_dir, 'virtualenv')
|
||||||
|
else:
|
||||||
|
default_storage_dir = os.path.join(user_dir, '.virtualenv')
|
||||||
|
default_config_file = os.path.join(default_storage_dir, 'virtualenv.ini')
|
||||||
|
|
||||||
if is_pypy:
|
if is_pypy:
|
||||||
expected_exe = 'pypy'
|
expected_exe = 'pypy'
|
||||||
elif is_jython:
|
elif is_jython:
|
||||||
@@ -472,35 +487,10 @@ def _install_req(py_executable, unzip=False, distribute=False,
|
|||||||
source = None
|
source = None
|
||||||
else:
|
else:
|
||||||
setup_fn = None
|
setup_fn = None
|
||||||
source = 'distribute-0.6.19.tar.gz'
|
source = 'distribute-0.6.24.tar.gz'
|
||||||
project_name = 'distribute'
|
project_name = 'distribute'
|
||||||
bootstrap_script = DISTRIBUTE_SETUP_PY
|
bootstrap_script = DISTRIBUTE_SETUP_PY
|
||||||
|
|
||||||
# If we are running under -p, we need to remove the current
|
|
||||||
# directory from sys.path temporarily here, so that we
|
|
||||||
# definitely get the pkg_resources from the site directory of
|
|
||||||
# the interpreter we are running under, not the one
|
|
||||||
# virtualenv.py is installed under (which might lead to py2/py3
|
|
||||||
# incompatibility issues)
|
|
||||||
_prev_sys_path = sys.path
|
|
||||||
if os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
|
|
||||||
sys.path = sys.path[1:]
|
|
||||||
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
# check if the global Python has distribute installed or plain
|
|
||||||
# setuptools
|
|
||||||
import pkg_resources
|
|
||||||
if not hasattr(pkg_resources, '_distribute'):
|
|
||||||
location = os.path.dirname(pkg_resources.__file__)
|
|
||||||
logger.notify("A globally installed setuptools was found (in %s)" % location)
|
|
||||||
logger.notify("Use the --no-site-packages option to use distribute in "
|
|
||||||
"the virtualenv.")
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
sys.path = _prev_sys_path
|
|
||||||
|
|
||||||
if setup_fn is not None:
|
if setup_fn is not None:
|
||||||
setup_fn = _find_file(setup_fn, search_dirs)
|
setup_fn = _find_file(setup_fn, search_dirs)
|
||||||
|
|
||||||
@@ -546,7 +536,7 @@ def _install_req(py_executable, unzip=False, distribute=False,
|
|||||||
"and --never-download is set. Either re-run virtualenv "
|
"and --never-download is set. Either re-run virtualenv "
|
||||||
"without the --never-download option, or place a %s "
|
"without the --never-download option, or place a %s "
|
||||||
"distribution (%s) in one of these "
|
"distribution (%s) in one of these "
|
||||||
"locations: %r" % (project_name, project_name,
|
"locations: %r" % (project_name, project_name,
|
||||||
setup_fn or source,
|
setup_fn or source,
|
||||||
search_dirs))
|
search_dirs))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@@ -599,16 +589,16 @@ def file_search_dirs():
|
|||||||
|
|
||||||
def install_setuptools(py_executable, unzip=False,
|
def install_setuptools(py_executable, unzip=False,
|
||||||
search_dirs=None, never_download=False):
|
search_dirs=None, never_download=False):
|
||||||
_install_req(py_executable, unzip,
|
_install_req(py_executable, unzip,
|
||||||
search_dirs=search_dirs, never_download=never_download)
|
search_dirs=search_dirs, never_download=never_download)
|
||||||
|
|
||||||
def install_distribute(py_executable, unzip=False,
|
def install_distribute(py_executable, unzip=False,
|
||||||
search_dirs=None, never_download=False):
|
search_dirs=None, never_download=False):
|
||||||
_install_req(py_executable, unzip, distribute=True,
|
_install_req(py_executable, unzip, distribute=True,
|
||||||
search_dirs=search_dirs, never_download=never_download)
|
search_dirs=search_dirs, never_download=never_download)
|
||||||
|
|
||||||
_pip_re = re.compile(r'^pip-.*(zip|tar.gz|tar.bz2|tgz|tbz)$', re.I)
|
_pip_re = re.compile(r'^pip-.*(zip|tar.gz|tar.bz2|tgz|tbz)$', re.I)
|
||||||
def install_pip(py_executable, search_dirs=None, never_download=False):
|
def install_pip(py_executable, search_dirs=None, never_download=False):
|
||||||
if search_dirs is None:
|
if search_dirs is None:
|
||||||
search_dirs = file_search_dirs()
|
search_dirs = file_search_dirs()
|
||||||
|
|
||||||
@@ -626,7 +616,9 @@ def install_pip(py_executable, search_dirs=None, never_download=False):
|
|||||||
easy_install_script = 'easy_install'
|
easy_install_script = 'easy_install'
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
easy_install_script = 'easy_install-script.py'
|
easy_install_script = 'easy_install-script.py'
|
||||||
cmd = [py_executable, join(os.path.dirname(py_executable), easy_install_script), filename]
|
cmd = [join(os.path.dirname(py_executable), easy_install_script), filename]
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
cmd.insert(0, py_executable)
|
||||||
if filename == 'pip':
|
if filename == 'pip':
|
||||||
if never_download:
|
if never_download:
|
||||||
logger.fatal("Can't find any local distributions of pip to install "
|
logger.fatal("Can't find any local distributions of pip to install "
|
||||||
@@ -669,10 +661,113 @@ def filter_ez_setup(line, project_name='setuptools'):
|
|||||||
return Logger.DEBUG
|
return Logger.DEBUG
|
||||||
return Logger.INFO
|
return Logger.INFO
|
||||||
|
|
||||||
|
|
||||||
|
class UpdatingDefaultsHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
|
"""
|
||||||
|
Custom help formatter for use in ConfigOptionParser that updates
|
||||||
|
the defaults before expanding them, allowing them to show up correctly
|
||||||
|
in the help listing
|
||||||
|
"""
|
||||||
|
def expand_default(self, option):
|
||||||
|
if self.parser is not None:
|
||||||
|
self.parser.update_defaults(self.parser.defaults)
|
||||||
|
return optparse.IndentedHelpFormatter.expand_default(self, option)
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigOptionParser(optparse.OptionParser):
|
||||||
|
"""
|
||||||
|
Custom option parser which updates its defaults by by checking the
|
||||||
|
configuration files and environmental variables
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.config = ConfigParser.RawConfigParser()
|
||||||
|
self.files = self.get_config_files()
|
||||||
|
self.config.read(self.files)
|
||||||
|
optparse.OptionParser.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_config_files(self):
|
||||||
|
config_file = os.environ.get('VIRTUALENV_CONFIG_FILE', False)
|
||||||
|
if config_file and os.path.exists(config_file):
|
||||||
|
return [config_file]
|
||||||
|
return [default_config_file]
|
||||||
|
|
||||||
|
def update_defaults(self, defaults):
|
||||||
|
"""
|
||||||
|
Updates the given defaults with values from the config files and
|
||||||
|
the environ. Does a little special handling for certain types of
|
||||||
|
options (lists).
|
||||||
|
"""
|
||||||
|
# Then go and look for the other sources of configuration:
|
||||||
|
config = {}
|
||||||
|
# 1. config files
|
||||||
|
config.update(dict(self.get_config_section('virtualenv')))
|
||||||
|
# 2. environmental variables
|
||||||
|
config.update(dict(self.get_environ_vars()))
|
||||||
|
# Then set the options with those values
|
||||||
|
for key, val in config.items():
|
||||||
|
key = key.replace('_', '-')
|
||||||
|
if not key.startswith('--'):
|
||||||
|
key = '--%s' % key # only prefer long opts
|
||||||
|
option = self.get_option(key)
|
||||||
|
if option is not None:
|
||||||
|
# ignore empty values
|
||||||
|
if not val:
|
||||||
|
continue
|
||||||
|
# handle multiline configs
|
||||||
|
if option.action == 'append':
|
||||||
|
val = val.split()
|
||||||
|
else:
|
||||||
|
option.nargs = 1
|
||||||
|
if option.action in ('store_true', 'store_false', 'count'):
|
||||||
|
val = strtobool(val)
|
||||||
|
try:
|
||||||
|
val = option.convert_value(key, val)
|
||||||
|
except optparse.OptionValueError:
|
||||||
|
e = sys.exc_info()[1]
|
||||||
|
print("An error occured during configuration: %s" % e)
|
||||||
|
sys.exit(3)
|
||||||
|
defaults[option.dest] = val
|
||||||
|
return defaults
|
||||||
|
|
||||||
|
def get_config_section(self, name):
|
||||||
|
"""
|
||||||
|
Get a section of a configuration
|
||||||
|
"""
|
||||||
|
if self.config.has_section(name):
|
||||||
|
return self.config.items(name)
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_environ_vars(self, prefix='VIRTUALENV_'):
|
||||||
|
"""
|
||||||
|
Returns a generator with all environmental vars with prefix VIRTUALENV
|
||||||
|
"""
|
||||||
|
for key, val in os.environ.items():
|
||||||
|
if key.startswith(prefix):
|
||||||
|
yield (key.replace(prefix, '').lower(), val)
|
||||||
|
|
||||||
|
def get_default_values(self):
|
||||||
|
"""
|
||||||
|
Overridding to make updating the defaults after instantiation of
|
||||||
|
the option parser possible, update_defaults() does the dirty work.
|
||||||
|
"""
|
||||||
|
if not self.process_default_values:
|
||||||
|
# Old, pre-Optik 1.5 behaviour.
|
||||||
|
return optparse.Values(self.defaults)
|
||||||
|
|
||||||
|
defaults = self.update_defaults(self.defaults.copy()) # ours
|
||||||
|
for option in self._get_all_options():
|
||||||
|
default = defaults.get(option.dest)
|
||||||
|
if isinstance(default, basestring):
|
||||||
|
opt_str = option.get_opt_string()
|
||||||
|
defaults[option.dest] = option.check_value(opt_str, default)
|
||||||
|
return optparse.Values(defaults)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = optparse.OptionParser(
|
parser = ConfigOptionParser(
|
||||||
version=virtualenv_version,
|
version=virtualenv_version,
|
||||||
usage="%prog [OPTIONS] DEST_DIR")
|
usage="%prog [OPTIONS] DEST_DIR",
|
||||||
|
formatter=UpdatingDefaultsHelpFormatter())
|
||||||
|
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'-v', '--verbose',
|
'-v', '--verbose',
|
||||||
@@ -709,6 +804,13 @@ def main():
|
|||||||
help="Don't give access to the global site-packages dir to the "
|
help="Don't give access to the global site-packages dir to the "
|
||||||
"virtual environment")
|
"virtual environment")
|
||||||
|
|
||||||
|
parser.add_option(
|
||||||
|
'--system-site-packages',
|
||||||
|
dest='system_site_packages',
|
||||||
|
action='store_true',
|
||||||
|
help="Give access to the global site-packages dir to the "
|
||||||
|
"virtual environment")
|
||||||
|
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'--unzip-setuptools',
|
'--unzip-setuptools',
|
||||||
dest='unzip_setuptools',
|
dest='unzip_setuptools',
|
||||||
@@ -727,7 +829,7 @@ def main():
|
|||||||
dest='use_distribute',
|
dest='use_distribute',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='Use Distribute instead of Setuptools. Set environ variable '
|
help='Use Distribute instead of Setuptools. Set environ variable '
|
||||||
'VIRTUALENV_USE_DISTRIBUTE to make it the default ')
|
'VIRTUALENV_DISTRIBUTE to make it the default ')
|
||||||
|
|
||||||
default_search_dirs = file_search_dirs()
|
default_search_dirs = file_search_dirs()
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
@@ -777,6 +879,16 @@ def main():
|
|||||||
popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
|
popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
|
||||||
raise SystemExit(popen.wait())
|
raise SystemExit(popen.wait())
|
||||||
|
|
||||||
|
# Force --use-distribute on Python 3, since setuptools is not available.
|
||||||
|
if majver > 2:
|
||||||
|
options.use_distribute = True
|
||||||
|
|
||||||
|
if os.environ.get('PYTHONDONTWRITEBYTECODE') and not options.use_distribute:
|
||||||
|
print(
|
||||||
|
"The PYTHONDONTWRITEBYTECODE environment variable is "
|
||||||
|
"not compatible with setuptools. Either use --distribute "
|
||||||
|
"or unset PYTHONDONTWRITEBYTECODE.")
|
||||||
|
sys.exit(2)
|
||||||
if not args:
|
if not args:
|
||||||
print('You must provide a DEST_DIR')
|
print('You must provide a DEST_DIR')
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
@@ -802,9 +914,15 @@ def main():
|
|||||||
make_environment_relocatable(home_dir)
|
make_environment_relocatable(home_dir)
|
||||||
return
|
return
|
||||||
|
|
||||||
create_environment(home_dir, site_packages=not options.no_site_packages, clear=options.clear,
|
if options.no_site_packages:
|
||||||
|
logger.warn('The --no-site-packages flag is deprecated; it is now '
|
||||||
|
'the default behavior.')
|
||||||
|
|
||||||
|
create_environment(home_dir,
|
||||||
|
site_packages=options.system_site_packages,
|
||||||
|
clear=options.clear,
|
||||||
unzip_setuptools=options.unzip_setuptools,
|
unzip_setuptools=options.unzip_setuptools,
|
||||||
use_distribute=options.use_distribute or majver > 2,
|
use_distribute=options.use_distribute,
|
||||||
prompt=options.prompt,
|
prompt=options.prompt,
|
||||||
search_dirs=options.search_dirs,
|
search_dirs=options.search_dirs,
|
||||||
never_download=options.never_download)
|
never_download=options.never_download)
|
||||||
@@ -821,6 +939,11 @@ def call_subprocess(cmd, show_stdout=True,
|
|||||||
part = part[:20]+"..."+part[-20:]
|
part = part[:20]+"..."+part[-20:]
|
||||||
if ' ' in part or '\n' in part or '"' in part or "'" in part:
|
if ' ' in part or '\n' in part or '"' in part or "'" in part:
|
||||||
part = '"%s"' % part.replace('"', '\\"')
|
part = '"%s"' % part.replace('"', '\\"')
|
||||||
|
if hasattr(part, 'decode'):
|
||||||
|
try:
|
||||||
|
part = part.decode(sys.getdefaultencoding())
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
part = part.decode(sys.getfilesystemencoding())
|
||||||
cmd_parts.append(part)
|
cmd_parts.append(part)
|
||||||
cmd_desc = ' '.join(cmd_parts)
|
cmd_desc = ' '.join(cmd_parts)
|
||||||
if show_stdout:
|
if show_stdout:
|
||||||
@@ -850,8 +973,13 @@ def call_subprocess(cmd, show_stdout=True,
|
|||||||
if stdout is not None:
|
if stdout is not None:
|
||||||
stdout = proc.stdout
|
stdout = proc.stdout
|
||||||
encoding = sys.getdefaultencoding()
|
encoding = sys.getdefaultencoding()
|
||||||
|
fs_encoding = sys.getfilesystemencoding()
|
||||||
while 1:
|
while 1:
|
||||||
line = stdout.readline().decode(encoding)
|
line = stdout.readline()
|
||||||
|
try:
|
||||||
|
line = line.decode(encoding)
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
line = line.decode(fs_encoding)
|
||||||
if not line:
|
if not line:
|
||||||
break
|
break
|
||||||
line = line.rstrip()
|
line = line.rstrip()
|
||||||
@@ -882,14 +1010,14 @@ def call_subprocess(cmd, show_stdout=True,
|
|||||||
% (cmd_desc, proc.returncode))
|
% (cmd_desc, proc.returncode))
|
||||||
|
|
||||||
|
|
||||||
def create_environment(home_dir, site_packages=True, clear=False,
|
def create_environment(home_dir, site_packages=False, clear=False,
|
||||||
unzip_setuptools=False, use_distribute=False,
|
unzip_setuptools=False, use_distribute=False,
|
||||||
prompt=None, search_dirs=None, never_download=False):
|
prompt=None, search_dirs=None, never_download=False):
|
||||||
"""
|
"""
|
||||||
Creates a new environment in ``home_dir``.
|
Creates a new environment in ``home_dir``.
|
||||||
|
|
||||||
If ``site_packages`` is true (the default) then the global
|
If ``site_packages`` is true, then the global ``site-packages/``
|
||||||
``site-packages/`` directory will be on the path.
|
directory will be on the path.
|
||||||
|
|
||||||
If ``clear`` is true (default False) then the environment will
|
If ``clear`` is true (default False) then the environment will
|
||||||
first be cleared.
|
first be cleared.
|
||||||
@@ -902,11 +1030,13 @@ def create_environment(home_dir, site_packages=True, clear=False,
|
|||||||
|
|
||||||
install_distutils(home_dir)
|
install_distutils(home_dir)
|
||||||
|
|
||||||
|
# use_distribute also is True if VIRTUALENV_DISTRIBUTE env var is set
|
||||||
|
# we also check VIRTUALENV_USE_DISTRIBUTE for backwards compatibility
|
||||||
if use_distribute or os.environ.get('VIRTUALENV_USE_DISTRIBUTE'):
|
if use_distribute or os.environ.get('VIRTUALENV_USE_DISTRIBUTE'):
|
||||||
install_distribute(py_executable, unzip=unzip_setuptools,
|
install_distribute(py_executable, unzip=unzip_setuptools,
|
||||||
search_dirs=search_dirs, never_download=never_download)
|
search_dirs=search_dirs, never_download=never_download)
|
||||||
else:
|
else:
|
||||||
install_setuptools(py_executable, unzip=unzip_setuptools,
|
install_setuptools(py_executable, unzip=unzip_setuptools,
|
||||||
search_dirs=search_dirs, never_download=never_download)
|
search_dirs=search_dirs, never_download=never_download)
|
||||||
|
|
||||||
install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
|
install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
|
||||||
@@ -1191,7 +1321,17 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear):
|
|||||||
# argument that has a space in it. Instead we have to quote
|
# argument that has a space in it. Instead we have to quote
|
||||||
# the value:
|
# the value:
|
||||||
py_executable = '"%s"' % py_executable
|
py_executable = '"%s"' % py_executable
|
||||||
cmd = [py_executable, '-c', 'import sys; print(sys.prefix)']
|
cmd = [py_executable, '-c', """
|
||||||
|
import sys
|
||||||
|
prefix = sys.prefix
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
prefix = prefix.encode('utf8')
|
||||||
|
if hasattr(sys.stdout, 'detach'):
|
||||||
|
sys.stdout = sys.stdout.detach()
|
||||||
|
elif hasattr(sys.stdout, 'buffer'):
|
||||||
|
sys.stdout = sys.stdout.buffer
|
||||||
|
sys.stdout.write(prefix)
|
||||||
|
"""]
|
||||||
logger.info('Testing executable with %s %s "%s"' % tuple(cmd))
|
logger.info('Testing executable with %s %s "%s"' % tuple(cmd))
|
||||||
try:
|
try:
|
||||||
proc = subprocess.Popen(cmd,
|
proc = subprocess.Popen(cmd,
|
||||||
@@ -1205,14 +1345,17 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear):
|
|||||||
else:
|
else:
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
proc_stdout = proc_stdout.strip().decode(sys.getdefaultencoding())
|
proc_stdout = proc_stdout.strip().decode("utf-8")
|
||||||
proc_stdout = os.path.normcase(os.path.abspath(proc_stdout))
|
proc_stdout = os.path.normcase(os.path.abspath(proc_stdout))
|
||||||
if proc_stdout != os.path.normcase(os.path.abspath(home_dir)):
|
norm_home_dir = os.path.normcase(os.path.abspath(home_dir))
|
||||||
|
if hasattr(norm_home_dir, 'decode'):
|
||||||
|
norm_home_dir = norm_home_dir.decode(sys.getfilesystemencoding())
|
||||||
|
if proc_stdout != norm_home_dir:
|
||||||
logger.fatal(
|
logger.fatal(
|
||||||
'ERROR: The executable %s is not functioning' % py_executable)
|
'ERROR: The executable %s is not functioning' % py_executable)
|
||||||
logger.fatal(
|
logger.fatal(
|
||||||
'ERROR: It thinks sys.prefix is %r (should be %r)'
|
'ERROR: It thinks sys.prefix is %r (should be %r)'
|
||||||
% (proc_stdout, os.path.normcase(os.path.abspath(home_dir))))
|
% (proc_stdout, norm_home_dir))
|
||||||
logger.fatal(
|
logger.fatal(
|
||||||
'ERROR: virtualenv is not compatible with this system or executable')
|
'ERROR: virtualenv is not compatible with this system or executable')
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
@@ -1248,11 +1391,14 @@ def install_activate(home_dir, bin_dir, prompt=None):
|
|||||||
|
|
||||||
|
|
||||||
files['activate_this.py'] = ACTIVATE_THIS
|
files['activate_this.py'] = ACTIVATE_THIS
|
||||||
vname = os.path.basename(os.path.abspath(home_dir))
|
home_dir = os.path.abspath(home_dir)
|
||||||
|
if hasattr(home_dir, 'decode'):
|
||||||
|
home_dir = home_dir.decode(sys.getfilesystemencoding())
|
||||||
|
vname = os.path.basename(home_dir)
|
||||||
for name, content in files.items():
|
for name, content in files.items():
|
||||||
content = content.replace('__VIRTUAL_PROMPT__', prompt or '')
|
content = content.replace('__VIRTUAL_PROMPT__', prompt or '')
|
||||||
content = content.replace('__VIRTUAL_WINPROMPT__', prompt or '(%s)' % vname)
|
content = content.replace('__VIRTUAL_WINPROMPT__', prompt or '(%s)' % vname)
|
||||||
content = content.replace('__VIRTUAL_ENV__', os.path.abspath(home_dir))
|
content = content.replace('__VIRTUAL_ENV__', home_dir)
|
||||||
content = content.replace('__VIRTUAL_NAME__', vname)
|
content = content.replace('__VIRTUAL_NAME__', vname)
|
||||||
content = content.replace('__BIN_NAME__', os.path.basename(bin_dir))
|
content = content.replace('__BIN_NAME__', os.path.basename(bin_dir))
|
||||||
writefile(os.path.join(bin_dir, name), content)
|
writefile(os.path.join(bin_dir, name), content)
|
||||||
@@ -1539,7 +1685,7 @@ def create_bootstrap_script(extra_text, python_version=''):
|
|||||||
def convert(s):
|
def convert(s):
|
||||||
b = base64.b64decode(s.encode('ascii'))
|
b = base64.b64decode(s.encode('ascii'))
|
||||||
return zlib.decompress(b).decode('utf-8')
|
return zlib.decompress(b).decode('utf-8')
|
||||||
|
|
||||||
##file site.py
|
##file site.py
|
||||||
SITE_PY = convert("""
|
SITE_PY = convert("""
|
||||||
eJzVPP1z2zaWv/OvwMqTIZXKdD66nR2n7o2TOK3v3MTbpLO5dT06SoIk1hTJEqQV7c3d337vAwAB
|
eJzVPP1z2zaWv/OvwMqTIZXKdD66nR2n7o2TOK3v3MTbpLO5dT06SoIk1hTJEqQV7c3d337vAwAB
|
||||||
@@ -1752,85 +1898,85 @@ BDaonX65d/fwEjNqlDjLVIvM9X+XVxF7
|
|||||||
|
|
||||||
##file distribute_setup.py
|
##file distribute_setup.py
|
||||||
DISTRIBUTE_SETUP_PY = convert("""
|
DISTRIBUTE_SETUP_PY = convert("""
|
||||||
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
|
||||||
""")
|
""")
|
||||||
|
|
||||||
##file activate.sh
|
##file activate.sh
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
@echo off
|
||||||
|
set VIRTUAL_ENV=__VIRTUAL_ENV__
|
||||||
|
|
||||||
|
if not defined PROMPT (
|
||||||
|
set PROMPT=$P$G
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PROMPT (
|
||||||
|
set PROMPT=%_OLD_VIRTUAL_PROMPT%
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PYTHONHOME (
|
||||||
|
set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
|
||||||
|
)
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PROMPT=%PROMPT%
|
||||||
|
set PROMPT=__VIRTUAL_WINPROMPT__ %PROMPT%
|
||||||
|
|
||||||
|
if defined PYTHONHOME (
|
||||||
|
set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
|
||||||
|
set PYTHONHOME=
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%; goto SKIPPATH
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH=%PATH%
|
||||||
|
|
||||||
|
:SKIPPATH
|
||||||
|
set PATH=%VIRTUAL_ENV%\__BIN_NAME__;%PATH%
|
||||||
|
|
||||||
|
:END
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# This file must be used with "source bin/activate.csh" *from csh*.
|
||||||
|
# You cannot run it directly.
|
||||||
|
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
||||||
|
|
||||||
|
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
|
||||||
|
|
||||||
|
# Unset irrelavent variables.
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
setenv VIRTUAL_ENV "__VIRTUAL_ENV__"
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH="$PATH"
|
||||||
|
setenv PATH "$VIRTUAL_ENV/__BIN_NAME__:$PATH"
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PROMPT="$prompt"
|
||||||
|
|
||||||
|
if ("__VIRTUAL_PROMPT__" != "") then
|
||||||
|
set env_name = "__VIRTUAL_PROMPT__"
|
||||||
|
else
|
||||||
|
if (`basename "$VIRTUAL_ENV"` == "__") then
|
||||||
|
# special case for Aspen magic directories
|
||||||
|
# see http://www.zetadev.com/software/aspen/
|
||||||
|
set env_name = `basename \`dirname "$VIRTUAL_ENV"\``
|
||||||
|
else
|
||||||
|
set env_name = `basename "$VIRTUAL_ENV"`
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
set prompt = "[$env_name] $prompt"
|
||||||
|
unset env_name
|
||||||
|
|
||||||
|
rehash
|
||||||
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org)
|
||||||
|
# you cannot run it directly
|
||||||
|
|
||||||
|
function deactivate -d "Exit virtualenv and return to normal shell environment"
|
||||||
|
# reset old environment variables
|
||||||
|
if test -n "$_OLD_VIRTUAL_PATH"
|
||||||
|
set -gx PATH $_OLD_VIRTUAL_PATH
|
||||||
|
set -e _OLD_VIRTUAL_PATH
|
||||||
|
end
|
||||||
|
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
||||||
|
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
||||||
|
set -e _OLD_VIRTUAL_PYTHONHOME
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
||||||
|
functions -e fish_prompt
|
||||||
|
set -e _OLD_FISH_PROMPT_OVERRIDE
|
||||||
|
end
|
||||||
|
|
||||||
|
set -e VIRTUAL_ENV
|
||||||
|
if test "$argv[1]" != "nondestructive"
|
||||||
|
# Self destruct!
|
||||||
|
functions -e deactivate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# unset irrelavent variables
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
set -gx VIRTUAL_ENV "__VIRTUAL_ENV__"
|
||||||
|
|
||||||
|
set -gx _OLD_VIRTUAL_PATH $PATH
|
||||||
|
set -gx PATH "$VIRTUAL_ENV/__BIN_NAME__" $PATH
|
||||||
|
|
||||||
|
# unset PYTHONHOME if set
|
||||||
|
if set -q PYTHONHOME
|
||||||
|
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
||||||
|
set -e PYTHONHOME
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
||||||
|
# fish shell uses a function, instead of env vars,
|
||||||
|
# to produce the prompt. Overriding the existing function is easy.
|
||||||
|
# However, adding to the current prompt, instead of clobbering it,
|
||||||
|
# is a little more work.
|
||||||
|
set -l oldpromptfile (tempfile)
|
||||||
|
if test $status
|
||||||
|
# save the current fish_prompt function...
|
||||||
|
echo "function _old_fish_prompt" >> $oldpromptfile
|
||||||
|
echo -n \# >> $oldpromptfile
|
||||||
|
functions fish_prompt >> $oldpromptfile
|
||||||
|
# we've made the "_old_fish_prompt" file, source it.
|
||||||
|
. $oldpromptfile
|
||||||
|
rm -f $oldpromptfile
|
||||||
|
|
||||||
|
if test -n "__VIRTUAL_PROMPT__"
|
||||||
|
# We've been given us a prompt override.
|
||||||
|
#
|
||||||
|
# FIXME: Unsure how to handle this *safely*. We could just eval()
|
||||||
|
# whatever is given, but the risk is a bit much.
|
||||||
|
echo "activate.fish: Alternative prompt prefix is not supported under fish-shell." 1>&2
|
||||||
|
echo "activate.fish: Alter the fish_prompt in this file as needed." 1>&2
|
||||||
|
end
|
||||||
|
|
||||||
|
# with the original prompt function renamed, we can override with our own.
|
||||||
|
function fish_prompt
|
||||||
|
set -l _checkbase (basename "$VIRTUAL_ENV")
|
||||||
|
if test $_checkbase = "__"
|
||||||
|
# special case for Aspen magic directories
|
||||||
|
# see http://www.zetadev.com/software/aspen/
|
||||||
|
printf "%s[%s]%s %s" (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) (_old_fish_prompt)
|
||||||
|
else
|
||||||
|
printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
# This file must be used with "source bin/activate" *from bash*
|
||||||
|
# you cannot run it directly
|
||||||
|
|
||||||
|
deactivate () {
|
||||||
|
# reset old environment variables
|
||||||
|
if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
|
||||||
|
PATH="$_OLD_VIRTUAL_PATH"
|
||||||
|
export PATH
|
||||||
|
unset _OLD_VIRTUAL_PATH
|
||||||
|
fi
|
||||||
|
if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
|
||||||
|
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
|
||||||
|
export PYTHONHOME
|
||||||
|
unset _OLD_VIRTUAL_PYTHONHOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
|
||||||
|
hash -r
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
|
||||||
|
PS1="$_OLD_VIRTUAL_PS1"
|
||||||
|
export PS1
|
||||||
|
unset _OLD_VIRTUAL_PS1
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset VIRTUAL_ENV
|
||||||
|
if [ ! "$1" = "nondestructive" ] ; then
|
||||||
|
# Self destruct!
|
||||||
|
unset -f deactivate
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# unset irrelavent variables
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
VIRTUAL_ENV="__VIRTUAL_ENV__"
|
||||||
|
export VIRTUAL_ENV
|
||||||
|
|
||||||
|
_OLD_VIRTUAL_PATH="$PATH"
|
||||||
|
PATH="$VIRTUAL_ENV/__BIN_NAME__:$PATH"
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
# unset PYTHONHOME if set
|
||||||
|
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
||||||
|
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
||||||
|
if [ -n "$PYTHONHOME" ] ; then
|
||||||
|
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
|
||||||
|
unset PYTHONHOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then
|
||||||
|
_OLD_VIRTUAL_PS1="$PS1"
|
||||||
|
if [ "x__VIRTUAL_PROMPT__" != x ] ; then
|
||||||
|
PS1="__VIRTUAL_PROMPT__$PS1"
|
||||||
|
else
|
||||||
|
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
|
||||||
|
# special case for Aspen magic directories
|
||||||
|
# see http://www.zetadev.com/software/aspen/
|
||||||
|
PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
|
||||||
|
else
|
||||||
|
PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
export PS1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
|
||||||
|
hash -r
|
||||||
|
fi
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PROMPT (
|
||||||
|
set PROMPT=%_OLD_VIRTUAL_PROMPT%
|
||||||
|
)
|
||||||
|
set _OLD_VIRTUAL_PROMPT=
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PYTHONHOME (
|
||||||
|
set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
|
||||||
|
set _OLD_VIRTUAL_PYTHONHOME=
|
||||||
|
)
|
||||||
|
|
||||||
|
if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH=
|
||||||
|
|
||||||
|
:END
|
||||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
|||||||
|
# This is a config file local to this virtualenv installation
|
||||||
|
# You may include options that will be used by all distutils commands,
|
||||||
|
# and by easy_install. For instance:
|
||||||
|
#
|
||||||
|
# [easy_install]
|
||||||
|
# find_links = http://mylocalsite
|
||||||
Binary file not shown.
Reference in New Issue
Block a user