mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ec8f12648 | |||
| 731a0cb0bf | |||
| ebd97e9b93 | |||
| 9fcf81c170 | |||
| 1f2cb16dbb | |||
| 827306728f | |||
| f6076cb7f0 | |||
| 694386e233 | |||
| f11928af11 | |||
| acda8f640a | |||
| 4ff3a5d818 | |||
| 314b729c8a | |||
| 9fb676aba9 | |||
| b91741d10d | |||
| f3787356b6 | |||
| def3136c85 | |||
| abb0c9b384 | |||
| 87b2891c1a | |||
| 52c34ef64f | |||
| 40bc836a55 | |||
| d2738ece19 | |||
| f758a5d738 | |||
| 63edc5d89b | |||
| 0db1584f21 | |||
| 1ed173f21d | |||
| b17f3f51f7 | |||
| 4f0556cce7 | |||
| b55a5e5ec8 | |||
| 68acbb064d | |||
| 92df76793f | |||
| 5cda51c7a5 | |||
| 659a406eb8 | |||
| 4cf2dd5b32 | |||
| 100a5ba0bc | |||
| ab16abaa88 | |||
| 989dd1dd2a | |||
| 0468ef22c4 | |||
| 6238994a17 | |||
| 7ba2fe66a0 | |||
| dfaec438d9 | |||
| aaeef59ff6 | |||
| 4d35f5129a | |||
| 84f610347c | |||
| 44bfda1320 | |||
| 330524adba | |||
| 85bddf8f00 | |||
| 7b0d891f4d | |||
| 84f0e2feba | |||
| 76309c35ec | |||
| 3f6b453c0a | |||
| 43dbb49103 | |||
| f08f93f347 | |||
| e0c852f4b9 | |||
| 15373996f4 | |||
| ff1e8da0cb | |||
| 99f7f5b9f1 | |||
| 656f390de8 | |||
| 42a7e79359 | |||
| bf084cc2ac | |||
| eaaba665bc | |||
| 94d311134c | |||
| 0d49ae9851 | |||
| a5c39384a8 | |||
| cb6bc30bc6 | |||
| 82c72a94d9 | |||
| f327afd364 | |||
| d94f4c5bbc | |||
| 8be04ea656 | |||
| de7c16d942 | |||
| 5ea843458a | |||
| 758941d12f | |||
| e01d5bc18b | |||
| 2c16539190 | |||
| ed79e61a2f | |||
| b7bcc69722 | |||
| 3dde375d0b | |||
| 483e30a5ba | |||
| e783556e6b | |||
| 5f96190eb5 | |||
| c579162ef9 | |||
| a5cca6de75 |
@@ -3,7 +3,6 @@ Heroku buildpack: Python
|
|||||||
|
|
||||||
This is a [Heroku buildpack](http://devcenter.heroku.com/articles/buildpacks) for Python apps, powered by [pip](http://www.pip-installer.org/).
|
This is a [Heroku buildpack](http://devcenter.heroku.com/articles/buildpacks) for Python apps, powered by [pip](http://www.pip-installer.org/).
|
||||||
|
|
||||||
[](http://travis-ci.org/heroku/heroku-buildpack-python)
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
@@ -13,23 +12,22 @@ Example usage:
|
|||||||
$ ls
|
$ ls
|
||||||
Procfile requirements.txt web.py
|
Procfile requirements.txt web.py
|
||||||
|
|
||||||
$ heroku create --stack cedar --buildpack git://github.com/heroku/heroku-buildpack-python.git
|
$ heroku create --buildpack git://github.com/heroku/heroku-buildpack-python.git
|
||||||
|
|
||||||
$ git push heroku master
|
$ git push heroku master
|
||||||
...
|
...
|
||||||
-----> Fetching custom git buildpack... done
|
|
||||||
-----> Python app detected
|
-----> Python app detected
|
||||||
-----> No runtime.txt provided; assuming python-2.7.6.
|
-----> No runtime.txt provided; assuming python-2.7.6.
|
||||||
-----> Preparing Python runtime (python-2.7.6)
|
-----> Preparing Python runtime (python-2.7.6)
|
||||||
-----> Installing Setuptools (2.1)
|
-----> Installing Setuptools (3.6)
|
||||||
-----> Installing Pip (1.5.2)
|
-----> Installing Pip (1.5.6)
|
||||||
-----> Installing dependencies using Pip (1.5.2)
|
-----> Installing dependencies using Pip (1.5.6)
|
||||||
Downloading/unpacking Flask==0.7.2 (from -r requirements.txt (line 1))
|
Downloading/unpacking requests (from -r requirements.txt (line 1))
|
||||||
Downloading/unpacking Werkzeug>=0.6.1 (from Flask==0.7.2->-r requirements.txt (line 1))
|
Installing collected packages: requests
|
||||||
Downloading/unpacking Jinja2>=2.4 (from Flask==0.7.2->-r requirements.txt (line 1))
|
Successfully installed requests
|
||||||
Installing collected packages: Flask, Werkzeug, Jinja2
|
|
||||||
Successfully installed Flask Werkzeug Jinja2
|
|
||||||
Cleaning up...
|
Cleaning up...
|
||||||
|
-----> Discovering process types
|
||||||
|
Procfile declares types -> (none)
|
||||||
|
|
||||||
You can also add it to upcoming builds of an existing application:
|
You can also add it to upcoming builds of an existing application:
|
||||||
|
|
||||||
@@ -45,12 +43,12 @@ Specify a Runtime
|
|||||||
You can also provide arbitrary releases Python with a `runtime.txt` file.
|
You can also provide arbitrary releases Python with a `runtime.txt` file.
|
||||||
|
|
||||||
$ cat runtime.txt
|
$ cat runtime.txt
|
||||||
python-3.3.3
|
python-3.4.0
|
||||||
|
|
||||||
Runtime options include:
|
Runtime options include:
|
||||||
|
|
||||||
- python-2.7.6
|
- python-2.7.6
|
||||||
- python-3.3.3
|
- python-3.4.0
|
||||||
- pypy-1.9 (experimental)
|
- pypy-1.9 (experimental)
|
||||||
|
|
||||||
Other [unsupported runtimes](https://github.com/kennethreitz/python-versions/tree/master/formula) are available as well.
|
Other [unsupported runtimes](https://github.com/kennethreitz/python-versions/tree/master/formula) are available as well.
|
||||||
|
|||||||
+24
-15
@@ -25,18 +25,19 @@ VIRTUALENV_LOC=".heroku/venv"
|
|||||||
LEGACY_TRIGGER="lib/python2.7"
|
LEGACY_TRIGGER="lib/python2.7"
|
||||||
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
|
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
|
||||||
|
|
||||||
DEFAULT_PYTHON_VERSION="python-2.7.6"
|
DEFAULT_PYTHON_VERSION="python-2.7.7"
|
||||||
PYTHON_EXE="/app/.heroku/python/bin/python"
|
PYTHON_EXE="/app/.heroku/python/bin/python"
|
||||||
PIP_VERSION="1.5.2"
|
PIP_VERSION="1.5.6"
|
||||||
SETUPTOOLS_VERSION="2.1"
|
SETUPTOOLS_VERSION="3.6"
|
||||||
|
|
||||||
# Setup bpwatch
|
# Setup bpwatch
|
||||||
export PATH=$PATH:$ROOT_DIR/vendor/bpwatch
|
export PATH=$PATH:$ROOT_DIR/vendor/bpwatch
|
||||||
LOGPLEX_KEY="t.b396af7f-ad75-4643-8b9e-ebb288acc624"
|
LOGPLEX_KEY="t.b90d9d29-5388-4908-9737-b4576af1d4ce"
|
||||||
export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
|
export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
|
||||||
BUILDPACK_VERSION=v28
|
BUILDPACK_VERSION=v28
|
||||||
|
|
||||||
# Support Anvil Build_IDs
|
# Support Anvil Build_IDs
|
||||||
|
[ ! "$SLUG_ID" ] && SLUG_ID="defaultslug"
|
||||||
[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
|
[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
|
||||||
|
|
||||||
# Sanitizing environment variables.
|
# Sanitizing environment variables.
|
||||||
@@ -82,11 +83,11 @@ BUILD_DIR=$APP_DIR
|
|||||||
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
|
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
export LANG=en_US.UTF-8
|
export LANG=en_US.UTF-8
|
||||||
export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include
|
export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
|
||||||
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include
|
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
|
||||||
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib
|
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib
|
||||||
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib
|
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib
|
||||||
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config
|
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config
|
||||||
|
|
||||||
# Switch to the repo's context.
|
# Switch to the repo's context.
|
||||||
cd $BUILD_DIR
|
cd $BUILD_DIR
|
||||||
@@ -109,7 +110,6 @@ fi
|
|||||||
|
|
||||||
# If no runtime given, assume default version.
|
# If no runtime given, assume default version.
|
||||||
if [ ! -f runtime.txt ]; then
|
if [ ! -f runtime.txt ]; then
|
||||||
puts-step "No runtime.txt provided; assuming $DEFAULT_PYTHON_VERSION."
|
|
||||||
echo $DEFAULT_PYTHON_VERSION > runtime.txt
|
echo $DEFAULT_PYTHON_VERSION > runtime.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -155,13 +155,17 @@ fi
|
|||||||
if [ ! "$SKIP_INSTALL" ]; then
|
if [ ! "$SKIP_INSTALL" ]; then
|
||||||
bpwatch start install_python
|
bpwatch start install_python
|
||||||
puts-step "Preparing Python runtime ($PYTHON_VERSION)"
|
puts-step "Preparing Python runtime ($PYTHON_VERSION)"
|
||||||
curl http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2 -s | tar jx &> /dev/null
|
|
||||||
|
# Prepare destination directory.
|
||||||
|
mkdir -p .heroku/python
|
||||||
|
|
||||||
|
curl http://lang-python.s3.amazonaws.com/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
|
||||||
if [[ $? != 0 ]] ; then
|
if [[ $? != 0 ]] ; then
|
||||||
puts-warn "Requested runtime ($PYTHON_VERSION) was not found."
|
puts-warn "Requested runtime ($PYTHON_VERSION) was not found."
|
||||||
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
|
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
mv python .heroku/python
|
|
||||||
bpwatch stop install_python
|
bpwatch stop install_python
|
||||||
|
|
||||||
# Record for future reference.
|
# Record for future reference.
|
||||||
@@ -182,6 +186,8 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
|
|||||||
bpwatch start install_setuptools
|
bpwatch start install_setuptools
|
||||||
# Prepare it for the real world
|
# Prepare it for the real world
|
||||||
puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
|
puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
|
||||||
|
cd $ROOT_DIR/vendor/
|
||||||
|
tar zxf setuptools-$SETUPTOOLS_VERSION.tar.gz
|
||||||
cd $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION/
|
cd $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION/
|
||||||
python setup.py install &> /dev/null
|
python setup.py install &> /dev/null
|
||||||
cd $WORKING_DIR
|
cd $WORKING_DIR
|
||||||
@@ -189,6 +195,9 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
|
|||||||
|
|
||||||
bpwatch start install_pip
|
bpwatch start install_pip
|
||||||
puts-step "Installing Pip ($PIP_VERSION)"
|
puts-step "Installing Pip ($PIP_VERSION)"
|
||||||
|
|
||||||
|
cd $ROOT_DIR/vendor/
|
||||||
|
tar zxf pip-$PIP_VERSION.tar.gz
|
||||||
cd $ROOT_DIR/vendor/pip-$PIP_VERSION/
|
cd $ROOT_DIR/vendor/pip-$PIP_VERSION/
|
||||||
python setup.py install &> /dev/null
|
python setup.py install &> /dev/null
|
||||||
cd $WORKING_DIR
|
cd $WORKING_DIR
|
||||||
@@ -220,7 +229,7 @@ puts-step "Installing dependencies using Pip ($PIP_VERSION)"
|
|||||||
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
||||||
|
|
||||||
/app/.heroku/python/bin/pip install -r requirements.txt --exists-action=w --src=./.heroku/src | cleanup | indent
|
/app/.heroku/python/bin/pip install -r requirements.txt --exists-action=w --src=./.heroku/src --allow-all-external | cleanup | indent
|
||||||
|
|
||||||
[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
|
[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
|
[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
|
||||||
@@ -237,8 +246,8 @@ bpwatch stop collectstatic
|
|||||||
set-env PATH '$HOME/.heroku/python/bin:$PATH'
|
set-env PATH '$HOME/.heroku/python/bin:$PATH'
|
||||||
set-env PYTHONUNBUFFERED true
|
set-env PYTHONUNBUFFERED true
|
||||||
set-env PYTHONHOME /app/.heroku/python
|
set-env PYTHONHOME /app/.heroku/python
|
||||||
set-default-env LIBRARY_PATH /app/.heroku/vendor/lib
|
set-env LIBRARY_PATH /app/.heroku/vendor/lib:/app/.heroku/python/lib
|
||||||
set-default-env LD_LIBRARY_PATH /app/.heroku/vendor/lib
|
set-env LD_LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH'
|
||||||
set-default-env LANG en_US.UTF-8
|
set-default-env LANG en_US.UTF-8
|
||||||
set-default-env PYTHONHASHSEED random
|
set-default-env PYTHONHASHSEED random
|
||||||
set-default-env PYTHONPATH /app/
|
set-default-env PYTHONPATH /app/
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Syntax sugar.
|
source $BIN_DIR/utils
|
||||||
indent() {
|
|
||||||
RE="s/^/ /"
|
|
||||||
[ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE"
|
|
||||||
}
|
|
||||||
|
|
||||||
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' | head -1)
|
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' | head -1)
|
||||||
MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
||||||
@@ -14,19 +10,23 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
|||||||
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ]; then
|
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ]; then
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
|
echo "-----> Preparing static assets"
|
||||||
# Check if collectstatic is configured properly.
|
# Check if collectstatic is configured properly.
|
||||||
python $MANAGE_FILE collectstatic --dry-run --noinput &> /dev/null && RUN_COLLECTSTATIC=true
|
python $MANAGE_FILE collectstatic --dry-run --noinput &> /dev/null && RUN_COLLECTSTATIC=true
|
||||||
|
|
||||||
# Compile assets if collectstatic appears to be kosher.
|
# Compile assets if collectstatic appears to be kosher.
|
||||||
if [ "$RUN_COLLECTSTATIC" ]; then
|
if [ "$RUN_COLLECTSTATIC" ]; then
|
||||||
|
|
||||||
echo "-----> Collecting static files"
|
echo " Running collectstatic..."
|
||||||
python $MANAGE_FILE collectstatic --noinput 2>&1 | sed '/^Copying/d;/^$/d;/^ /d' | indent
|
python $MANAGE_FILE collectstatic --noinput 2>&1 | sed '/^Copying/d;/^$/d;/^ /d' | indent
|
||||||
|
|
||||||
[ $? -ne 0 ] && {
|
[ $? -ne 0 ] && {
|
||||||
echo " ! Error running manage.py collectstatic. More info:"
|
echo " ! Error running 'manage.py collectstatic'. More info:"
|
||||||
echo " http://devcenter.heroku.com/articles/django-assets"
|
echo " http://devcenter.heroku.com/articles/django-assets"
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
echo " Collectstatic configuration error. To debug, run:"
|
||||||
|
echo " $ heroku run python $MANAGE_FILE collectstatic --noinput"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|||||||
@@ -20,6 +20,12 @@ testDetectWithEmptyReqs() {
|
|||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testDetectDjango16() {
|
||||||
|
detect "django-1.6-skeleton"
|
||||||
|
assertCapturedEquals "Python"
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
testDetectDjango15() {
|
testDetectDjango15() {
|
||||||
detect "django-1.5-skeleton"
|
detect "django-1.5-skeleton"
|
||||||
assertCapturedEquals "Python"
|
assertCapturedEquals "Python"
|
||||||
@@ -62,6 +68,23 @@ testDetectNotPython() {
|
|||||||
assertEquals "1" "${RETURN}"
|
assertEquals "1" "${RETURN}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testDetectSimpleRuntimePypy2() {
|
||||||
|
detect "simple-runtime-pypy2"
|
||||||
|
assertCapturedEquals "Python"
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
|
testDetectSimpleRuntimePython2() {
|
||||||
|
detect "simple-runtime-python2"
|
||||||
|
assertCapturedEquals "Python"
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
|
testDetectSimpleRuntimePython3() {
|
||||||
|
detect "simple-runtime" # should probably be renamed simple-runtime-python3
|
||||||
|
assertCapturedEquals "Python"
|
||||||
|
assertCapturedSuccess
|
||||||
|
}
|
||||||
|
|
||||||
## utils ########################################
|
## utils ########################################
|
||||||
|
|
||||||
|
|||||||
@@ -1,69 +1,82 @@
|
|||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
[ $(uname) == "Darwin" ] && SED_FLAG='-l' || SED_FLAG='-u'
|
if [ $(uname) == Darwin ]; then
|
||||||
|
sed() { command sed -l "$@"; }
|
||||||
|
else
|
||||||
|
sed() { command sed -u "$@"; }
|
||||||
|
fi
|
||||||
|
|
||||||
# Syntax sugar.
|
# Syntax sugar.
|
||||||
indent() {
|
indent() {
|
||||||
RE="s/^/ /"
|
sed "s/^/ /"
|
||||||
sed $SED_FLAG "$RE"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up pip output
|
# Clean up pip output
|
||||||
cleanup() {
|
cleanup() {
|
||||||
sed $SED_FLAG -e 's/\.\.\.\+/.../g' | sed $SED_FLAG '/already satisfied/Id' | sed $SED_FLAG -e '/Overwriting/Id' | sed $SED_FLAG -e '/python executable/Id' | sed $SED_FLAG -e '/no previously-included files/Id'
|
sed -e 's/\.\.\.\+/.../g' | sed -e '/already satisfied/Id' | sed -e '/Overwriting/Id' | sed -e '/python executable/Id' | sed -e '/no previously-included files/Id'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Buildpack Steps.
|
# Buildpack Steps.
|
||||||
function puts-step (){
|
puts-step() {
|
||||||
echo "-----> $@"
|
echo "-----> $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Buildpack Warnings.
|
# Buildpack Warnings.
|
||||||
function puts-warn (){
|
puts-warn() {
|
||||||
echo " ! $@"
|
echo " ! $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-env key value
|
# Usage: $ set-env key value
|
||||||
function set-env (){
|
set-env() {
|
||||||
echo "export $1=$2" >> $PROFILE_PATH
|
echo "export $1=$2" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-default-env key value
|
# Usage: $ set-default-env key value
|
||||||
function set-default-env (){
|
set-default-env() {
|
||||||
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-default-env key value
|
# Usage: $ set-default-env key value
|
||||||
function un-set-env (){
|
un-set-env() {
|
||||||
echo "unset $1" >> $PROFILE_PATH
|
echo "unset $1" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious copying.
|
# Does some serious copying.
|
||||||
function deep-cp (){
|
deep-cp() {
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' $2 \;
|
declare source="$1" target="$2"
|
||||||
cp -r $1/!(tmp) $2
|
|
||||||
# echo copying $1 to $2
|
mkdir -p "$target"
|
||||||
|
|
||||||
|
# cp doesn't like being called without source params,
|
||||||
|
# so make sure they expand to something first.
|
||||||
|
# subshell to avoid surprising caller with shopts.
|
||||||
|
(
|
||||||
|
shopt -s nullglob dotglob
|
||||||
|
set -- "$source"/!(tmp|.|..)
|
||||||
|
[[ $# == 0 ]] || cp -a "$@" "$target"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious moving.
|
# Does some serious moving.
|
||||||
function deep-mv (){
|
deep-mv() {
|
||||||
deep-cp $1 $2
|
deep-cp "$1" "$2"
|
||||||
|
deep-rm "$1"
|
||||||
rm -fr $1/!(tmp)
|
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious deleting.
|
# Does some serious deleting.
|
||||||
function deep-rm (){
|
deep-rm() {
|
||||||
rm -fr $1/!(tmp)
|
# subshell to avoid surprising caller with shopts.
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \;
|
(
|
||||||
|
shopt -s dotglob
|
||||||
|
rm -rf "$1"/!(tmp|.|..)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub-env() {
|
sub-env() {
|
||||||
|
|
||||||
WHITELIST=${2:-''}
|
WHITELIST=${2:-''}
|
||||||
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|PYTHONPATH|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'}
|
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'}
|
||||||
|
|
||||||
(
|
(
|
||||||
if [ -d "$ENV_DIR" ]; then
|
if [ -d "$ENV_DIR" ]; then
|
||||||
@@ -77,4 +90,4 @@ sub-env() {
|
|||||||
$1
|
$1
|
||||||
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Python Buildpack Binaries
|
||||||
|
|
||||||
|
|
||||||
|
To get started with it, create an app on Heroku inside a clone of this repository, and set your S3 config vars:
|
||||||
|
|
||||||
|
$ heroku create --buildpack https://github.com/heroku/heroku-buildpack-python#not-heroku
|
||||||
|
$ heroku config:set WORKSPACE_DIR=builds
|
||||||
|
$ heroku config:set AWS_ACCESS_KEY_ID=<your_aws_key>
|
||||||
|
$ heroku config:set AWS_SECRET_ACCESS_KEY=<your_aws_secret>
|
||||||
|
$ heroku config:set S3_BUCKET=<your_s3_bucket_name>
|
||||||
|
|
||||||
|
|
||||||
|
Then, shell into an instance and run a build by giving the name of the formula inside `builds`:
|
||||||
|
|
||||||
|
$ heroku run bash
|
||||||
|
Running `bash` attached to terminal... up, run.6880
|
||||||
|
~ $ bob build runtimes/python-2.7.6
|
||||||
|
|
||||||
|
Fetching dependencies... found 2:
|
||||||
|
- libraries/sqlite
|
||||||
|
|
||||||
|
Building formula runtimes/python-2.7.6:
|
||||||
|
=== Building Python 2.7.6
|
||||||
|
Fetching Python v2.7.6 source...
|
||||||
|
Compiling...
|
||||||
|
|
||||||
|
If this works, run `bob deploy` instead of `bob build` to have the result uploaded to S3 for you.
|
||||||
|
|
||||||
|
To speed things up drastically, it'll usually be a good idea to `heroku run bash --size PX` instead.
|
||||||
|
|
||||||
|
Enjoy :)
|
||||||
Executable
+22
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building SQLite..."
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE_TARBALL='http://www.sqlite.org/sqlite-autoconf-3070900.tar.gz'
|
||||||
|
|
||||||
|
curl $SOURCE_TARBALL | tar xz
|
||||||
|
# jx
|
||||||
|
mv sqlite-autoconf-3070900 sqlite
|
||||||
|
|
||||||
|
cd sqlite
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
|
rm -fr sqlite
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-1.7-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-1.7/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-1.8-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-1.8/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-1.9-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-1.9/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.4 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.4.4/Python-2.4.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.4.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.4 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.4.5/Python-2.4.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.4.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.4 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.4.6/Python-2.4.6.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.4.6 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5/Python-2.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.1/Python-2.5.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.2/Python-2.5.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.3/Python-2.5.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.4/Python-2.5.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.5/Python-2.5.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.5 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.5.6/Python-2.5.6.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.5.6 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://www.python.org/ftp/python/2.6/Python-2.6.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
mv Python-2.6 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.1/Python-2.6.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.2/Python-2.6.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.3/Python-2.6.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.4/Python-2.6.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.5/Python-2.6.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.6/Python-2.6.6.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.6 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.7/Python-2.6.7.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.7 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.8/Python-2.6.8.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.8 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Protect 2.6 builds from parent Python (causes segfault during build).
|
||||||
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.6.9/Python-2.6.9.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.6.9 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7/Python-2.7.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.1/Python-2.7.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.4/Python-2.7.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.6/Python-2.7.6.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.6 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/2.7.7/Python-2.7.7.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.7 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1/Python-3.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1.1/Python-3.1.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1.2/Python-3.1.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1.3/Python-3.1.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1.4/Python-3.1.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.1.5/Python-3.1.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.1.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2/Python-3.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2.1/Python-3.2.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2.3/Python-3.2.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2.4/Python-3.2.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.2.5/Python-3.2.5.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.2.5 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.3.0 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.3.1/Python-3.3.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.3.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.3.2/Python-3.3.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.3.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.3.3/Python-3.3.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.3.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.3.4/Python-3.3.4.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.3.4 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.4.0/Python-3.4.0.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.4.0 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='http://python.org/ftp/python/3.4.1/Python-3.4.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.4.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no --enable-shared
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
requests
|
bob-builder==0.0.5
|
||||||
@@ -168,7 +168,7 @@ def run(command, data=None, timeout=None, env=None):
|
|||||||
history = []
|
history = []
|
||||||
for c in command:
|
for c in command:
|
||||||
|
|
||||||
if len(history):
|
if history:
|
||||||
# due to broken pipe problems pass only first 10MB
|
# due to broken pipe problems pass only first 10MB
|
||||||
data = history[-1].std_out[0:10*1024]
|
data = history[-1].std_out[0:10*1024]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
# Django settings for haystack project.
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
|
||||||
|
ADMINS = (
|
||||||
|
# ('Your Name', 'your_email@example.com'),
|
||||||
|
)
|
||||||
|
|
||||||
|
MANAGERS = ADMINS
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||||
|
'NAME': '', # Or path to database file if using sqlite3.
|
||||||
|
# The following settings are not used with sqlite3:
|
||||||
|
'USER': '',
|
||||||
|
'PASSWORD': '',
|
||||||
|
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
|
||||||
|
'PORT': '', # Set to empty string for default.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hosts/domain names that are valid for this site; required if DEBUG is False
|
||||||
|
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
|
||||||
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
# Local time zone for this installation. Choices can be found here:
|
||||||
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||||
|
# although not all choices may be available on all operating systems.
|
||||||
|
# In a Windows environment this must be set to your system time zone.
|
||||||
|
TIME_ZONE = 'America/Chicago'
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
# to load the internationalization machinery.
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
# If you set this to False, Django will not format dates, numbers and
|
||||||
|
# calendars according to the current locale.
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
# If you set this to False, Django will not use timezone-aware datetimes.
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
||||||
|
# Example: "/var/www/example.com/media/"
|
||||||
|
MEDIA_ROOT = ''
|
||||||
|
|
||||||
|
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
||||||
|
# trailing slash.
|
||||||
|
# Examples: "http://example.com/media/", "http://media.example.com/"
|
||||||
|
MEDIA_URL = ''
|
||||||
|
|
||||||
|
# Absolute path to the directory static files should be collected to.
|
||||||
|
# Don't put anything in this directory yourself; store your static files
|
||||||
|
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
||||||
|
# Example: "/var/www/example.com/static/"
|
||||||
|
STATIC_ROOT = ''
|
||||||
|
|
||||||
|
# URL prefix for static files.
|
||||||
|
# Example: "http://example.com/static/", "http://static.example.com/"
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
# Additional locations of static files
|
||||||
|
STATICFILES_DIRS = (
|
||||||
|
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
# List of finder classes that know how to find static files in
|
||||||
|
# various locations.
|
||||||
|
STATICFILES_FINDERS = (
|
||||||
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||||
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||||
|
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||||
|
)
|
||||||
|
|
||||||
|
# Make this unique, and don't share it with anybody.
|
||||||
|
SECRET_KEY = '@w-1$9#jh05!qvbh#1k)c4=w9llcq116f$5(4&s_c)n4@%n=pc'
|
||||||
|
|
||||||
|
# List of callables that know how to import templates from various sources.
|
||||||
|
TEMPLATE_LOADERS = (
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
# 'django.template.loaders.eggs.Loader',
|
||||||
|
)
|
||||||
|
|
||||||
|
MIDDLEWARE_CLASSES = (
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
# Uncomment the next line for simple clickjacking protection:
|
||||||
|
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'haystack.urls'
|
||||||
|
|
||||||
|
# Python dotted path to the WSGI application used by Django's runserver.
|
||||||
|
WSGI_APPLICATION = 'haystack.wsgi.application'
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
INSTALLED_APPS = (
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
# Uncomment the next line to enable the admin:
|
||||||
|
# 'django.contrib.admin',
|
||||||
|
# Uncomment the next line to enable admin documentation:
|
||||||
|
# 'django.contrib.admindocs',
|
||||||
|
)
|
||||||
|
|
||||||
|
# A sample logging configuration. The only tangible logging
|
||||||
|
# performed by this configuration is to send an email to
|
||||||
|
# the site admins on every HTTP 500 error when DEBUG=False.
|
||||||
|
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
||||||
|
# more details on how to customize your logging configuration.
|
||||||
|
LOGGING = {
|
||||||
|
'version': 1,
|
||||||
|
'disable_existing_loggers': False,
|
||||||
|
'filters': {
|
||||||
|
'require_debug_false': {
|
||||||
|
'()': 'django.utils.log.RequireDebugFalse'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'mail_admins': {
|
||||||
|
'level': 'ERROR',
|
||||||
|
'filters': ['require_debug_false'],
|
||||||
|
'class': 'django.utils.log.AdminEmailHandler'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
'django.request': {
|
||||||
|
'handlers': ['mail_admins'],
|
||||||
|
'level': 'ERROR',
|
||||||
|
'propagate': True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
|
# Uncomment the next two lines to enable the admin:
|
||||||
|
# from django.contrib import admin
|
||||||
|
# admin.autodiscover()
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
# Examples:
|
||||||
|
# url(r'^$', 'haystack.views.home', name='home'),
|
||||||
|
# url(r'^haystack/', include('haystack.foo.urls')),
|
||||||
|
|
||||||
|
# Uncomment the admin/doc line below to enable admin documentation:
|
||||||
|
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||||
|
|
||||||
|
# Uncomment the next line to enable the admin:
|
||||||
|
# url(r'^admin/', include(admin.site.urls)),
|
||||||
|
)
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
"""
|
||||||
|
WSGI config for haystack project.
|
||||||
|
|
||||||
|
This module contains the WSGI application used by Django's development server
|
||||||
|
and any production WSGI deployments. It should expose a module-level variable
|
||||||
|
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
|
||||||
|
this application via the ``WSGI_APPLICATION`` setting.
|
||||||
|
|
||||||
|
Usually you will have the standard Django WSGI application here, but it also
|
||||||
|
might make sense to replace the whole Django WSGI application with a custom one
|
||||||
|
that later delegates to the Django one. For example, you could introduce WSGI
|
||||||
|
middleware here, or combine a Django application with an application of another
|
||||||
|
framework.
|
||||||
|
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
|
||||||
|
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
|
||||||
|
# if running multiple sites in the same mod_wsgi process. To fix this, use
|
||||||
|
# mod_wsgi daemon mode with each site in its own daemon process, or use
|
||||||
|
# os.environ["DJANGO_SETTINGS_MODULE"] = "haystack.settings"
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
||||||
|
|
||||||
|
# This application object is used by any WSGI server configured to use this
|
||||||
|
# file. This includes Django's development server, if the WSGI_APPLICATION
|
||||||
|
# setting points here.
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
application = get_wsgi_application()
|
||||||
|
|
||||||
|
# Apply WSGI middleware here.
|
||||||
|
# from helloworld.wsgi import HelloWorldApplication
|
||||||
|
# application = HelloWorldApplication(application)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
||||||
|
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
django==1.6
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
requests==2.2.1
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
pypy-2.3
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
requests==2.2.1
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
python-2.7.6
|
||||||
@@ -1 +1 @@
|
|||||||
requests==1.0.3
|
requests==2.2.1
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
python-3.3.2
|
python-3.4.0
|
||||||
|
|||||||
Vendored
-120
@@ -1,120 +0,0 @@
|
|||||||
Alex Gaynor
|
|
||||||
Alex Grönholm
|
|
||||||
Alex Morega
|
|
||||||
Alexandre Conrad
|
|
||||||
Andrey Bulgakov
|
|
||||||
Anrs Hu
|
|
||||||
Anton Patrushev
|
|
||||||
Antti Kaihola
|
|
||||||
Armin Ronacher
|
|
||||||
Aziz Köksal
|
|
||||||
Ben Rosser
|
|
||||||
Bernardo B. Marques
|
|
||||||
Bradley Ayers
|
|
||||||
Brian Rosner
|
|
||||||
Carl Meyer
|
|
||||||
Chris McDonough
|
|
||||||
Christian Oudard
|
|
||||||
Clay McClure
|
|
||||||
Cody Soyland
|
|
||||||
Craig Kerstiens
|
|
||||||
Cristian Sorinel
|
|
||||||
Dan Sully
|
|
||||||
Daniel Holth
|
|
||||||
Dave Abrahams
|
|
||||||
David (d1b)
|
|
||||||
David Aguilar
|
|
||||||
David Evans
|
|
||||||
David Pursehouse
|
|
||||||
dengzhp
|
|
||||||
Dmitry Gladkov
|
|
||||||
Donald Stufft
|
|
||||||
Endoh Takanao
|
|
||||||
enoch
|
|
||||||
Erik M. Bray
|
|
||||||
Francesco
|
|
||||||
Gabriel de Perthuis
|
|
||||||
Garry Polley
|
|
||||||
Geoffrey Lehée
|
|
||||||
George Song
|
|
||||||
Georgi Valkov
|
|
||||||
Herbert Pfennig
|
|
||||||
hetmankp
|
|
||||||
Hugo Lopes Tavares
|
|
||||||
Hynek Schlawack
|
|
||||||
Ian Bicking
|
|
||||||
Igor Sobreira
|
|
||||||
Ionel Maries Cristian
|
|
||||||
Jakub Vysoky
|
|
||||||
James Cleveland
|
|
||||||
Jannis Leidel
|
|
||||||
Jakub Stasiak
|
|
||||||
Jay Graves
|
|
||||||
Jeff Dairiki
|
|
||||||
John-Scott Atlakson
|
|
||||||
Jon Parise
|
|
||||||
Jonas Nockert
|
|
||||||
Jon Parise
|
|
||||||
Jorge Niedbalski
|
|
||||||
Josh Bronson
|
|
||||||
Josh Hansen
|
|
||||||
Kamal Bin Mustafa
|
|
||||||
Kelsey Hightower
|
|
||||||
Kenneth Belitzky
|
|
||||||
Kenneth Reitz
|
|
||||||
Kevin Frommelt
|
|
||||||
Kumar McMillan
|
|
||||||
Lev Givon
|
|
||||||
Lincoln de Sousa
|
|
||||||
Luke Macken
|
|
||||||
Masklinn
|
|
||||||
Marc Abramowitz
|
|
||||||
Marc Tamlyn
|
|
||||||
Marcus Smith
|
|
||||||
Markus Hametner
|
|
||||||
Matt Maker
|
|
||||||
Maxime Rouyrre
|
|
||||||
Michael Williamson
|
|
||||||
Miguel Araujo Perez
|
|
||||||
Monty Taylor
|
|
||||||
Nick Stenning
|
|
||||||
Nowell Strite
|
|
||||||
Oliver Tonnhofer
|
|
||||||
Olivier Girardot
|
|
||||||
Ollie Rutherfurd
|
|
||||||
Oren Held
|
|
||||||
Patrick Jenkins
|
|
||||||
Patrick Dubroy
|
|
||||||
Paul Moore
|
|
||||||
Paul Nasrat
|
|
||||||
Paul Oswald
|
|
||||||
Paul van der Linden
|
|
||||||
Peter Waller
|
|
||||||
Phil Freo
|
|
||||||
Phil Whelan
|
|
||||||
Piet Delport
|
|
||||||
Preston Holmes
|
|
||||||
Przemek Wrzos
|
|
||||||
Qiangning Hong
|
|
||||||
Rafael Caricio
|
|
||||||
Rene Dudfield
|
|
||||||
Roey Berman
|
|
||||||
Ronny Pfannschmidt
|
|
||||||
Rory McCann
|
|
||||||
Ross Brattain
|
|
||||||
Sergey Vasilyev
|
|
||||||
Seth Woodworth
|
|
||||||
Simon Cross
|
|
||||||
Stavros Korokithakis
|
|
||||||
Stéphane Klein
|
|
||||||
Steven Myint
|
|
||||||
Takayuki SHIMIZUKAWA
|
|
||||||
Thomas Fenzl
|
|
||||||
Thomas Johansson
|
|
||||||
Toshio Kuratomi
|
|
||||||
Travis Swicegood
|
|
||||||
Vinay Sajip
|
|
||||||
Vitaly Babiy
|
|
||||||
W. Trevor King
|
|
||||||
Wil Tan
|
|
||||||
Hsiaoming Yang
|
|
||||||
Vendored
-863
@@ -1,863 +0,0 @@
|
|||||||
Changelog
|
|
||||||
=========
|
|
||||||
|
|
||||||
1.5.2 (2014-01-26)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Upgraded the vendored ``pkg_resources`` and ``_markerlib`` to setuptools 2.1.
|
|
||||||
|
|
||||||
* Fixed an error that prevented accessing PyPI when pyopenssl, ndg-httpsclient,
|
|
||||||
and pyasn1 are installed
|
|
||||||
|
|
||||||
* Fixed an issue that caused trailing comments to be incorrectly included as
|
|
||||||
part of the URL in a requirements file
|
|
||||||
|
|
||||||
|
|
||||||
1.5.1 (2014-01-20)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* pip now only requires setuptools (any setuptools, not a certain version) when
|
|
||||||
installing distributions from src (i.e. not from wheel). (Pull #1434).
|
|
||||||
|
|
||||||
* `get-pip.py` now installs setuptools, when it's not already installed (Pull
|
|
||||||
#1475)
|
|
||||||
|
|
||||||
* Don't decode downloaded files that have a ``Content-Encoding`` header. (Pull
|
|
||||||
#1435)
|
|
||||||
|
|
||||||
* Fix to correctly parse wheel filenames with single digit versions. (Pull
|
|
||||||
#1445)
|
|
||||||
|
|
||||||
* If `--allow-unverified` is used assume it also means `--allow-external`. (Pull
|
|
||||||
#1457)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.5 (2014-01-01)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer supports the ``--use-mirrors``,
|
|
||||||
``-M``, and ``--mirrors`` flags. The mirroring support has been removed. In
|
|
||||||
order to use a mirror specify it as the primary index with ``-i`` or
|
|
||||||
``--index-url``, or as an additional index with ``--extra-index-url``. (Pull #1098, CVE-2013-5123)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer will scrape insecure external urls by
|
|
||||||
default nor will it install externally hosted files by default. Users may opt
|
|
||||||
into installing externally hosted or insecure files or urls using
|
|
||||||
``--allow-external PROJECT`` and ``--allow-unverified PROJECT``. (Pull #1055)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer respects dependency links by default.
|
|
||||||
Users may opt into respecting them again using ``--process-dependency-links``.
|
|
||||||
|
|
||||||
* **DEPRECATION** ``pip install --no-install`` and ``pip install
|
|
||||||
--no-download`` are now formally deprecated. See Issue #906 for discussion on
|
|
||||||
possible alternatives, or lack thereof, in future releases.
|
|
||||||
|
|
||||||
* **DEPRECATION** ``pip zip`` and ``pip unzip`` are now formally deprecated.
|
|
||||||
|
|
||||||
* pip will now install Mac OSX platform wheels from PyPI. (Pull #1278)
|
|
||||||
|
|
||||||
* pip now generates the appropriate platform-specific console scripts when
|
|
||||||
installing wheels. (Pull #1251)
|
|
||||||
|
|
||||||
* Pip now confirms a wheel is supported when installing directly from a path or
|
|
||||||
url. (Pull #1315)
|
|
||||||
|
|
||||||
* Fixed #1097, ``--ignore-installed`` now behaves again as designed, after it was
|
|
||||||
unintentionally broke in v0.8.3 when fixing Issue #14 (Pull #1352).
|
|
||||||
|
|
||||||
* Fixed a bug where global scripts were being removed when uninstalling --user
|
|
||||||
installed packages (Pull #1353).
|
|
||||||
|
|
||||||
* Fixed #1163, --user wasn't being respected when installing scripts from wheels (Pull #1176).
|
|
||||||
|
|
||||||
* Fixed #1150, we now assume '_' means '-' in versions from wheel filenames (Pull #1158).
|
|
||||||
|
|
||||||
* Fixed #219, error when using --log with a failed install (Pull #1205).
|
|
||||||
|
|
||||||
* Fixed #1131, logging was buffered and choppy in Python 3.
|
|
||||||
|
|
||||||
* Fixed #70, --timeout was being ignored (Pull #1202).
|
|
||||||
|
|
||||||
* Fixed #772, error when setting PIP_EXISTS_ACTION (Pull #1201).
|
|
||||||
|
|
||||||
* Added colors to the logging output in order to draw attention to important
|
|
||||||
warnings and errors. (Pull #1109)
|
|
||||||
|
|
||||||
* Added warnings when using an insecure index, find-link, or dependency link. (Pull #1121)
|
|
||||||
|
|
||||||
* Added support for installing packages from a subdirectory using the ``subdirectory``
|
|
||||||
editable option. ( Pull #1082 )
|
|
||||||
|
|
||||||
* Fixed #1192. "TypeError: bad operand type for unary" in some cases when
|
|
||||||
installing wheels using --find-links (Pull #1218).
|
|
||||||
|
|
||||||
* Fixed #1133 and #317. Archive contents are now written based on system
|
|
||||||
defaults and umask (i.e. permissions are not preserved), except that regular
|
|
||||||
files with any execute permissions have the equivalent of "chmod +x" applied
|
|
||||||
after being written (Pull #1146).
|
|
||||||
|
|
||||||
* PreviousBuildDirError now returns a non-zero exit code and prevents the
|
|
||||||
previous build dir from being cleaned in all cases (Pull #1162).
|
|
||||||
|
|
||||||
* Renamed --allow-insecure to --allow-unverified, however the old name will
|
|
||||||
continue to work for a period of time (Pull #1257).
|
|
||||||
|
|
||||||
* Fixed #1006, error when installing local projects with symlinks in
|
|
||||||
Python 3. (Pull #1311)
|
|
||||||
|
|
||||||
* The previously hidden ``--log-file`` otion, is now shown as a general option.
|
|
||||||
(Pull #1316)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.4.1 (2013-08-07)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* **New Signing Key** Release 1.4.1 is using a different key than normal with
|
|
||||||
fingerprint: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA
|
|
||||||
* Fixed issues with installing from pybundle files (Pull #1116).
|
|
||||||
* Fixed error when sysconfig module throws an exception (Pull #1095).
|
|
||||||
* Don't ignore already installed pre-releases (Pull #1076).
|
|
||||||
* Fixes related to upgrading setuptools (Pull #1092).
|
|
||||||
* Fixes so that --download works with wheel archives (Pull #1113).
|
|
||||||
* Fixes related to recognizing and cleaning global build dirs (Pull #1080).
|
|
||||||
|
|
||||||
|
|
||||||
1.4 (2013-07-23)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip now only installs stable versions by default,
|
|
||||||
and offers a new ``--pre`` option to also find pre-release and development
|
|
||||||
versions. (Pull #834)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** Dropped support for Python 2.5. The minimum
|
|
||||||
supported Python version for pip 1.4 is Python 2.6.
|
|
||||||
|
|
||||||
* Added support for installing and building wheel archives.
|
|
||||||
Thanks Daniel Holth, Marcus Smith, Paul Moore, and Michele Lacchia
|
|
||||||
(Pull #845)
|
|
||||||
|
|
||||||
* Applied security patch to pip's ssl support related to certificate DNS
|
|
||||||
wildcard matching (http://bugs.python.org/issue17980).
|
|
||||||
|
|
||||||
* To satisfy pip's setuptools requirement, pip now recommends setuptools>=0.8,
|
|
||||||
not distribute. setuptools and distribute are now merged into one project
|
|
||||||
called 'setuptools'. (Pull #1003)
|
|
||||||
|
|
||||||
* pip will now warn when installing a file that is either hosted externally to
|
|
||||||
the index or cannot be verified with a hash. In the future pip will default
|
|
||||||
to not installing them and will require the flags --allow-external NAME, and
|
|
||||||
--allow-insecure NAME respectively. (Pull #985)
|
|
||||||
|
|
||||||
* If an already-downloaded or cached file has a bad hash, re-download it rather
|
|
||||||
than erroring out. (Issue #963).
|
|
||||||
|
|
||||||
* ``pip bundle`` and support for installing from pybundle files is now
|
|
||||||
considered deprecated and will be removed in pip v1.5.
|
|
||||||
|
|
||||||
* Fixed a number of issues (#413, #709, #634, #602, and #939) related to
|
|
||||||
cleaning up and not reusing build directories. (Pull #865, #948)
|
|
||||||
|
|
||||||
* Added a User Agent so that pip is identifiable in logs. (Pull #901)
|
|
||||||
|
|
||||||
* Added ssl and --user support to get-pip.py. Thanks Gabriel de Perthuis.
|
|
||||||
(Pull #895)
|
|
||||||
|
|
||||||
* Fixed the proxy support, which was broken in pip 1.3.x (Pull #840)
|
|
||||||
|
|
||||||
* Fixed issue #32 - pip fails when server does not send content-type header.
|
|
||||||
Thanks Hugo Lopes Tavares and Kelsey Hightower (Pull #872).
|
|
||||||
|
|
||||||
* "Vendorized" distlib as pip.vendor.distlib (https://distlib.readthedocs.org/).
|
|
||||||
|
|
||||||
* Fixed git VCS backend with git 1.8.3. (Pull #967)
|
|
||||||
|
|
||||||
1.3.1 (2013-03-08)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Fixed a major backward incompatible change of parsing URLs to externally
|
|
||||||
hosted packages that got accidentily included in 1.3.
|
|
||||||
|
|
||||||
1.3 (2013-03-07)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* SSL Cert Verification; Make https the default for PyPI access.
|
|
||||||
Thanks James Cleveland, Giovanni Bajo, Marcus Smith and many others (Pull #791, CVE-2013-1629).
|
|
||||||
|
|
||||||
* Added "pip list" for listing installed packages and the latest version
|
|
||||||
available. Thanks Rafael Caricio, Miguel Araujo, Dmitry Gladkov (Pull #752)
|
|
||||||
|
|
||||||
* Fixed security issues with pip's use of temp build directories.
|
|
||||||
Thanks David (d1b) and Thomas Guttler. (Pull #780, CVE-2013-1888)
|
|
||||||
|
|
||||||
* Improvements to sphinx docs and cli help. (Pull #773)
|
|
||||||
|
|
||||||
* Fixed issue #707, dealing with OS X temp dir handling, which was causing
|
|
||||||
global NumPy installs to fail. (Pull #768)
|
|
||||||
|
|
||||||
* Split help output into general vs command-specific option groups.
|
|
||||||
Thanks Georgi Valkov. (Pull #744; Pull #721 contains preceding refactor)
|
|
||||||
|
|
||||||
* Fixed dependency resolution when installing from archives with uppercase
|
|
||||||
project names. (Pull #724)
|
|
||||||
|
|
||||||
* Fixed problem where re-installs always occurred when using file:// find-links.
|
|
||||||
(Pulls #683/#702)
|
|
||||||
|
|
||||||
* "pip install -v" now shows the full download url, not just the archive name.
|
|
||||||
Thanks Marc Abramowitz (Pull #687)
|
|
||||||
|
|
||||||
* Fix to prevent unnecessary PyPI redirects. Thanks Alex Gronholm (Pull #695)
|
|
||||||
|
|
||||||
* Fixed issue #670 - install failure under Python 3 when the same version
|
|
||||||
of a package is found under 2 different URLs. Thanks Paul Moore (Pull #671)
|
|
||||||
|
|
||||||
* Fix git submodule recursive updates. Thanks Roey Berman. (Pulls #674)
|
|
||||||
|
|
||||||
* Explicitly ignore rel='download' links while looking for html pages.
|
|
||||||
Thanks Maxime R. (Pull #677)
|
|
||||||
|
|
||||||
* --user/--upgrade install options now work together. Thanks 'eevee' for
|
|
||||||
discovering the problem. (Pull #705)
|
|
||||||
|
|
||||||
* Added check in ``install --download`` to prevent re-downloading if the target
|
|
||||||
file already exists. Thanks Andrey Bulgakov. (Pull #669)
|
|
||||||
|
|
||||||
* Added support for bare paths (including relative paths) as argument to
|
|
||||||
`--find-links`. Thanks Paul Moore for draft patch.
|
|
||||||
|
|
||||||
* Added support for --no-index in requirements files.
|
|
||||||
|
|
||||||
* Added "pip show" command to get information about an installed package.
|
|
||||||
Fixes #131. Thanks Kelsey Hightower and Rafael Caricio.
|
|
||||||
|
|
||||||
* Added `--root` option for "pip install" to specify root directory. Behaves
|
|
||||||
like the same option in distutils but also plays nice with pip's egg-info.
|
|
||||||
Thanks Przemek Wrzos. (Issue #253 / Pull #693)
|
|
||||||
|
|
||||||
1.2.1 (2012-09-06)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Fixed a regression introduced in 1.2 about raising an exception when
|
|
||||||
not finding any files to uninstall in the current environment. Thanks for
|
|
||||||
the fix, Marcus Smith.
|
|
||||||
|
|
||||||
1.2 (2012-09-01)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* **Dropped support for Python 2.4** The minimum supported Python version is
|
|
||||||
now Python 2.5.
|
|
||||||
|
|
||||||
* Fixed issue #605 - pypi mirror support broken on some DNS responses. Thanks
|
|
||||||
philwhin.
|
|
||||||
|
|
||||||
* Fixed issue #355 - pip uninstall removes files it didn't install. Thanks
|
|
||||||
pjdelport.
|
|
||||||
|
|
||||||
* Fixed issues #493, #494, #440, and #573 related to improving support for the
|
|
||||||
user installation scheme. Thanks Marcus Smith.
|
|
||||||
|
|
||||||
* Write failure log to temp file if default location is not writable. Thanks
|
|
||||||
andreigc.
|
|
||||||
|
|
||||||
* Pull in submodules for git editable checkouts. Fixes #289 and #421. Thanks
|
|
||||||
Hsiaoming Yang and Markus Hametner.
|
|
||||||
|
|
||||||
* Use a temporary directory as the default build location outside of a
|
|
||||||
virtualenv. Fixes issues #339 and #381. Thanks Ben Rosser.
|
|
||||||
|
|
||||||
* Added support for specifying extras with local editables. Thanks Nick
|
|
||||||
Stenning.
|
|
||||||
|
|
||||||
* Added ``--egg`` flag to request egg-style rather than flat installation. Refs
|
|
||||||
issue #3. Thanks Kamal Bin Mustafa.
|
|
||||||
|
|
||||||
* Fixed issue #510 - prevent e.g. ``gmpy2-2.0.tar.gz`` from matching a request
|
|
||||||
to ``pip install gmpy``; sdist filename must begin with full project name
|
|
||||||
followed by a dash. Thanks casevh for the report.
|
|
||||||
|
|
||||||
* Fixed issue #504 - allow package URLS to have querystrings. Thanks W.
|
|
||||||
Trevor King.
|
|
||||||
|
|
||||||
* Fixed issue #58 - pip freeze now falls back to non-editable format rather
|
|
||||||
than blowing up if it can't determine the origin repository of an editable.
|
|
||||||
Thanks Rory McCann.
|
|
||||||
|
|
||||||
* Added a `__main__.py` file to enable `python -m pip` on Python versions
|
|
||||||
that support it. Thanks Alexey Luchko.
|
|
||||||
|
|
||||||
* Fixed issue #487 - upgrade from VCS url of project that does exist on
|
|
||||||
index. Thanks Andrew Knapp for the report.
|
|
||||||
|
|
||||||
* Fixed issue #486 - fix upgrade from VCS url of project with no distribution
|
|
||||||
on index. Thanks Andrew Knapp for the report.
|
|
||||||
|
|
||||||
* Fixed issue #427 - clearer error message on a malformed VCS url. Thanks
|
|
||||||
Thomas Fenzl.
|
|
||||||
|
|
||||||
* Added support for using any of the built in guaranteed algorithms in
|
|
||||||
``hashlib`` as a checksum hash.
|
|
||||||
|
|
||||||
* Fixed issue #321 - Raise an exception if current working directory can't be
|
|
||||||
found or accessed.
|
|
||||||
|
|
||||||
* Fixed issue #82 - Removed special casing of the user directory and use the
|
|
||||||
Python default instead.
|
|
||||||
|
|
||||||
* Fixed #436 - Only warn about version conflicts if there is actually one.
|
|
||||||
This re-enables using ``==dev`` in requirements files.
|
|
||||||
|
|
||||||
* Moved tests to be run on Travis CI: http://travis-ci.org/pypa/pip
|
|
||||||
|
|
||||||
* Added a better help formatter.
|
|
||||||
|
|
||||||
1.1 (2012-02-16)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* Fixed issue #326 - don't crash when a package's setup.py emits UTF-8 and
|
|
||||||
then fails. Thanks Marc Abramowitz.
|
|
||||||
|
|
||||||
* Added ``--target`` option for installing directly to arbitrary directory.
|
|
||||||
Thanks Stavros Korokithakis.
|
|
||||||
|
|
||||||
* Added support for authentication with Subversion repositories. Thanks
|
|
||||||
Qiangning Hong.
|
|
||||||
|
|
||||||
* Fixed issue #315 - ``--download`` now downloads dependencies as well.
|
|
||||||
Thanks Qiangning Hong.
|
|
||||||
|
|
||||||
* Errors from subprocesses will display the current working directory.
|
|
||||||
Thanks Antti Kaihola.
|
|
||||||
|
|
||||||
* Fixed issue #369 - compatibility with Subversion 1.7. Thanks Qiangning
|
|
||||||
Hong. Note that setuptools remains incompatible with Subversion 1.7; to
|
|
||||||
get the benefits of pip's support you must use Distribute rather than
|
|
||||||
setuptools.
|
|
||||||
|
|
||||||
* Fixed issue #57 - ignore py2app-generated OS X mpkg zip files in finder.
|
|
||||||
Thanks Rene Dudfield.
|
|
||||||
|
|
||||||
* Fixed issue #182 - log to ~/Library/Logs/ by default on OS X framework
|
|
||||||
installs. Thanks Dan Callahan for report and patch.
|
|
||||||
|
|
||||||
* Fixed issue #310 - understand version tags without minor version ("py3")
|
|
||||||
in sdist filenames. Thanks Stuart Andrews for report and Olivier Girardot for
|
|
||||||
patch.
|
|
||||||
|
|
||||||
* Fixed issue #7 - Pip now supports optionally installing setuptools
|
|
||||||
"extras" dependencies; e.g. "pip install Paste[openid]". Thanks Matt Maker
|
|
||||||
and Olivier Girardot.
|
|
||||||
|
|
||||||
* Fixed issue #391 - freeze no longer borks on requirements files with
|
|
||||||
--index-url or --find-links. Thanks Herbert Pfennig.
|
|
||||||
|
|
||||||
* Fixed issue #288 - handle symlinks properly. Thanks lebedov for the patch.
|
|
||||||
|
|
||||||
* Fixed issue #49 - pip install -U no longer reinstalls the same versions of
|
|
||||||
packages. Thanks iguananaut for the pull request.
|
|
||||||
|
|
||||||
* Removed ``-E``/``--environment`` option and ``PIP_RESPECT_VIRTUALENV``;
|
|
||||||
both use a restart-in-venv mechanism that's broken, and neither one is
|
|
||||||
useful since every virtualenv now has pip inside it. Replace ``pip -E
|
|
||||||
path/to/venv install Foo`` with ``virtualenv path/to/venv &&
|
|
||||||
path/to/venv/pip install Foo``.
|
|
||||||
|
|
||||||
* Fixed issue #366 - pip throws IndexError when it calls `scraped_rel_links`
|
|
||||||
|
|
||||||
* Fixed issue #22 - pip search should set and return a userful shell status code
|
|
||||||
|
|
||||||
* Fixed issue #351 and #365 - added global ``--exists-action`` command line
|
|
||||||
option to easier script file exists conflicts, e.g. from editable
|
|
||||||
requirements from VCS that have a changed repo URL.
|
|
||||||
|
|
||||||
|
|
||||||
1.0.2 (2011-07-16)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Fixed docs issues.
|
|
||||||
* Fixed issue #295 - Reinstall a package when using the ``install -I`` option
|
|
||||||
* Fixed issue #283 - Finds a Git tag pointing to same commit as origin/master
|
|
||||||
* Fixed issue #279 - Use absolute path for path to docs in setup.py
|
|
||||||
* Fixed issue #314 - Correctly handle exceptions on Python3.
|
|
||||||
* Fixed issue #320 - Correctly parse ``--editable`` lines in requirements files
|
|
||||||
|
|
||||||
1.0.1 (2011-04-30)
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Start to use git-flow.
|
|
||||||
* Fixed issue #274 - `find_command` should not raise AttributeError
|
|
||||||
* Fixed issue #273 - respect Content-Disposition header. Thanks Bradley Ayers.
|
|
||||||
* Fixed issue #233 - pathext handling on Windows.
|
|
||||||
* Fixed issue #252 - svn+svn protocol.
|
|
||||||
* Fixed issue #44 - multiple CLI searches.
|
|
||||||
* Fixed issue #266 - current working directory when running setup.py clean.
|
|
||||||
|
|
||||||
1.0 (2011-04-04)
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* Added Python 3 support! Huge thanks to Vinay Sajip, Vitaly Babiy, Kelsey
|
|
||||||
Hightower, and Alex Gronholm, among others.
|
|
||||||
|
|
||||||
* Download progress only shown on a real TTY. Thanks Alex Morega.
|
|
||||||
|
|
||||||
* Fixed finding of VCS binaries to not be fooled by same-named directories.
|
|
||||||
Thanks Alex Morega.
|
|
||||||
|
|
||||||
* Fixed uninstall of packages from system Python for users of Debian/Ubuntu
|
|
||||||
python-setuptools package (workaround until fixed in Debian and Ubuntu).
|
|
||||||
|
|
||||||
* Added `get-pip.py <https://raw.github.com/pypa/pip/master/contrib/get-pip.py>`_
|
|
||||||
installer. Simply download and execute it, using the Python interpreter of
|
|
||||||
your choice::
|
|
||||||
|
|
||||||
$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
|
|
||||||
$ python get-pip.py
|
|
||||||
|
|
||||||
This may have to be run as root.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Make sure you have `distribute <http://pypi.python.org/pypi/distribute>`_
|
|
||||||
installed before using the installer!
|
|
||||||
|
|
||||||
0.8.3
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Moved main repository to Github: https://github.com/pypa/pip
|
|
||||||
|
|
||||||
* Transferred primary maintenance from Ian to Jannis Leidel, Carl Meyer, Brian Rosner
|
|
||||||
|
|
||||||
* Fixed issue #14 - No uninstall-on-upgrade with URL package. Thanks Oliver Tonnhofer
|
|
||||||
|
|
||||||
* Fixed issue #163 - Egg name not properly resolved. Thanks Igor Sobreira
|
|
||||||
|
|
||||||
* Fixed issue #178 - Non-alphabetical installation of requirements. Thanks Igor Sobreira
|
|
||||||
|
|
||||||
* Fixed issue #199 - Documentation mentions --index instead of --index-url. Thanks Kelsey Hightower
|
|
||||||
|
|
||||||
* Fixed issue #204 - rmtree undefined in mercurial.py. Thanks Kelsey Hightower
|
|
||||||
|
|
||||||
* Fixed bug in Git vcs backend that would break during reinstallation.
|
|
||||||
|
|
||||||
* Fixed bug in Mercurial vcs backend related to pip freeze and branch/tag resolution.
|
|
||||||
|
|
||||||
* Fixed bug in version string parsing related to the suffix "-dev".
|
|
||||||
|
|
||||||
0.8.2
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Avoid redundant unpacking of bundles (from pwaller)
|
|
||||||
|
|
||||||
* Fixed issue #32, #150, #161 - Fixed checking out the correct
|
|
||||||
tag/branch/commit when updating an editable Git requirement.
|
|
||||||
|
|
||||||
* Fixed issue #49 - Added ability to install version control requirements
|
|
||||||
without making them editable, e.g.::
|
|
||||||
|
|
||||||
pip install git+https://github.com/pypa/pip/
|
|
||||||
|
|
||||||
* Fixed issue #175 - Correctly locate build and source directory on Mac OS X.
|
|
||||||
|
|
||||||
* Added ``git+https://`` scheme to Git VCS backend.
|
|
||||||
|
|
||||||
0.8.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Added global --user flag as shortcut for --install-option="--user". From
|
|
||||||
Ronny Pfannschmidt.
|
|
||||||
|
|
||||||
* Added support for `PyPI mirrors <http://pypi.python.org/mirrors>`_ as
|
|
||||||
defined in `PEP 381 <http://www.python.org/dev/peps/pep-0381/>`_, from
|
|
||||||
Jannis Leidel.
|
|
||||||
|
|
||||||
* Fixed issue #138 - Git revisions ignored. Thanks John-Scott Atlakson.
|
|
||||||
|
|
||||||
* Fixed issue #95 - Initial editable install of github package from a tag fails. Thanks John-Scott Atlakson.
|
|
||||||
|
|
||||||
* Fixed issue #107 - Can't install if a directory in cwd has the same name as the package you're installing.
|
|
||||||
|
|
||||||
* Fixed issue #39 - --install-option="--prefix=~/.local" ignored with -e.
|
|
||||||
Thanks Ronny Pfannschmidt and Wil Tan.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.8
|
|
||||||
---
|
|
||||||
|
|
||||||
* Track which ``build/`` directories pip creates, never remove directories
|
|
||||||
it doesn't create. From Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
* Pip now accepts file:// index URLs. Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* Various cleanup to make test-running more consistent and less fragile.
|
|
||||||
Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* Real Windows support (with passing tests). Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* ``pip-2.7`` etc. scripts are created (Python-version specific scripts)
|
|
||||||
|
|
||||||
* ``contrib/build-standalone`` script creates a runnable ``.zip`` form of
|
|
||||||
pip, from Jannis Leidel
|
|
||||||
|
|
||||||
* Editable git repos are updated when reinstalled
|
|
||||||
|
|
||||||
* Fix problem with ``--editable`` when multiple ``.egg-info/`` directories
|
|
||||||
are found.
|
|
||||||
|
|
||||||
* A number of VCS-related fixes for ``pip freeze``, from Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
* Significant test framework changes, from Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
0.7.2
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Set zip_safe=False to avoid problems some people are encountering where
|
|
||||||
pip is installed as a zip file.
|
|
||||||
|
|
||||||
0.7.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed opening of logfile with no directory name. Thanks Alexandre Conrad.
|
|
||||||
|
|
||||||
* Temporary files are consistently cleaned up, especially after
|
|
||||||
installing bundles, also from Alex Conrad.
|
|
||||||
|
|
||||||
* Tests now require at least ScriptTest 1.0.3.
|
|
||||||
|
|
||||||
0.7
|
|
||||||
---
|
|
||||||
|
|
||||||
* Fixed uninstallation on Windows
|
|
||||||
* Added ``pip search`` command.
|
|
||||||
* Tab-complete names of installed distributions for ``pip uninstall``.
|
|
||||||
* Support tab-completion when there is a global-option before the
|
|
||||||
subcommand.
|
|
||||||
* Install header files in standard (scheme-default) location when installing
|
|
||||||
outside a virtualenv. Install them to a slightly more consistent
|
|
||||||
non-standard location inside a virtualenv (since the standard location is
|
|
||||||
a non-writable symlink to the global location).
|
|
||||||
* pip now logs to a central location by default (instead of creating
|
|
||||||
``pip-log.txt`` all over the place) and constantly overwrites the
|
|
||||||
file in question. On Unix and Mac OS X this is ``'$HOME/.pip/pip.log'``
|
|
||||||
and on Windows it's ``'%HOME%\\pip\\pip.log'``. You are still able to
|
|
||||||
override this location with the ``$PIP_LOG_FILE`` environment variable.
|
|
||||||
For a complete (appended) logfile use the separate ``'--log'`` command line
|
|
||||||
option.
|
|
||||||
* Fixed an issue with Git that left an editable packge as a checkout of a
|
|
||||||
remote branch, even if the default behaviour would have been fine, too.
|
|
||||||
* Fixed installing from a Git tag with older versions of Git.
|
|
||||||
* Expand "~" in logfile and download cache paths.
|
|
||||||
* Speed up installing from Mercurial repositories by cloning without
|
|
||||||
updating the working copy multiple times.
|
|
||||||
* Fixed installing directly from directories (e.g.
|
|
||||||
``pip install path/to/dir/``).
|
|
||||||
* Fixed installing editable packages with ``svn+ssh`` URLs.
|
|
||||||
* Don't print unwanted debug information when running the freeze command.
|
|
||||||
* Create log file directory automatically. Thanks Alexandre Conrad.
|
|
||||||
* Make test suite easier to run successfully. Thanks Dave Abrahams.
|
|
||||||
* Fixed "pip install ." and "pip install .."; better error for directory
|
|
||||||
without setup.py. Thanks Alexandre Conrad.
|
|
||||||
* Support Debian/Ubuntu "dist-packages" in zip command. Thanks duckx.
|
|
||||||
* Fix relative --src folder. Thanks Simon Cross.
|
|
||||||
* Handle missing VCS with an error message. Thanks Alexandre Conrad.
|
|
||||||
* Added --no-download option to install; pairs with --no-install to separate
|
|
||||||
download and installation into two steps. Thanks Simon Cross.
|
|
||||||
* Fix uninstalling from requirements file containing -f, -i, or
|
|
||||||
--extra-index-url.
|
|
||||||
* Leftover build directories are now removed. Thanks Alexandre Conrad.
|
|
||||||
|
|
||||||
0.6.3
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed import error on Windows with regard to the backwards compatibility
|
|
||||||
package
|
|
||||||
|
|
||||||
0.6.2
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed uninstall when /tmp is on a different filesystem.
|
|
||||||
|
|
||||||
* Fixed uninstallation of distributions with namespace packages.
|
|
||||||
|
|
||||||
0.6.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Added support for the ``https`` and ``http-static`` schemes to the
|
|
||||||
Mercurial and ``ftp`` scheme to the Bazaar backend.
|
|
||||||
|
|
||||||
* Fixed uninstallation of scripts installed with easy_install.
|
|
||||||
|
|
||||||
* Fixed an issue in the package finder that could result in an
|
|
||||||
infinite loop while looking for links.
|
|
||||||
|
|
||||||
* Fixed issue with ``pip bundle`` and local files (which weren't being
|
|
||||||
copied into the bundle), from Whit Morriss.
|
|
||||||
|
|
||||||
0.6
|
|
||||||
---
|
|
||||||
|
|
||||||
* Add ``pip uninstall`` and uninstall-before upgrade (from Carl
|
|
||||||
Meyer).
|
|
||||||
|
|
||||||
* Extended configurability with config files and environment variables.
|
|
||||||
|
|
||||||
* Allow packages to be upgraded, e.g., ``pip install Package==0.1``
|
|
||||||
then ``pip install Package==0.2``.
|
|
||||||
|
|
||||||
* Allow installing/upgrading to Package==dev (fix "Source version does not
|
|
||||||
match target version" errors).
|
|
||||||
|
|
||||||
* Added command and option completion for bash and zsh.
|
|
||||||
|
|
||||||
* Extended integration with virtualenv by providing an option to
|
|
||||||
automatically use an active virtualenv and an option to warn if no active
|
|
||||||
virtualenv is found.
|
|
||||||
|
|
||||||
* Fixed a bug with pip install --download and editable packages, where
|
|
||||||
directories were being set with 0000 permissions, now defaults to 755.
|
|
||||||
|
|
||||||
* Fixed uninstallation of easy_installed console_scripts.
|
|
||||||
|
|
||||||
* Fixed uninstallation on Mac OS X Framework layout installs
|
|
||||||
|
|
||||||
* Fixed bug preventing uninstall of editables with source outside venv.
|
|
||||||
|
|
||||||
* Creates download cache directory if not existing.
|
|
||||||
|
|
||||||
0.5.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed a couple little bugs, with git and with extensions.
|
|
||||||
|
|
||||||
0.5
|
|
||||||
---
|
|
||||||
|
|
||||||
* Added ability to override the default log file name (``pip-log.txt``)
|
|
||||||
with the environmental variable ``$PIP_LOG_FILE``.
|
|
||||||
|
|
||||||
* Made the freeze command print installed packages to stdout instead of
|
|
||||||
writing them to a file. Use simple redirection (e.g.
|
|
||||||
``pip freeze > stable-req.txt``) to get a file with requirements.
|
|
||||||
|
|
||||||
* Fixed problem with freezing editable packages from a Git repository.
|
|
||||||
|
|
||||||
* Added support for base URLs using ``<base href='...'>`` when parsing
|
|
||||||
HTML pages.
|
|
||||||
|
|
||||||
* Fixed installing of non-editable packages from version control systems.
|
|
||||||
|
|
||||||
* Fixed issue with Bazaar's bzr+ssh scheme.
|
|
||||||
|
|
||||||
* Added --download-dir option to the install command to retrieve package
|
|
||||||
archives. If given an editable package it will create an archive of it.
|
|
||||||
|
|
||||||
* Added ability to pass local file and directory paths to ``--find-links``,
|
|
||||||
e.g. ``--find-links=file:///path/to/my/private/archive``
|
|
||||||
|
|
||||||
* Reduced the amount of console log messages when fetching a page to find a
|
|
||||||
distribution was problematic. The full messages can be found in pip-log.txt.
|
|
||||||
|
|
||||||
* Added ``--no-deps`` option to install ignore package dependencies
|
|
||||||
|
|
||||||
* Added ``--no-index`` option to ignore the package index (PyPI) temporarily
|
|
||||||
|
|
||||||
* Fixed installing editable packages from Git branches.
|
|
||||||
|
|
||||||
* Fixes freezing of editable packages from Mercurial repositories.
|
|
||||||
|
|
||||||
* Fixed handling read-only attributes of build files, e.g. of Subversion and
|
|
||||||
Bazaar on Windows.
|
|
||||||
|
|
||||||
* When downloading a file from a redirect, use the redirected
|
|
||||||
location's extension to guess the compression (happens specifically
|
|
||||||
when redirecting to a bitbucket.org tip.gz file).
|
|
||||||
|
|
||||||
* Editable freeze URLs now always use revision hash/id rather than tip or
|
|
||||||
branch names which could move.
|
|
||||||
|
|
||||||
* Fixed comparison of repo URLs so incidental differences such as
|
|
||||||
presence/absence of final slashes or quoted/unquoted special
|
|
||||||
characters don't trigger "ignore/switch/wipe/backup" choice.
|
|
||||||
|
|
||||||
* Fixed handling of attempt to checkout editable install to a
|
|
||||||
non-empty, non-repo directory.
|
|
||||||
|
|
||||||
0.4
|
|
||||||
---
|
|
||||||
|
|
||||||
* Make ``-e`` work better with local hg repositories
|
|
||||||
|
|
||||||
* Construct PyPI URLs the exact way easy_install constructs URLs (you
|
|
||||||
might notice this if you use a custom index that is
|
|
||||||
slash-sensitive).
|
|
||||||
|
|
||||||
* Improvements on Windows (from `Ionel Maries Cristian
|
|
||||||
<http://ionelmc.wordpress.com/>`_).
|
|
||||||
|
|
||||||
* Fixed problem with not being able to install private git repositories.
|
|
||||||
|
|
||||||
* Make ``pip zip`` zip all its arguments, not just the first.
|
|
||||||
|
|
||||||
* Fix some filename issues on Windows.
|
|
||||||
|
|
||||||
* Allow the ``-i`` and ``--extra-index-url`` options in requirements
|
|
||||||
files.
|
|
||||||
|
|
||||||
* Fix the way bundle components are unpacked and moved around, to make
|
|
||||||
bundles work.
|
|
||||||
|
|
||||||
* Adds ``-s`` option to allow the access to the global site-packages if a
|
|
||||||
virtualenv is to be created.
|
|
||||||
|
|
||||||
* Fixed support for Subversion 1.6.
|
|
||||||
|
|
||||||
0.3.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Improved virtualenv restart and various path/cleanup problems on win32.
|
|
||||||
|
|
||||||
* Fixed a regression with installing from svn repositories (when not
|
|
||||||
using ``-e``).
|
|
||||||
|
|
||||||
* Fixes when installing editable packages that put their source in a
|
|
||||||
subdirectory (like ``src/``).
|
|
||||||
|
|
||||||
* Improve ``pip -h``
|
|
||||||
|
|
||||||
0.3
|
|
||||||
---
|
|
||||||
|
|
||||||
* Added support for editable packages created from Git, Mercurial and Bazaar
|
|
||||||
repositories and ability to freeze them. Refactored support for version
|
|
||||||
control systems.
|
|
||||||
|
|
||||||
* Do not use ``sys.exit()`` from inside the code, instead use a
|
|
||||||
return. This will make it easier to invoke programmatically.
|
|
||||||
|
|
||||||
* Put the install record in ``Package.egg-info/installed-files.txt``
|
|
||||||
(previously they went in
|
|
||||||
``site-packages/install-record-Package.txt``).
|
|
||||||
|
|
||||||
* Fix a problem with ``pip freeze`` not including ``-e svn+`` when an
|
|
||||||
svn structure is peculiar.
|
|
||||||
|
|
||||||
* Allow ``pip -E`` to work with a virtualenv that uses a different
|
|
||||||
version of Python than the parent environment.
|
|
||||||
|
|
||||||
* Fixed Win32 virtualenv (``-E``) option.
|
|
||||||
|
|
||||||
* Search the links passed in with ``-f`` for packages.
|
|
||||||
|
|
||||||
* Detect zip files, even when the file doesn't have a ``.zip``
|
|
||||||
extension and it is served with the wrong Content-Type.
|
|
||||||
|
|
||||||
* Installing editable from existing source now works, like ``pip
|
|
||||||
install -e some/path/`` will install the package in ``some/path/``.
|
|
||||||
Most importantly, anything that package requires will also be
|
|
||||||
installed by pip.
|
|
||||||
|
|
||||||
* Add a ``--path`` option to ``pip un/zip``, so you can avoid zipping
|
|
||||||
files that are outside of where you expect.
|
|
||||||
|
|
||||||
* Add ``--simulate`` option to ``pip zip``.
|
|
||||||
|
|
||||||
0.2.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed small problem that prevented using ``pip.py`` without actually
|
|
||||||
installing pip.
|
|
||||||
|
|
||||||
* Fixed ``--upgrade``, which would download and appear to install
|
|
||||||
upgraded packages, but actually just reinstall the existing package.
|
|
||||||
|
|
||||||
* Fixed Windows problem with putting the install record in the right
|
|
||||||
place, and generating the ``pip`` script with Setuptools.
|
|
||||||
|
|
||||||
* Download links that include embedded spaces or other unsafe
|
|
||||||
characters (those characters get %-encoded).
|
|
||||||
|
|
||||||
* Fixed use of URLs in requirement files, and problems with some blank
|
|
||||||
lines.
|
|
||||||
|
|
||||||
* Turn some tar file errors into warnings.
|
|
||||||
|
|
||||||
0.2
|
|
||||||
---
|
|
||||||
|
|
||||||
* Renamed to ``pip``, and to install you now do ``pip install
|
|
||||||
PACKAGE``
|
|
||||||
|
|
||||||
* Added command ``pip zip PACKAGE`` and ``pip unzip PACKAGE``. This
|
|
||||||
is particularly intended for Google App Engine to manage libraries
|
|
||||||
to stay under the 1000-file limit.
|
|
||||||
|
|
||||||
* Some fixes to bundles, especially editable packages and when
|
|
||||||
creating a bundle using unnamed packages (like just an svn
|
|
||||||
repository without ``#egg=Package``).
|
|
||||||
|
|
||||||
0.1.4
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Added an option ``--install-option`` to pass options to pass
|
|
||||||
arguments to ``setup.py install``
|
|
||||||
|
|
||||||
* ``.svn/`` directories are no longer included in bundles, as these
|
|
||||||
directories are specific to a version of svn -- if you build a
|
|
||||||
bundle on a system with svn 1.5, you can't use the checkout on a
|
|
||||||
system with svn 1.4. Instead a file ``svn-checkout.txt`` is
|
|
||||||
included that notes the original location and revision, and the
|
|
||||||
command you can use to turn it back into an svn checkout. (Probably
|
|
||||||
unpacking the bundle should, maybe optionally, recreate this
|
|
||||||
information -- but that is not currently implemented, and it would
|
|
||||||
require network access.)
|
|
||||||
|
|
||||||
* Avoid ambiguities over project name case, where for instance
|
|
||||||
MyPackage and mypackage would be considered different packages.
|
|
||||||
This in particular caused problems on Macs, where ``MyPackage/`` and
|
|
||||||
``mypackage/`` are the same directory.
|
|
||||||
|
|
||||||
* Added support for an environmental variable
|
|
||||||
``$PIP_DOWNLOAD_CACHE`` which will cache package downloads, so
|
|
||||||
future installations won't require large downloads. Network access
|
|
||||||
is still required, but just some downloads will be avoided when
|
|
||||||
using this.
|
|
||||||
|
|
||||||
0.1.3
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Always use ``svn checkout`` (not ``export``) so that
|
|
||||||
``tag_svn_revision`` settings give the revision of the package.
|
|
||||||
|
|
||||||
* Don't update checkouts that came from ``.pybundle`` files.
|
|
||||||
|
|
||||||
0.1.2
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Improve error text when there are errors fetching HTML pages when
|
|
||||||
seeking packages.
|
|
||||||
|
|
||||||
* Improve bundles: include empty directories, make them work with
|
|
||||||
editable packages.
|
|
||||||
|
|
||||||
* If you use ``-E env`` and the environment ``env/`` doesn't exist, a
|
|
||||||
new virtual environment will be created.
|
|
||||||
|
|
||||||
* Fix ``dependency_links`` for finding packages.
|
|
||||||
|
|
||||||
0.1.1
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Fixed a NameError exception when running pip outside of a
|
|
||||||
virtualenv environment.
|
|
||||||
|
|
||||||
* Added HTTP proxy support (from Prabhu Ramachandran)
|
|
||||||
|
|
||||||
* Fixed use of ``hashlib.md5`` on python2.5+ (also from Prabhu
|
|
||||||
Ramachandran)
|
|
||||||
|
|
||||||
0.1
|
|
||||||
---
|
|
||||||
|
|
||||||
* Initial release
|
|
||||||
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2008-2014 The pip developers (see AUTHORS.txt file)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
Vendored
-9
@@ -1,9 +0,0 @@
|
|||||||
include AUTHORS.txt
|
|
||||||
include LICENSE.txt
|
|
||||||
include CHANGES.txt
|
|
||||||
include PROJECT.txt
|
|
||||||
include pip/cacert.pem
|
|
||||||
recursive-include docs *.rst
|
|
||||||
recursive-include docs *.html
|
|
||||||
recursive-exclude docs/_build *.rst
|
|
||||||
prune docs/_build/_sources
|
|
||||||
Vendored
-86
@@ -1,86 +0,0 @@
|
|||||||
Metadata-Version: 1.1
|
|
||||||
Name: pip
|
|
||||||
Version: 1.5.2
|
|
||||||
Summary: A tool for installing and managing Python packages.
|
|
||||||
Home-page: http://www.pip-installer.org
|
|
||||||
Author: The pip developers
|
|
||||||
Author-email: python-virtualenv@groups.google.com
|
|
||||||
License: MIT
|
|
||||||
Description:
|
|
||||||
Project Info
|
|
||||||
============
|
|
||||||
|
|
||||||
* Project Page: https://github.com/pypa/pip
|
|
||||||
* Install howto: http://www.pip-installer.org/en/latest/installing.html
|
|
||||||
* Changelog: http://www.pip-installer.org/en/latest/news.html
|
|
||||||
* Bug Tracking: https://github.com/pypa/pip/issues
|
|
||||||
* Mailing list: http://groups.google.com/group/python-virtualenv
|
|
||||||
* Docs: http://www.pip-installer.org/
|
|
||||||
* IRC: #pip on Freenode.
|
|
||||||
|
|
||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
Install a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage==1.0
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Show what files were installed:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show --files SomePackage
|
|
||||||
Name: SomePackage
|
|
||||||
Version: 1.0
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Files:
|
|
||||||
../somepackage/__init__.py
|
|
||||||
[...]
|
|
||||||
|
|
||||||
List what packages are outdated:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
SomePackage (Current: 1.0 Latest: 2.0)
|
|
||||||
|
|
||||||
Upgrade a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Found existing installation: SomePackage 1.0
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
Running setup.py install for SomePackage
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Uninstall a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall SomePackage
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
/my/env/lib/pythonx.x/site-packages/somepackage
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
Keywords: easy_install distutils setuptools egg virtualenv
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: MIT License
|
|
||||||
Classifier: Topic :: Software Development :: Build Tools
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.1
|
|
||||||
Classifier: Programming Language :: Python :: 3.2
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Vendored
-10
@@ -1,10 +0,0 @@
|
|||||||
Project Info
|
|
||||||
============
|
|
||||||
|
|
||||||
* Project Page: https://github.com/pypa/pip
|
|
||||||
* Install howto: http://www.pip-installer.org/en/latest/installing.html
|
|
||||||
* Changelog: http://www.pip-installer.org/en/latest/news.html
|
|
||||||
* Bug Tracking: https://github.com/pypa/pip/issues
|
|
||||||
* Mailing list: http://groups.google.com/group/python-virtualenv
|
|
||||||
* Docs: http://www.pip-installer.org/
|
|
||||||
* IRC: #pip on Freenode.
|
|
||||||
Vendored
-10
@@ -1,10 +0,0 @@
|
|||||||
pip
|
|
||||||
===
|
|
||||||
|
|
||||||
.. image:: https://pypip.in/v/pip/badge.png
|
|
||||||
:target: https://crate.io/packages/pip
|
|
||||||
|
|
||||||
.. image:: https://secure.travis-ci.org/pypa/pip.png?branch=develop
|
|
||||||
:target: http://travis-ci.org/pypa/pip
|
|
||||||
|
|
||||||
For documentation, see http://www.pip-installer.org
|
|
||||||
-126
@@ -1,126 +0,0 @@
|
|||||||
.. _`Configuration`:
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
=================
|
|
||||||
|
|
||||||
.. _config-file:
|
|
||||||
|
|
||||||
Config file
|
|
||||||
------------
|
|
||||||
|
|
||||||
pip allows you to set all command line option defaults in a standard ini
|
|
||||||
style config file.
|
|
||||||
|
|
||||||
The names and locations of the configuration files vary slightly across
|
|
||||||
platforms.
|
|
||||||
|
|
||||||
* On Unix and Mac OS X the configuration file is: :file:`$HOME/.pip/pip.conf`
|
|
||||||
* On Windows, the configuration file is: :file:`%HOME%\\pip\\pip.ini`
|
|
||||||
|
|
||||||
You can set a custom path location for the config file using the environment variable ``PIP_CONFIG_FILE``.
|
|
||||||
|
|
||||||
The names of the settings are derived from the long command line option, e.g.
|
|
||||||
if you want to use a different package index (``--index-url``) and set the
|
|
||||||
HTTP timeout (``--default-timeout``) to 60 seconds your config file would
|
|
||||||
look like this:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[global]
|
|
||||||
timeout = 60
|
|
||||||
index-url = http://download.zope.org/ppix
|
|
||||||
|
|
||||||
Each subcommand can be configured optionally in its own section so that every
|
|
||||||
global setting with the same name will be overridden; e.g. decreasing the
|
|
||||||
``timeout`` to ``10`` seconds when running the `freeze`
|
|
||||||
(`Freezing Requirements <./#freezing-requirements>`_) command and using
|
|
||||||
``60`` seconds for all other commands is possible with:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[global]
|
|
||||||
timeout = 60
|
|
||||||
|
|
||||||
[freeze]
|
|
||||||
timeout = 10
|
|
||||||
|
|
||||||
|
|
||||||
Boolean options like ``--ignore-installed`` or ``--no-dependencies`` can be
|
|
||||||
set like this:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[install]
|
|
||||||
ignore-installed = true
|
|
||||||
no-dependencies = yes
|
|
||||||
|
|
||||||
Appending options like ``--find-links`` can be written on multiple lines:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[global]
|
|
||||||
find-links =
|
|
||||||
http://download.example.com
|
|
||||||
|
|
||||||
[install]
|
|
||||||
find-links =
|
|
||||||
http://mirror1.example.com
|
|
||||||
http://mirror2.example.com
|
|
||||||
|
|
||||||
|
|
||||||
Environment Variables
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
pip's command line options can be set with
|
|
||||||
environment variables using the format ``PIP_<UPPER_LONG_NAME>`` . Dashes (``-``) have to replaced with underscores (``_``).
|
|
||||||
|
|
||||||
For example, to set the default timeout::
|
|
||||||
|
|
||||||
export PIP_DEFAULT_TIMEOUT=60
|
|
||||||
|
|
||||||
This is the same as passing the option to pip directly::
|
|
||||||
|
|
||||||
pip --default-timeout=60 [...]
|
|
||||||
|
|
||||||
To set options that can be set multiple times on the command line, just add spaces in between values. For example::
|
|
||||||
|
|
||||||
export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com"
|
|
||||||
|
|
||||||
is the same as calling::
|
|
||||||
|
|
||||||
pip install --find-links=http://mirror1.example.com --find-links=http://mirror2.example.com
|
|
||||||
|
|
||||||
|
|
||||||
Config Precedence
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Command line options have precedence over environment variables, which have precedence over the config file.
|
|
||||||
|
|
||||||
Within the config file, command specific sections have precedence over the global section.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- ``--host=foo`` overrides ``PIP_HOST=foo``
|
|
||||||
- ``PIP_HOST=foo`` overrides a config file with ``[global] host = foo``
|
|
||||||
- A command specific section in the config file ``[<command>] host = bar``
|
|
||||||
overrides the option with same name in the ``[global]`` config file section
|
|
||||||
|
|
||||||
|
|
||||||
Command Completion
|
|
||||||
------------------
|
|
||||||
|
|
||||||
pip comes with support for command line completion in bash and zsh.
|
|
||||||
|
|
||||||
To setup for bash::
|
|
||||||
|
|
||||||
$ pip completion --bash >> ~/.profile
|
|
||||||
|
|
||||||
To setup for zsh::
|
|
||||||
|
|
||||||
$ pip completion --zsh >> ~/.zprofile
|
|
||||||
|
|
||||||
Alternatively, you can use the result of the ``completion`` command
|
|
||||||
directly with the eval function of you shell, e.g. by adding the following to your startup file::
|
|
||||||
|
|
||||||
eval "`pip completion --bash`"
|
|
||||||
|
|
||||||
Vendored
-453
@@ -1,453 +0,0 @@
|
|||||||
============
|
|
||||||
Cookbook
|
|
||||||
============
|
|
||||||
|
|
||||||
.. _`Requirements Files`:
|
|
||||||
|
|
||||||
Requirements Files
|
|
||||||
******************
|
|
||||||
|
|
||||||
"Requirements files" are files containing a list of items to be
|
|
||||||
installed using :ref:`pip install -r <install_--requirement>` like so:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
Details on the format of the files are here: :ref:`Requirements File Format`.
|
|
||||||
|
|
||||||
|
|
||||||
There are 3 common use cases for requirements files:
|
|
||||||
|
|
||||||
1. When installing many things, it's easier to use a requirements file,
|
|
||||||
than specifying them all on the command line.
|
|
||||||
|
|
||||||
2. Requirements files are often used to hold the result from :ref:`pip freeze`
|
|
||||||
for the purpose of achieving :ref:`repeatable installations <Repeatability>`.
|
|
||||||
In this case, your requirement file contains a pinned version of everything
|
|
||||||
that was installed when `pip freeze` was run.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip freeze > requirements.txt
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
3. Requirements files can be used to force pip to properly resolve dependencies.
|
|
||||||
As it is now, pip `doesn't have true dependency resolution
|
|
||||||
<https://github.com/pypa/pip/issues/988>`_, but instead simply uses the first
|
|
||||||
specification it finds for a project. E.g if `pkg1` requires `pkg3>=1.0` and
|
|
||||||
`pkg2` requires `pkg3>=1.0,<=2.0`, and if `pkg1` is resolved first, pip will
|
|
||||||
only use `pkg3>=1.0`, and could easily end up installing a version of `pkg3`
|
|
||||||
that conflicts with the needs of `pkg2`. To solve this problem, you can
|
|
||||||
place `pkg3>=1.0,<=2.0` (i.e. the correct specification) into your
|
|
||||||
requirements file directly along with the other top level requirements. Like
|
|
||||||
so:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pkg1
|
|
||||||
pkg2
|
|
||||||
pkg3>=1.0,<=2.0
|
|
||||||
|
|
||||||
|
|
||||||
It's important to be clear that pip determines package dependencies using `install_requires metadata
|
|
||||||
<http://pythonhosted.org/setuptools/setuptools.html#declaring-dependencies>`_, not by discovering `requirements.txt`
|
|
||||||
files embedded in projects.
|
|
||||||
|
|
||||||
For a good discussion on the conceptual differences between setup.py and
|
|
||||||
requirements, see `"setup.py vs requirements.txt" (an article by Donald Stufft)
|
|
||||||
<https://caremad.io/blog/setup-vs-requirement/>`_
|
|
||||||
|
|
||||||
See also:
|
|
||||||
|
|
||||||
* :ref:`Requirements File Format`
|
|
||||||
* :ref:`pip freeze`
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Fast & Local Installs`:
|
|
||||||
|
|
||||||
Fast & Local Installs
|
|
||||||
*********************
|
|
||||||
|
|
||||||
Often, you will want a fast install from local archives, without probing PyPI.
|
|
||||||
|
|
||||||
First, :ref:`download the archives <Downloading Archives>` that fulfill your requirements::
|
|
||||||
|
|
||||||
$ pip install --download <DIR> -r requirements.txt
|
|
||||||
|
|
||||||
Then, install using :ref:`--find-links <--find-links>` and :ref:`--no-index <--no-index>`::
|
|
||||||
|
|
||||||
$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Building and Installing Wheels`:
|
|
||||||
|
|
||||||
Building and Installing Wheels
|
|
||||||
******************************
|
|
||||||
|
|
||||||
"Wheel" is a built, archive format that can greatly speed installation compared
|
|
||||||
to building and installing from source archives. For more information, see the
|
|
||||||
`Wheel docs <http://wheel.readthedocs.org>`_ ,
|
|
||||||
`PEP427 <http://www.python.org/dev/peps/pep-0427>`_, and
|
|
||||||
`PEP425 <http://www.python.org/dev/peps/pep-0425>`_
|
|
||||||
|
|
||||||
Pip prefers Wheels where they are available, to disable this use the
|
|
||||||
:ref:`--no-use-wheel <install_--no-use-wheel>` flag for :ref:`pip install`.
|
|
||||||
|
|
||||||
If no satisfactory wheels are found, pip will default to finding source archives.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
pip currently disallows platform-specific wheels (except for Windows and Mac)
|
|
||||||
from being downloaded from PyPI. See :ref:`Should you upload wheels to PyPI`.
|
|
||||||
|
|
||||||
|
|
||||||
To install directly from a wheel archive:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip install SomePackage-1.0-py2.py3-none-any.whl
|
|
||||||
|
|
||||||
|
|
||||||
pip additionally offers :ref:`pip wheel` as a convenience, to build wheels for
|
|
||||||
your requirements and dependencies.
|
|
||||||
|
|
||||||
:ref:`pip wheel` requires the `wheel package <https://pypi.python.org/pypi/wheel>`_ to be installed,
|
|
||||||
which provides the "bdist_wheel" setuptools extension that it uses.
|
|
||||||
|
|
||||||
To build wheels for your requirements and all their dependencies to a local directory:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip install wheel
|
|
||||||
pip wheel --wheel-dir=/local/wheels -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
Currently, when ``pip wheel`` finds a wheel for one of your requirements
|
|
||||||
already on PyPI, it does not rebuild, and it does not place the file in your
|
|
||||||
wheelhouse dir. There is an issue open to change this
|
|
||||||
(https://github.com/pypa/pip/issues/1310)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
And *then* to install those requirements just using your local directory of wheels (and not from PyPI):
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip install --no-index --find-links=/local/wheels -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Should you upload wheels to PyPI`:
|
|
||||||
|
|
||||||
Should you upload wheels to PyPI?
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
The wheel format can eliminate a lot of redundant compilation but, alas,
|
|
||||||
it's not generally advisable to upload your pre-compiled linux-x86-64
|
|
||||||
library binding to pypi. Wheel's tags are only designed to express
|
|
||||||
the most important *Python*-specific compatibility concerns (Python
|
|
||||||
version, ABI, and architecture) but do not represent other important
|
|
||||||
binary compatibility factors such as the OS release, patch level, and
|
|
||||||
the versions of all the shared library dependencies of any extensions
|
|
||||||
inside the package.
|
|
||||||
|
|
||||||
Rather than representing all possible compatibility information in the
|
|
||||||
wheel itself, the wheel design suggests distribution-specific build
|
|
||||||
services (e.g. a separate index for Fedora Linux binary wheels, compiled
|
|
||||||
by the index maintainer). This is the same solution taken by Linux
|
|
||||||
distributions which all re-compile their own packages instead of installing
|
|
||||||
each other's binary packages.
|
|
||||||
|
|
||||||
Some kinds of precompiled C extension modules can make sense on PyPI, even
|
|
||||||
for Linux. Good examples include things that can be sensibly statically
|
|
||||||
linked (a cryptographic hash function; an accelerator module that is
|
|
||||||
not a binding for an external library); the best example of something
|
|
||||||
that shouldn't be statically linked is a library like openssl that needs
|
|
||||||
to be constantly kept up-to-date for security. Regardless of whether a
|
|
||||||
compatible pre-build package is available, many Linux users will prefer
|
|
||||||
to always compile their own anyway.
|
|
||||||
|
|
||||||
On Windows and Mac, the case for binary wheels on pypi is stronger due to the
|
|
||||||
systems being much more uniform than Linux and because it's harder for the end
|
|
||||||
user to compile their own. Windows and Mac wheels uploaded to pypi should be
|
|
||||||
compatible with the Python distributions downloaded from http://python.org/. If
|
|
||||||
you already upload other binary formats to pypi, upload wheels as well. Unlike
|
|
||||||
the older formats, wheels are compatible with virtual environments.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Downloading Archives`:
|
|
||||||
|
|
||||||
Downloading archives
|
|
||||||
********************
|
|
||||||
|
|
||||||
pip allows you to *just* download the source archives for your requirements, without installing anything and without regard to what's already installed.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --download <DIR> -r requirements.txt
|
|
||||||
|
|
||||||
or, for a specific package::
|
|
||||||
|
|
||||||
$ pip install --download <DIR> SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
Unpacking archives
|
|
||||||
******************
|
|
||||||
|
|
||||||
pip allows you to *just* unpack archives to a build directory without installing them to site-packages. This can be useful to troubleshoot install errors or to inspect what is being installed.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --no-install SomePackage
|
|
||||||
|
|
||||||
If you're in a virtualenv, the build dir is ``<virtualenv path>/build``. Otherwise, it's ``<OS temp dir>/pip-build-<username>``
|
|
||||||
|
|
||||||
Afterwards, to finish the job of installing unpacked archives, run::
|
|
||||||
|
|
||||||
$ pip install --no-download SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Non-recursive upgrades
|
|
||||||
************************
|
|
||||||
|
|
||||||
``pip install --upgrade`` is currently written to perform a recursive upgrade.
|
|
||||||
|
|
||||||
E.g. supposing:
|
|
||||||
|
|
||||||
* `SomePackage-1.0` requires `AnotherPackage>=1.0`
|
|
||||||
* `SomePackage-2.0` requires `AnotherPackage>=1.0` and `OneMorePoject==1.0`
|
|
||||||
* `SomePackage-1.0` and `AnotherPackage-1.0` are currently installed
|
|
||||||
* `SomePackage-2.0` and `AnotherPackage-2.0` are the latest versions available on PyPI.
|
|
||||||
|
|
||||||
Running ``pip install --upgrade SomePackage`` would upgrade `SomePackage` *and* `AnotherPackage`
|
|
||||||
despite `AnotherPackage` already being satisifed.
|
|
||||||
|
|
||||||
If you would like to perform a non-recursive upgrade perform these 2 steps::
|
|
||||||
|
|
||||||
pip install --upgrade --no-deps SomePackage
|
|
||||||
pip install SomePackage
|
|
||||||
|
|
||||||
The first line will upgrade `SomePackage`, but not dependencies like `AnotherPackage`. The 2nd line will fill in new dependencies like `OneMorePackage`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Repeatability`:
|
|
||||||
|
|
||||||
Ensuring Repeatability
|
|
||||||
**********************
|
|
||||||
|
|
||||||
Three things are required to fully guarantee a repeatable installation using requirements files.
|
|
||||||
|
|
||||||
1. The requirements file was generated by ``pip freeze`` or you're sure it only
|
|
||||||
contains requirements that specify a specific version.
|
|
||||||
2. The installation is performed using :ref:`--no-deps <install_--no-deps>`.
|
|
||||||
This guarantees that only what is explicitly listed in the requirements file is
|
|
||||||
installed.
|
|
||||||
3. The installation is performed against an index or find-links location that is
|
|
||||||
guaranteed to *not* allow archives to be changed and updated without a
|
|
||||||
version increase. Unfortunately, this is *not* true on PyPI. It is possible
|
|
||||||
for the same pypi distribution to have a different hash over time. Project
|
|
||||||
authors are allowed to delete a distribution, and then upload a new one with
|
|
||||||
the same name and version, but a different hash. See `Issue #1175
|
|
||||||
<https://github.com/pypa/pip/issues/1175>`_ for plans to add hash
|
|
||||||
confirmation to pip, or a new "lock file" notion, but for now, know that the `peep
|
|
||||||
project <https://pypi.python.org/pypi/peep>`_ offers this feature on top of pip
|
|
||||||
using requirements file comments.
|
|
||||||
|
|
||||||
User Installs
|
|
||||||
*************
|
|
||||||
|
|
||||||
With Python 2.6 came the `"user scheme" for installation
|
|
||||||
<http://docs.python.org/install/index.html#alternate-installation-the-user-scheme>`_, which means that all
|
|
||||||
Python distributions support an alternative install location that is specific to a user.
|
|
||||||
The default location for each OS is explained in the python documentation
|
|
||||||
for the `site.USER_BASE <http://docs.python.org/library/site.html#site.USER_BASE>`_ variable.
|
|
||||||
This mode of installation can be turned on by
|
|
||||||
specifying the :ref:`--user <install_--user>` option to ``pip install``.
|
|
||||||
|
|
||||||
Moreover, the "user scheme" can be customized by setting the
|
|
||||||
``PYTHONUSERBASE`` environment variable, which updates the value of ``site.USER_BASE``.
|
|
||||||
|
|
||||||
To install "SomePackage" into an environment with site.USER_BASE customized to '/myappenv', do the following::
|
|
||||||
|
|
||||||
export PYTHONUSERBASE=/myappenv
|
|
||||||
pip install --user SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
``pip install --user`` follows four rules:
|
|
||||||
|
|
||||||
#. When globally installed packages are on the python path, and they *conflict*
|
|
||||||
with the installation requirements, they are ignored, and *not*
|
|
||||||
uninstalled.
|
|
||||||
#. When globally installed packages are on the python path, and they *satisfy*
|
|
||||||
the installation requirements, pip does nothing, and reports that
|
|
||||||
requirement is satisfied (similar to how global packages can satisfy
|
|
||||||
requirements when installing packages in a ``--system-site-packages``
|
|
||||||
virtualenv).
|
|
||||||
#. pip will not perform a ``--user`` install in a ``--no-site-packages``
|
|
||||||
virtualenv (i.e. the default kind of virtualenv), due to the user site not
|
|
||||||
being on the python path. The installation would be pointless.
|
|
||||||
#. In a ``--system-site-packages`` virtualenv, pip will not install a package
|
|
||||||
that conflicts with a package in the virtualenv site-packages. The --user
|
|
||||||
installation would lack sys.path precedence and be pointless.
|
|
||||||
|
|
||||||
|
|
||||||
To make the rules clearer, here are some examples:
|
|
||||||
|
|
||||||
|
|
||||||
From within a ``--no-site-packages`` virtualenv (i.e. the default kind)::
|
|
||||||
|
|
||||||
$ pip install --user SomePackage
|
|
||||||
Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
|
|
||||||
|
|
||||||
|
|
||||||
From within a ``--system-site-packages`` virtualenv where ``SomePackage==0.3`` is already installed in the virtualenv::
|
|
||||||
|
|
||||||
$ pip install --user SomePackage==0.4
|
|
||||||
Will not install to the user site because it will lack sys.path precedence
|
|
||||||
|
|
||||||
|
|
||||||
From within a real python, where ``SomePackage`` is *not* installed globally::
|
|
||||||
|
|
||||||
$ pip install --user SomePackage
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
From within a real python, where ``SomePackage`` *is* installed globally, but is *not* the latest version::
|
|
||||||
|
|
||||||
$ pip install --user SomePackage
|
|
||||||
[...]
|
|
||||||
Requirement already satisfied (use --upgrade to upgrade)
|
|
||||||
|
|
||||||
$ pip install --user --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
From within a real python, where ``SomePackage`` *is* installed globally, and is the latest version::
|
|
||||||
|
|
||||||
$ pip install --user SomePackage
|
|
||||||
[...]
|
|
||||||
Requirement already satisfied (use --upgrade to upgrade)
|
|
||||||
|
|
||||||
$ pip install --user --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Requirement already up-to-date: SomePackage
|
|
||||||
|
|
||||||
# force the install
|
|
||||||
$ pip install --user --ignore-installed SomePackage
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Controlling setup_requires
|
|
||||||
**************************
|
|
||||||
|
|
||||||
Setuptools offers the ``setup_requires``
|
|
||||||
`setup() keyword <http://pythonhosted.org/setuptools/setuptools.html#new-and-changed-setup-keywords>`_
|
|
||||||
for specifying dependencies that need to be present in order for the `setup.py` script to run.
|
|
||||||
Internally, Setuptools uses ``easy_install`` to fulfill these dependencies.
|
|
||||||
|
|
||||||
pip has no way to control how these dependencies are located.
|
|
||||||
None of the :ref:`Package Index Options <Package Index Options>` have an effect.
|
|
||||||
|
|
||||||
The solution is to configure a "system" or "personal"
|
|
||||||
`Distutils configuration file <http://docs.python.org/2/install/index.html#distutils-configuration-files>`_
|
|
||||||
to manage the fulfillment.
|
|
||||||
|
|
||||||
For example, to have the dependency located at an alternate index, add this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[easy_install]
|
|
||||||
index_url = https://my.index-mirror.com
|
|
||||||
|
|
||||||
To have the dependency located from a local directory and not crawl PyPI, add this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[easy_install]
|
|
||||||
allow_hosts = ''
|
|
||||||
find_links = file:///path/to/local/archives
|
|
||||||
|
|
||||||
|
|
||||||
Upgrading from distribute to setuptools
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
`distribute`_ has now been merged into `setuptools`_, and it is recommended to upgrade to setuptools when possible.
|
|
||||||
|
|
||||||
To upgrade from `distribute`_ to `setuptools`_ using pip, run::
|
|
||||||
|
|
||||||
pip install --upgrade setuptools
|
|
||||||
|
|
||||||
"ImportError: No module named setuptools"
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
Although using the upgrade command above works in isolation, it's possible to get
|
|
||||||
"ImportError: No module named setuptools" when using pip<1.4 to upgrade a
|
|
||||||
package that depends on setuptools or distribute.
|
|
||||||
|
|
||||||
e.g. when running a command like this: `pip install --upgrade pyramid`
|
|
||||||
|
|
||||||
Solution
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
To prevent the problem in *new* environments (that aren't broken yet):
|
|
||||||
|
|
||||||
* Option 1:
|
|
||||||
|
|
||||||
* *First* run `pip install -U setuptools`,
|
|
||||||
* *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
* Option 2:
|
|
||||||
|
|
||||||
* Upgrade pip using :ref:`get-pip <get-pip>`
|
|
||||||
* *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
To fix the problem once it's occurred, you'll need to manually install the new
|
|
||||||
setuptools, then rerun the upgrade that failed.
|
|
||||||
|
|
||||||
1. Download `ez_setup.py` (https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py)
|
|
||||||
2. Run `python ez_setup.py`
|
|
||||||
3. Then rerun your upgrade (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
|
|
||||||
Cause
|
|
||||||
~~~~~
|
|
||||||
|
|
||||||
distribute-0.7.3 is just an empty wrapper that only serves to require the new
|
|
||||||
setuptools (setuptools>=0.7) so that it will be installed. (If you don't know
|
|
||||||
yet, the "new setuptools" is a merge of distribute and setuptools back into one
|
|
||||||
project).
|
|
||||||
|
|
||||||
distribute-0.7.3 does its job well, when the upgrade is done in isolation.
|
|
||||||
E.g. if you're currently on distribute-0.6.X, then running `pip install -U
|
|
||||||
setuptools` works fine to upgrade you to setuptools>=0.7.
|
|
||||||
|
|
||||||
The problem occurs when:
|
|
||||||
|
|
||||||
1. you are currently using an older distribute (i.e. 0.6.X)
|
|
||||||
2. and you try to use pip to upgrade a package that *depends* on setuptools or
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
As part of the upgrade process, pip builds an install list that ends up
|
|
||||||
including distribute-0.7.3 and setuptools>=0.7 , but they can end up being
|
|
||||||
separated by other dependencies in the list, so what can happen is this:
|
|
||||||
|
|
||||||
1. pip uninstalls the existing distribute
|
|
||||||
2. pip installs distribute-0.7.3 (which has no importable setuptools, that pip
|
|
||||||
*needs* internally to function)
|
|
||||||
3. pip moves on to install another dependency (before setuptools>=0.7) and is
|
|
||||||
unable to proceed without the setuptools package
|
|
||||||
|
|
||||||
Note that pip v1.4 has fixes to prevent this. distribute-0.7.3 (or
|
|
||||||
setuptools>=0.7) by themselves cannot prevent this kind of problem.
|
|
||||||
|
|
||||||
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
|
||||||
.. _distribute: https://pypi.python.org/pypi/distribute
|
|
||||||
.. _PyPI: https://pypi.python.org
|
|
||||||
-126
@@ -1,126 +0,0 @@
|
|||||||
===========
|
|
||||||
Development
|
|
||||||
===========
|
|
||||||
|
|
||||||
Pull Requests
|
|
||||||
=============
|
|
||||||
|
|
||||||
Submit Pull Requests against the `develop` branch.
|
|
||||||
|
|
||||||
Provide a good description of what you're doing and why.
|
|
||||||
|
|
||||||
Provide tests that cover your changes and try to run the tests locally first.
|
|
||||||
|
|
||||||
Automated Testing
|
|
||||||
=================
|
|
||||||
|
|
||||||
All pull requests and merges to 'develop' branch are tested in `Travis <https://travis-ci.org/>`_
|
|
||||||
based on our `.travis.yml file <https://github.com/pypa/pip/blob/develop/.travis.yml>`_.
|
|
||||||
|
|
||||||
Usually, a link to your specific travis build appears in pull requests, but if not,
|
|
||||||
you can find it on our `travis pull requests page <https://travis-ci.org/pypa/pip/pull_requests>`_
|
|
||||||
|
|
||||||
The only way to trigger Travis to run again for a pull request, is to submit another change to the pull branch.
|
|
||||||
|
|
||||||
We also have Jenkins CI that runs regularly for certain python versions on windows and centos.
|
|
||||||
|
|
||||||
Running tests
|
|
||||||
=============
|
|
||||||
|
|
||||||
OS Requirements: subversion, bazaar, git, and mercurial.
|
|
||||||
|
|
||||||
Python Requirements: tox or pytest, virtualenv, scripttest, and mock
|
|
||||||
|
|
||||||
Ways to run the tests locally:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ tox -e py33 # The preferred way to run the tests, can use pyNN to
|
|
||||||
# run for a particular version or leave off the -e to
|
|
||||||
# run for all versions.
|
|
||||||
$ python setup.py test # Using the setuptools test plugin
|
|
||||||
$ py.test # Using py.test directly
|
|
||||||
$ tox # Using tox against pip's tox.ini
|
|
||||||
|
|
||||||
|
|
||||||
Getting Involved
|
|
||||||
================
|
|
||||||
|
|
||||||
The pip project welcomes help in the following ways:
|
|
||||||
|
|
||||||
- Making Pull Requests for code, tests, or docs.
|
|
||||||
- Commenting on open issues and pull requests.
|
|
||||||
- Helping to answer questions on the mailing list.
|
|
||||||
|
|
||||||
If you want to become an official maintainer, start by helping out.
|
|
||||||
|
|
||||||
Later, when you think you're ready, get in touch with one of the maintainers,
|
|
||||||
and they will initiate a vote.
|
|
||||||
|
|
||||||
Release Process
|
|
||||||
===============
|
|
||||||
|
|
||||||
This process includes virtualenv, since pip releases necessitate a virtualenv release.
|
|
||||||
|
|
||||||
As an example, the instructions assume we're releasing pip-1.4, and virtualenv-1.10.
|
|
||||||
|
|
||||||
1. Upgrade setuptools, if needed:
|
|
||||||
|
|
||||||
#. Upgrade setuptools in ``virtualenv/develop`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. Create a pull request against ``pip/develop`` with a modified ``.travis.yml`` file that installs virtualenv from ``virtualenv/develop``, to confirm the travis builds are still passing.
|
|
||||||
|
|
||||||
2. Create Release branches:
|
|
||||||
|
|
||||||
#. Create ``pip/release-1.4`` branch.
|
|
||||||
#. In ``pip/develop``, change ``pip.version`` to '1.5.dev1'.
|
|
||||||
#. Create ``virtualenv/release-1.10`` branch.
|
|
||||||
#. In ``virtualenv/develop``, change ``virtualenv.version`` to '1.11.dev1'.
|
|
||||||
|
|
||||||
3. Prepare "rcX":
|
|
||||||
|
|
||||||
#. In ``pip/release-1.4``, change ``pip.version`` to '1.4rcX', and tag with '1.4rcX'.
|
|
||||||
#. Build a pip sdist from ``pip/release-1.4``, and build it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10rcX', and tag with '1.10rcX'.
|
|
||||||
|
|
||||||
4. Announce ``pip-1.4rcX`` and ``virtualenv-1.10rcX`` with the :ref:`RC Install Instructions` and elicit feedback.
|
|
||||||
|
|
||||||
5. Apply fixes to 'rcX':
|
|
||||||
|
|
||||||
#. Apply fixes to ``pip/release-1.4`` and ``virtualenv/release-1.10``
|
|
||||||
#. Periodically merge fixes to ``pip/develop`` and ``virtualenv/develop``
|
|
||||||
|
|
||||||
6. Repeat #4 thru #6 if needed.
|
|
||||||
|
|
||||||
7. Final Release:
|
|
||||||
|
|
||||||
#. In ``pip/release-1.4``, change ``pip.version`` to '1.4', and tag with '1.4'.
|
|
||||||
#. Merge ``pip/release-1.4`` to ``pip/master``.
|
|
||||||
#. Build a pip sdist from ``pip/release-1.4``, and load it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. Merge ``vitualenv/release-1.10`` to ``virtualenv/develop``.
|
|
||||||
#. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10', and tag with '1.10'.
|
|
||||||
#. Merge ``virtualenv/release-1.10`` to ``virtualenv/master``
|
|
||||||
#. Build and upload pip and virtualenv sdists to PyPI.
|
|
||||||
|
|
||||||
.. _`Refresh virtualenv`:
|
|
||||||
|
|
||||||
Refresh virtualenv
|
|
||||||
++++++++++++++++++
|
|
||||||
|
|
||||||
#. Update the embedded versions of pip and setuptools in ``virtualenv_support``.
|
|
||||||
#. Run ``bin/rebuild-script.py`` to rebuild virtualenv based on the latest versions.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`RC Install Instructions`:
|
|
||||||
|
|
||||||
RC Install Instructions
|
|
||||||
+++++++++++++++++++++++
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ curl -L -O https://github.com/pypa/virtualenv/archive/1.10rc1.tar.gz
|
|
||||||
$ echo "<md5sum value> 1.10rc1.tar.gz" | md5sum -c
|
|
||||||
1.10rc1.tar.gz: OK
|
|
||||||
$ tar zxf 1.10rc1.tar.gz
|
|
||||||
$ python virtualenv-1.10rc1/virtualenv.py myVE
|
|
||||||
$ myVE/bin/pip install SomePackage
|
|
||||||
|
|
||||||
Vendored
-26
@@ -1,26 +0,0 @@
|
|||||||
pip
|
|
||||||
===
|
|
||||||
|
|
||||||
A tool for installing and managing Python packages.
|
|
||||||
|
|
||||||
`User list <http://groups.google.com/group/python-virtualenv>`_ |
|
|
||||||
`Dev list <http://groups.google.com/group/pypa-dev>`_ |
|
|
||||||
`Issues <https://github.com/pypa/pip/issues>`_ |
|
|
||||||
`Github <https://github.com/pypa/pip>`_ |
|
|
||||||
`PyPI <https://pypi.python.org/pypi/pip/>`_ |
|
|
||||||
irc:#pip
|
|
||||||
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
quickstart
|
|
||||||
installing
|
|
||||||
usage
|
|
||||||
cookbook
|
|
||||||
logic
|
|
||||||
configuration
|
|
||||||
other-tools
|
|
||||||
development
|
|
||||||
news
|
|
||||||
|
|
||||||
Vendored
-60
@@ -1,60 +0,0 @@
|
|||||||
.. _`Installation`:
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Python & OS Support
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
pip works with CPython versions 2.6, 2.7, 3.1, 3.2, 3.3, 3.4 and also pypy.
|
|
||||||
|
|
||||||
pip works on Unix/Linux, OS X, and Windows.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Python 2.5 was supported through v1.3.1, and Python 2.4 was supported through v1.1.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`get-pip`:
|
|
||||||
|
|
||||||
Install or Upgrade pip
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
To install or upgrade pip, securely download `get-pip.py
|
|
||||||
<https://raw.github.com/pypa/pip/master/contrib/get-pip.py>`_. [1]_
|
|
||||||
|
|
||||||
Then run the following (which may require administrator access)::
|
|
||||||
|
|
||||||
$ python get-pip.py
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Beginning with v1.5.1, pip does not require `setuptools`_ prior to running
|
|
||||||
`get-pip.py`. Additionally, if `setuptools`_ (or `distribute`_) is not
|
|
||||||
already installed, `get-pip.py` will install `setuptools`_ for you.
|
|
||||||
|
|
||||||
|
|
||||||
Using Package Managers
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
On Linux, pip will generally be available for the system install of python using
|
|
||||||
the system package manager, although often the latest version will be
|
|
||||||
unavailable.
|
|
||||||
|
|
||||||
On Debian and Ubuntu::
|
|
||||||
|
|
||||||
$ sudo apt-get install python-pip
|
|
||||||
|
|
||||||
On Fedora::
|
|
||||||
|
|
||||||
$ sudo yum install python-pip
|
|
||||||
|
|
||||||
|
|
||||||
.. [1] "Secure" in this context means using a modern browser or a
|
|
||||||
tool like `curl` that verifies SSL certificates when downloading from
|
|
||||||
https URLs.
|
|
||||||
|
|
||||||
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
|
||||||
.. _distribute: https://pypi.python.org/pypi/distribute
|
|
||||||
|
|
||||||
|
|
||||||
Vendored
-345
@@ -1,345 +0,0 @@
|
|||||||
.. _`pip logic`:
|
|
||||||
|
|
||||||
================
|
|
||||||
Internal Details
|
|
||||||
================
|
|
||||||
|
|
||||||
.. _`Requirements File Format`:
|
|
||||||
|
|
||||||
Requirements File Format
|
|
||||||
========================
|
|
||||||
|
|
||||||
Each line of the requirements file indicates something to be installed,
|
|
||||||
and like arguments to :ref:`pip install`, the following forms are supported::
|
|
||||||
|
|
||||||
<requirement specifier>
|
|
||||||
<archive url/path>
|
|
||||||
[-e] <local project path>
|
|
||||||
[-e] <vcs project url>
|
|
||||||
|
|
||||||
See the :ref:`pip install Examples<pip install Examples>` for examples of all these forms.
|
|
||||||
|
|
||||||
A line beginning with ``#`` is treated as a comment and ignored.
|
|
||||||
|
|
||||||
Additionally, the following :ref:`Package Index Options <Package Index Options>` are supported
|
|
||||||
|
|
||||||
* :ref:`-i, --index-url <--index-url>`
|
|
||||||
* :ref:`--extra-index-url <--extra-index-url>`
|
|
||||||
* :ref:`--no-index <--no-index>`
|
|
||||||
* :ref:`-f, --find-links <--find-links>`
|
|
||||||
* :ref:`--allow-external <--allow-external>`
|
|
||||||
* :ref:`--allow-all-external <--allow-external>`
|
|
||||||
* :ref:`--allow-unverified <--allow-unverified>`
|
|
||||||
|
|
||||||
For example, to specify :ref:`--no-index <--no-index>` and 2 :ref:`--find-links <--find-links>` locations:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
--no-index
|
|
||||||
--find-links /my/local/archives
|
|
||||||
--find-links http://some.archives.com/archives
|
|
||||||
|
|
||||||
|
|
||||||
Lastly, if you wish, you can refer to other requirements files, like this::
|
|
||||||
|
|
||||||
-r more_requirements.txt
|
|
||||||
|
|
||||||
.. _`Requirement Specifiers`:
|
|
||||||
|
|
||||||
Requirement Specifiers
|
|
||||||
======================
|
|
||||||
|
|
||||||
pip supports installing from "requirement specifiers" as implemented in
|
|
||||||
`pkg_resources Requirements <http://packages.python.org/setuptools/pkg_resources.html#requirement-objects>`_
|
|
||||||
|
|
||||||
Some Examples:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
'FooProject >= 1.2'
|
|
||||||
Fizzy [foo, bar]
|
|
||||||
'PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1'
|
|
||||||
SomethingWhoseVersionIDontCareAbout
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Use single or double quotes around specifiers to avoid ``>`` and ``<`` being interpreted as shell redirects. e.g. ``pip install 'FooProject>=1.2'``.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Logging`:
|
|
||||||
|
|
||||||
Logging
|
|
||||||
=======
|
|
||||||
|
|
||||||
Console logging
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
pip offers :ref:`-v, --verbose <--verbose>` and :ref:`-q, --quiet <--quiet>`
|
|
||||||
to control the console log level. Each option can be used multiple times and
|
|
||||||
used together. One ``-v`` increases the verbosity by one, whereas one ``-q`` decreases it by
|
|
||||||
one.
|
|
||||||
|
|
||||||
The series of log levels, in order, are as follows::
|
|
||||||
|
|
||||||
VERBOSE_DEBUG, DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL
|
|
||||||
|
|
||||||
``NOTIFY`` is the default level.
|
|
||||||
|
|
||||||
A few examples on how the parameters work to affect the level:
|
|
||||||
|
|
||||||
* specifying nothing results in ``NOTIFY``
|
|
||||||
* ``-v`` results in ``INFO``
|
|
||||||
* ``-vv`` results in ``DEBUG``
|
|
||||||
* ``-q`` results in ``WARN``
|
|
||||||
* ``-vq`` results in ``NOTIFY``
|
|
||||||
|
|
||||||
The most practical use case for users is either ``-v`` or ``-vv`` to see
|
|
||||||
additional logging to help troubleshoot an issue.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`FileLogging`:
|
|
||||||
|
|
||||||
File logging
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
pip offers the :ref:`--log <--log>` option for specifying a file where a maximum
|
|
||||||
verbosity log will be kept. This option is empty by default. This log appends
|
|
||||||
to previous logging.
|
|
||||||
|
|
||||||
Additionally, when commands fail (i.e. return a non-zero exit code), pip writes
|
|
||||||
a "failure log" for the failed command. This log overwrites previous
|
|
||||||
logging. The default location is as follows:
|
|
||||||
|
|
||||||
* On Unix and Mac OS X: :file:`$HOME/.pip/pip.log`
|
|
||||||
* On Windows, the configuration file is: :file:`%HOME%\\pip\\pip.log`
|
|
||||||
|
|
||||||
The option for the failure log, is :ref:`--log-file <--log-file>`.
|
|
||||||
|
|
||||||
Both logs add a line per execution to specify the date and what pip executable wrote the log.
|
|
||||||
|
|
||||||
Like all pip options, ``--log`` and ``log-file``, can also be set as an environment
|
|
||||||
variable, or placed into the pip config file. See the :ref:`Configuration`
|
|
||||||
section.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Pre Release Versions`:
|
|
||||||
|
|
||||||
Pre-release Versions
|
|
||||||
====================
|
|
||||||
|
|
||||||
Starting with v1.4, pip will only install stable versions as specified by `PEP426`_ by default. If
|
|
||||||
a version cannot be parsed as a compliant `PEP426`_ version then it is assumed
|
|
||||||
to be a pre-release.
|
|
||||||
|
|
||||||
If a Requirement specifier includes a pre-release or development version (e.g. ``>=0.0.dev0``) then
|
|
||||||
pip will allow pre-release and development versions for that requirement. This does not include
|
|
||||||
the != flag.
|
|
||||||
|
|
||||||
The ``pip install`` command also supports a :ref:`--pre <install_--pre>` flag that will enable
|
|
||||||
installing pre-releases and development releases.
|
|
||||||
|
|
||||||
|
|
||||||
.. _PEP426: http://www.python.org/dev/peps/pep-0426
|
|
||||||
|
|
||||||
.. _`Externally Hosted Files`:
|
|
||||||
|
|
||||||
Externally Hosted Files
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Starting with v1.4, pip will warn about installing any file that does not come
|
|
||||||
from the primary index. As of version 1.5, pip defaults to ignoring these files
|
|
||||||
unless asked to consider them.
|
|
||||||
|
|
||||||
The ``pip install`` command supports a
|
|
||||||
:ref:`--allow-external PROJECT <--allow-external>` option that will enable
|
|
||||||
installing links that are linked directly from the simple index but to an
|
|
||||||
external host that also have a supported hash fragment. Externally hosted
|
|
||||||
files for all projects may be enabled using the
|
|
||||||
:ref:`--allow-all-external <--allow-all-external>` flag to the ``pip install``
|
|
||||||
command.
|
|
||||||
|
|
||||||
The ``pip install`` command also supports a
|
|
||||||
:ref:`--allow-unverified PROJECT <--allow-unverified>` option that will enable
|
|
||||||
installing insecurely linked files. These are either directly linked (as above)
|
|
||||||
files without a hash, or files that are linked from either the home page or the
|
|
||||||
download url of a package.
|
|
||||||
|
|
||||||
These options can be used in a requirements file. Assuming some fictional
|
|
||||||
`ExternalPackage` that is hosted external and unverified, then your requirements
|
|
||||||
file would be like so::
|
|
||||||
|
|
||||||
--allow-external ExternalPackage
|
|
||||||
--allow-unverified ExternalPackage
|
|
||||||
ExternalPackage
|
|
||||||
|
|
||||||
|
|
||||||
.. _`VCS Support`:
|
|
||||||
|
|
||||||
VCS Support
|
|
||||||
===========
|
|
||||||
|
|
||||||
pip supports installing from Git, Mercurial, Subversion and Bazaar, and detects the type of VCS using url prefixes: "git+", "hg+", "bzr+", "svn+".
|
|
||||||
|
|
||||||
pip requires a working VCS command on your path: git, hg, svn, or bzr.
|
|
||||||
|
|
||||||
VCS projects can be installed in :ref:`editable mode <editable-installs>` (using the :ref:`--editable <install_--editable>` option) or not.
|
|
||||||
|
|
||||||
* For editable installs, the clone location by default is "<venv path>/src/SomeProject" in virtual environments, and "<cwd>/src/SomeProject" for global installs.
|
|
||||||
The :ref:`--src <install_--src>` option can be used to modify this location.
|
|
||||||
* For non-editable installs, the project is built locally in a temp dir and then installed normally.
|
|
||||||
|
|
||||||
The url suffix "egg=<project name>" is used by pip in it's dependency logic to identify the project prior to pip downloading and analyzing the metadata.
|
|
||||||
|
|
||||||
Git
|
|
||||||
~~~
|
|
||||||
|
|
||||||
pip currently supports cloning over ``git``, ``git+https`` and ``git+ssh``:
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] git+git://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] git+https://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] git+ssh://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
-e git+git@git.myproject.org:MyProject#egg=MyProject
|
|
||||||
|
|
||||||
Passing branch names, a commit hash or a tag name is possible like so::
|
|
||||||
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@master#egg=MyProject
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@v1.0#egg=MyProject
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709#egg=MyProject
|
|
||||||
|
|
||||||
Mercurial
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
The supported schemes are: ``hg+http``, ``hg+https``,
|
|
||||||
``hg+static-http`` and ``hg+ssh``.
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] hg+https://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] hg+ssh://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
|
|
||||||
You can also specify a revision number, a revision hash, a tag name or a local
|
|
||||||
branch name like so::
|
|
||||||
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@2019#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@v1.0#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@special_feature#egg=MyProject
|
|
||||||
|
|
||||||
Subversion
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
pip supports the URL schemes ``svn``, ``svn+svn``, ``svn+http``, ``svn+https``, ``svn+ssh``.
|
|
||||||
|
|
||||||
You can also give specific revisions to an SVN URL, like so::
|
|
||||||
|
|
||||||
[-e] svn+svn://svn.myproject.org/svn/MyProject#egg=MyProject
|
|
||||||
[-e] svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject
|
|
||||||
|
|
||||||
which will check out revision 2019. ``@{20080101}`` would also check
|
|
||||||
out the revision from 2008-01-01. You can only check out specific
|
|
||||||
revisions using ``-e svn+...``.
|
|
||||||
|
|
||||||
Bazaar
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
pip supports Bazaar using the ``bzr+http``, ``bzr+https``, ``bzr+ssh``,
|
|
||||||
``bzr+sftp``, ``bzr+ftp`` and ``bzr+lp`` schemes.
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] bzr+http://bzr.myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+sftp://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+ftp://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+lp:MyProject#egg=MyProject
|
|
||||||
|
|
||||||
Tags or revisions can be installed like so::
|
|
||||||
|
|
||||||
[-e] bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject
|
|
||||||
[-e] bzr+http://bzr.myproject.org/MyProject/trunk@v1.0#egg=MyProject
|
|
||||||
|
|
||||||
|
|
||||||
Finding Packages
|
|
||||||
================
|
|
||||||
|
|
||||||
pip searches for packages on `PyPI <http://pypi.python.org>`_ using the
|
|
||||||
`http simple interface <http://pypi.python.org/simple>`_,
|
|
||||||
which is documented `here <http://packages.python.org/setuptools/easy_install.html#package-index-api>`_
|
|
||||||
and `there <http://www.python.org/dev/peps/pep-0301/>`_
|
|
||||||
|
|
||||||
pip offers a set of :ref:`Package Index Options <Package Index Options>` for modifying how packages are found.
|
|
||||||
|
|
||||||
See the :ref:`pip install Examples<pip install Examples>`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`SSL Certificate Verification`:
|
|
||||||
|
|
||||||
SSL Certificate Verification
|
|
||||||
============================
|
|
||||||
|
|
||||||
Starting with v1.3, pip provides SSL certificate verification over https, for the purpose
|
|
||||||
of providing secure, certified downloads from PyPI.
|
|
||||||
|
|
||||||
|
|
||||||
Hash Verification
|
|
||||||
=================
|
|
||||||
|
|
||||||
PyPI provides md5 hashes in the hash fragment of package download urls.
|
|
||||||
|
|
||||||
pip supports checking this, as well as any of the
|
|
||||||
guaranteed hashlib algorithms (sha1, sha224, sha384, sha256, sha512, md5).
|
|
||||||
|
|
||||||
The hash fragment is case sensitive (i.e. sha1 not SHA1).
|
|
||||||
|
|
||||||
This check is only intended to provide basic download corruption protection.
|
|
||||||
It is not intended to provide security against tampering. For that,
|
|
||||||
see :ref:`SSL Certificate Verification`
|
|
||||||
|
|
||||||
|
|
||||||
Download Cache
|
|
||||||
==============
|
|
||||||
|
|
||||||
pip offers a :ref:`--download-cache <install_--download-cache>` option for installs to prevent redundant downloads of archives from PyPI.
|
|
||||||
|
|
||||||
The point of this cache is *not* to circumvent the index crawling process, but to *just* prevent redundant downloads.
|
|
||||||
|
|
||||||
Items are stored in this cache based on the url the archive was found at, not simply the archive name.
|
|
||||||
|
|
||||||
If you want a fast/local install solution that circumvents crawling PyPI, see the :ref:`Fast & Local Installs` Cookbook entry.
|
|
||||||
|
|
||||||
Like all options, :ref:`--download-cache <install_--download-cache>`, can also be set as an environment variable, or placed into the pip config file.
|
|
||||||
See the :ref:`Configuration` section.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`editable-installs`:
|
|
||||||
|
|
||||||
"Editable" Installs
|
|
||||||
===================
|
|
||||||
|
|
||||||
"Editable" installs are fundamentally `"setuptools develop mode" <http://packages.python.org/setuptools/setuptools.html#development-mode>`_ installs.
|
|
||||||
|
|
||||||
You can install local projects or VCS projects in "editable" mode::
|
|
||||||
|
|
||||||
$ pip install -e path/to/SomeProject
|
|
||||||
$ pip install -e git+http://repo/my_project.git#egg=SomeProject
|
|
||||||
|
|
||||||
For local projects, the "SomeProject.egg-info" directory is created relative to the project path.
|
|
||||||
This is one advantage over just using ``setup.py develop``, which creates the "egg-info" directly relative the current working directory.
|
|
||||||
|
|
||||||
|
|
||||||
setuptools & pkg_resources
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Internally, pip uses the `setuptools` package, and the `pkg_resources` module, which are available from the project, `Setuptools`_.
|
|
||||||
|
|
||||||
Here are some examples of how pip uses `setuptools` and `pkg_resources`:
|
|
||||||
|
|
||||||
* The core of pip's install process uses the `setuptools`'s "install" command.
|
|
||||||
* Editable ("-e") installs use the `setuptools`'s "develop" command.
|
|
||||||
* pip uses `pkg_resources` for version parsing, for detecting version conflicts, and to determine what projects are installed,
|
|
||||||
|
|
||||||
|
|
||||||
.. _Setuptools: http://pypi.python.org/pypi/setuptools/
|
|
||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
====
|
|
||||||
News
|
|
||||||
====
|
|
||||||
|
|
||||||
.. include:: ../CHANGES.txt
|
|
||||||
-65
@@ -1,65 +0,0 @@
|
|||||||
===========
|
|
||||||
Other tools
|
|
||||||
===========
|
|
||||||
|
|
||||||
virtualenv
|
|
||||||
----------
|
|
||||||
|
|
||||||
pip is most nutritious when used with `virtualenv
|
|
||||||
<http://pypi.python.org/pypi/virtualenv>`__. One of the reasons pip
|
|
||||||
doesn't install "multi-version" eggs is that virtualenv removes much of the need
|
|
||||||
for it. Because pip is installed by virtualenv, just use
|
|
||||||
``path/to/my/environment/bin/pip`` to install things into that
|
|
||||||
specific environment.
|
|
||||||
|
|
||||||
To tell pip to only run if there is a virtualenv currently activated,
|
|
||||||
and to bail if not, use::
|
|
||||||
|
|
||||||
export PIP_REQUIRE_VIRTUALENV=true
|
|
||||||
|
|
||||||
easy_install
|
|
||||||
------------
|
|
||||||
|
|
||||||
pip was originally written to improve on `easy_install <http://pythonhosted.org/setuptools/easy_install.html>`_ in the following ways:
|
|
||||||
|
|
||||||
* All packages are downloaded before installation. Partially-completed
|
|
||||||
installation doesn't occur as a result.
|
|
||||||
|
|
||||||
* Care is taken to present useful output on the console.
|
|
||||||
|
|
||||||
* The reasons for actions are kept track of. For instance, if a package is
|
|
||||||
being installed, pip keeps track of why that package was required.
|
|
||||||
|
|
||||||
* Error messages should be useful.
|
|
||||||
|
|
||||||
* The code is relatively concise and cohesive, making it easier to use
|
|
||||||
programmatically.
|
|
||||||
|
|
||||||
* Packages don't have to be installed as egg archives, they can be installed
|
|
||||||
flat (while keeping the egg metadata).
|
|
||||||
|
|
||||||
* Native support for other version control systems (Git, Mercurial and Bazaar)
|
|
||||||
|
|
||||||
* Uninstallation of packages.
|
|
||||||
|
|
||||||
* Simple to define fixed sets of requirements and reliably reproduce a
|
|
||||||
set of packages.
|
|
||||||
|
|
||||||
pip doesn't do everything that easy_install does. Specifically:
|
|
||||||
|
|
||||||
* It cannot install from eggs. That’s not a problem anymore though because pip
|
|
||||||
supports the superior binary `wheel format
|
|
||||||
<https://wheel.readthedocs.org/en/latest/>`_ since the 1.4 release.
|
|
||||||
|
|
||||||
* It is incompatible with some packages that extensively customize distutils
|
|
||||||
or setuptools in their ``setup.py`` files.
|
|
||||||
|
|
||||||
|
|
||||||
buildout
|
|
||||||
--------
|
|
||||||
|
|
||||||
If you are using `zc.buildout
|
|
||||||
<http://pypi.python.org/pypi/zc.buildout>`_ you should look at
|
|
||||||
`gp.recipe.pip <http://pypi.python.org/pypi/gp.recipe.pip>`_ as an
|
|
||||||
option to use pip and virtualenv in your buildouts.
|
|
||||||
|
|
||||||
Vendored
-52
@@ -1,52 +0,0 @@
|
|||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
Install a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage==1.0
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Show what files were installed:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show --files SomePackage
|
|
||||||
Name: SomePackage
|
|
||||||
Version: 1.0
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Files:
|
|
||||||
../somepackage/__init__.py
|
|
||||||
[...]
|
|
||||||
|
|
||||||
List what packages are outdated:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
SomePackage (Current: 1.0 Latest: 2.0)
|
|
||||||
|
|
||||||
Upgrade a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Found existing installation: SomePackage 1.0
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
Running setup.py install for SomePackage
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Uninstall a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall SomePackage
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
/my/env/lib/pythonx.x/site-packages/somepackage
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
|
|
||||||
Vendored
-438
@@ -1,438 +0,0 @@
|
|||||||
==========
|
|
||||||
Usage
|
|
||||||
==========
|
|
||||||
|
|
||||||
pip
|
|
||||||
---
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip <command> [options]
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. _`General Options`:
|
|
||||||
|
|
||||||
**General Options:**
|
|
||||||
|
|
||||||
.. pip-general-options::
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Package Index Options`:
|
|
||||||
|
|
||||||
**Package Index Options:**
|
|
||||||
|
|
||||||
.. pip-index-options::
|
|
||||||
|
|
||||||
|
|
||||||
.. _`pip install`:
|
|
||||||
|
|
||||||
pip install
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
********
|
|
||||||
|
|
||||||
.. pip-command-usage:: install
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: install
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Install Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: install
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`Package Index Options <Package Index Options>`
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
|
|
||||||
.. _`pip install Examples`:
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Install `SomePackage` and it's dependencies from `PyPI`_ using :ref:`Requirement Specifiers`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage # latest version
|
|
||||||
$ pip install SomePackage==1.0.4 # specific version
|
|
||||||
$ pip install 'SomePackage>=1.0.4' # minimum version
|
|
||||||
|
|
||||||
|
|
||||||
2) Install a list of requirements specified in a file. See the :ref:`Cookbook entry on Requirements files <Requirements Files>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
3) Upgrade an already installed `SomePackage` to the latest from PyPI.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
4) Install a local project in "editable" mode. See the section on :ref:`Editable Installs <editable-installs>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -e . # project in current directory
|
|
||||||
$ pip install -e path/to/project # project in another directory
|
|
||||||
|
|
||||||
|
|
||||||
5) Install a project from VCS in "editable" mode. See the sections on :ref:`VCS Support <VCS Support>` and :ref:`Editable Installs <editable-installs>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -e git+https://git.repo/some_pkg.git#egg=SomePackage # from git
|
|
||||||
$ pip install -e hg+https://hg.repo/some_pkg.git#egg=SomePackage # from mercurial
|
|
||||||
$ pip install -e svn+svn://svn.repo/some_pkg/trunk/#egg=SomePackage # from svn
|
|
||||||
$ pip install -e git+https://git.repo/some_pkg.git@feature#egg=SomePackage # from 'feature' branch
|
|
||||||
$ pip install -e git+https://git.repo/some_repo.git@egg=subdir&subdirectory=subdir_path # install a python package from a repo subdirectory
|
|
||||||
|
|
||||||
6) Install a package with `setuptools extras`_.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage[PDF]
|
|
||||||
$ pip install SomePackage[PDF]==3.0
|
|
||||||
$ pip install -e .[PDF]==3.0 # editable project in current directory
|
|
||||||
|
|
||||||
|
|
||||||
7) Install a particular source archive file.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
|
|
||||||
$ pip install http://my.package.repo/SomePackage-1.0.4.zip
|
|
||||||
|
|
||||||
|
|
||||||
8) Install from alternative package repositories.
|
|
||||||
|
|
||||||
Install from a different index, and not `PyPI`_::
|
|
||||||
|
|
||||||
$ pip install --index-url http://my.package.repo/simple/ SomePackage
|
|
||||||
|
|
||||||
Search an additional index during install, in addition to `PyPI`_::
|
|
||||||
|
|
||||||
$ pip install --extra-index-url http://my.package.repo/simple SomePackage
|
|
||||||
|
|
||||||
Install from a local flat directory containing archives (and don't scan indexes)::
|
|
||||||
|
|
||||||
$ pip install --no-index --find-links=file:///local/dir/ SomePackage
|
|
||||||
$ pip install --no-index --find-links=/local/dir/ SomePackage
|
|
||||||
$ pip install --no-index --find-links=relative/dir/ SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
9) Find pre-release and development versions, in addition to stable versions. By default, pip only finds stable versions.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --pre SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: http://pypi.python.org/pypi
|
|
||||||
.. _setuptools extras: http://packages.python.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
|
|
||||||
|
|
||||||
|
|
||||||
pip uninstall
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: uninstall
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: uninstall
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Uninstall Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: uninstall
|
|
||||||
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Uninstall a package.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall simplejson
|
|
||||||
Uninstalling simplejson:
|
|
||||||
/home/me/env/lib/python2.7/site-packages/simplejson
|
|
||||||
/home/me/env/lib/python2.7/site-packages/simplejson-2.2.1-py2.7.egg-info
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled simplejson
|
|
||||||
|
|
||||||
|
|
||||||
.. _`pip freeze`:
|
|
||||||
|
|
||||||
pip freeze
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: freeze
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: freeze
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Freeze Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: freeze
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Generate output suitable for a requirements file.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip freeze
|
|
||||||
Jinja2==2.6
|
|
||||||
Pygments==1.5
|
|
||||||
Sphinx==1.1.3
|
|
||||||
docutils==0.9.1
|
|
||||||
|
|
||||||
|
|
||||||
2) Generate a requirements file and then install from it in another environment.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ env1/bin/pip freeze > requirements.txt
|
|
||||||
$ env2/bin/pip install -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pip list
|
|
||||||
---------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: list
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: list
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**List Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: list
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`Package Index Options <Package Index Options>`
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) List installed packages.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list
|
|
||||||
Pygments (1.5)
|
|
||||||
docutils (0.9.1)
|
|
||||||
Sphinx (1.1.2)
|
|
||||||
Jinja2 (2.6)
|
|
||||||
|
|
||||||
2) List outdated packages (excluding editables), and the latest version available
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
docutils (Current: 0.9.1 Latest: 0.10)
|
|
||||||
Sphinx (Current: 1.1.2 Latest: 1.1.3)
|
|
||||||
|
|
||||||
pip show
|
|
||||||
--------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: show
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: show
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Show Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: show
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Show information about a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show sphinx
|
|
||||||
---
|
|
||||||
Name: Sphinx
|
|
||||||
Version: 1.1.3
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Requires: Pygments, Jinja2, docutils
|
|
||||||
|
|
||||||
pip search
|
|
||||||
----------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: search
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: search
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Search Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: search
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Search for "peppercorn"
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip search peppercorn
|
|
||||||
pepperedform - Helpers for using peppercorn with formprocess.
|
|
||||||
peppercorn - A library for converting a token stream into [...]
|
|
||||||
|
|
||||||
.. _`pip wheel`:
|
|
||||||
|
|
||||||
pip wheel
|
|
||||||
---------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: wheel
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: wheel
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
Currently, when ``pip wheel`` finds a wheel for one of your requirements
|
|
||||||
already on PyPI, it does not rebuild, and it does not place the file in your
|
|
||||||
wheelhouse dir. There is an issue open to change this
|
|
||||||
(https://github.com/pypa/pip/issues/1310)
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Wheel Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: wheel
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`Package Index Options <Package Index Options>`
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Build wheels for a requirement (and all its dependencies), and then install
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
|
|
||||||
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
pip zip
|
|
||||||
-------
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: zip
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: zip
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
**Zip Options:**
|
|
||||||
|
|
||||||
.. pip-command-options:: zip
|
|
||||||
|
|
||||||
**Other Options:**
|
|
||||||
|
|
||||||
* :ref:`General Options <General Options>`
|
|
||||||
-86
@@ -1,86 +0,0 @@
|
|||||||
Metadata-Version: 1.1
|
|
||||||
Name: pip
|
|
||||||
Version: 1.5.2
|
|
||||||
Summary: A tool for installing and managing Python packages.
|
|
||||||
Home-page: http://www.pip-installer.org
|
|
||||||
Author: The pip developers
|
|
||||||
Author-email: python-virtualenv@groups.google.com
|
|
||||||
License: MIT
|
|
||||||
Description:
|
|
||||||
Project Info
|
|
||||||
============
|
|
||||||
|
|
||||||
* Project Page: https://github.com/pypa/pip
|
|
||||||
* Install howto: http://www.pip-installer.org/en/latest/installing.html
|
|
||||||
* Changelog: http://www.pip-installer.org/en/latest/news.html
|
|
||||||
* Bug Tracking: https://github.com/pypa/pip/issues
|
|
||||||
* Mailing list: http://groups.google.com/group/python-virtualenv
|
|
||||||
* Docs: http://www.pip-installer.org/
|
|
||||||
* IRC: #pip on Freenode.
|
|
||||||
|
|
||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
Install a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage==1.0
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Show what files were installed:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show --files SomePackage
|
|
||||||
Name: SomePackage
|
|
||||||
Version: 1.0
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Files:
|
|
||||||
../somepackage/__init__.py
|
|
||||||
[...]
|
|
||||||
|
|
||||||
List what packages are outdated:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
SomePackage (Current: 1.0 Latest: 2.0)
|
|
||||||
|
|
||||||
Upgrade a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Found existing installation: SomePackage 1.0
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
Running setup.py install for SomePackage
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Uninstall a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall SomePackage
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
/my/env/lib/pythonx.x/site-packages/somepackage
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
Keywords: easy_install distutils setuptools egg virtualenv
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: MIT License
|
|
||||||
Classifier: Topic :: Software Development :: Build Tools
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.1
|
|
||||||
Classifier: Programming Language :: Python :: 3.2
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
-240
@@ -1,240 +0,0 @@
|
|||||||
AUTHORS.txt
|
|
||||||
CHANGES.txt
|
|
||||||
LICENSE.txt
|
|
||||||
MANIFEST.in
|
|
||||||
PROJECT.txt
|
|
||||||
README.rst
|
|
||||||
setup.cfg
|
|
||||||
setup.py
|
|
||||||
docs/configuration.rst
|
|
||||||
docs/cookbook.rst
|
|
||||||
docs/development.rst
|
|
||||||
docs/index.rst
|
|
||||||
docs/installing.rst
|
|
||||||
docs/logic.rst
|
|
||||||
docs/news.rst
|
|
||||||
docs/other-tools.rst
|
|
||||||
docs/quickstart.rst
|
|
||||||
docs/usage.rst
|
|
||||||
pip/__init__.py
|
|
||||||
pip/__main__.py
|
|
||||||
pip/basecommand.py
|
|
||||||
pip/baseparser.py
|
|
||||||
pip/cmdoptions.py
|
|
||||||
pip/download.py
|
|
||||||
pip/exceptions.py
|
|
||||||
pip/index.py
|
|
||||||
pip/locations.py
|
|
||||||
pip/log.py
|
|
||||||
pip/pep425tags.py
|
|
||||||
pip/req.py
|
|
||||||
pip/runner.py
|
|
||||||
pip/status_codes.py
|
|
||||||
pip/util.py
|
|
||||||
pip/wheel.py
|
|
||||||
pip.egg-info/PKG-INFO
|
|
||||||
pip.egg-info/SOURCES.txt
|
|
||||||
pip.egg-info/dependency_links.txt
|
|
||||||
pip.egg-info/entry_points.txt
|
|
||||||
pip.egg-info/not-zip-safe
|
|
||||||
pip.egg-info/requires.txt
|
|
||||||
pip.egg-info/top_level.txt
|
|
||||||
pip/_vendor/__init__.py
|
|
||||||
pip/_vendor/pkg_resources.py
|
|
||||||
pip/_vendor/re-vendor.py
|
|
||||||
pip/_vendor/six.py
|
|
||||||
pip/_vendor/_markerlib/__init__.py
|
|
||||||
pip/_vendor/_markerlib/markers.py
|
|
||||||
pip/_vendor/colorama/__init__.py
|
|
||||||
pip/_vendor/colorama/ansi.py
|
|
||||||
pip/_vendor/colorama/ansitowin32.py
|
|
||||||
pip/_vendor/colorama/initialise.py
|
|
||||||
pip/_vendor/colorama/win32.py
|
|
||||||
pip/_vendor/colorama/winterm.py
|
|
||||||
pip/_vendor/distlib/__init__.py
|
|
||||||
pip/_vendor/distlib/compat.py
|
|
||||||
pip/_vendor/distlib/database.py
|
|
||||||
pip/_vendor/distlib/index.py
|
|
||||||
pip/_vendor/distlib/locators.py
|
|
||||||
pip/_vendor/distlib/manifest.py
|
|
||||||
pip/_vendor/distlib/markers.py
|
|
||||||
pip/_vendor/distlib/metadata.py
|
|
||||||
pip/_vendor/distlib/resources.py
|
|
||||||
pip/_vendor/distlib/scripts.py
|
|
||||||
pip/_vendor/distlib/t32.exe
|
|
||||||
pip/_vendor/distlib/t64.exe
|
|
||||||
pip/_vendor/distlib/util.py
|
|
||||||
pip/_vendor/distlib/version.py
|
|
||||||
pip/_vendor/distlib/w32.exe
|
|
||||||
pip/_vendor/distlib/w64.exe
|
|
||||||
pip/_vendor/distlib/wheel.py
|
|
||||||
pip/_vendor/distlib/_backport/__init__.py
|
|
||||||
pip/_vendor/distlib/_backport/misc.py
|
|
||||||
pip/_vendor/distlib/_backport/shutil.py
|
|
||||||
pip/_vendor/distlib/_backport/sysconfig.cfg
|
|
||||||
pip/_vendor/distlib/_backport/sysconfig.py
|
|
||||||
pip/_vendor/distlib/_backport/tarfile.py
|
|
||||||
pip/_vendor/html5lib/__init__.py
|
|
||||||
pip/_vendor/html5lib/constants.py
|
|
||||||
pip/_vendor/html5lib/html5parser.py
|
|
||||||
pip/_vendor/html5lib/ihatexml.py
|
|
||||||
pip/_vendor/html5lib/inputstream.py
|
|
||||||
pip/_vendor/html5lib/sanitizer.py
|
|
||||||
pip/_vendor/html5lib/tokenizer.py
|
|
||||||
pip/_vendor/html5lib/utils.py
|
|
||||||
pip/_vendor/html5lib/filters/__init__.py
|
|
||||||
pip/_vendor/html5lib/filters/_base.py
|
|
||||||
pip/_vendor/html5lib/filters/alphabeticalattributes.py
|
|
||||||
pip/_vendor/html5lib/filters/inject_meta_charset.py
|
|
||||||
pip/_vendor/html5lib/filters/lint.py
|
|
||||||
pip/_vendor/html5lib/filters/optionaltags.py
|
|
||||||
pip/_vendor/html5lib/filters/sanitizer.py
|
|
||||||
pip/_vendor/html5lib/filters/whitespace.py
|
|
||||||
pip/_vendor/html5lib/serializer/__init__.py
|
|
||||||
pip/_vendor/html5lib/serializer/htmlserializer.py
|
|
||||||
pip/_vendor/html5lib/treebuilders/__init__.py
|
|
||||||
pip/_vendor/html5lib/treebuilders/_base.py
|
|
||||||
pip/_vendor/html5lib/treebuilders/dom.py
|
|
||||||
pip/_vendor/html5lib/treebuilders/etree.py
|
|
||||||
pip/_vendor/html5lib/treebuilders/etree_lxml.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/__init__.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/_base.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/dom.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/etree.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/genshistream.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/lxmletree.py
|
|
||||||
pip/_vendor/html5lib/treewalkers/pulldom.py
|
|
||||||
pip/_vendor/html5lib/trie/__init__.py
|
|
||||||
pip/_vendor/html5lib/trie/_base.py
|
|
||||||
pip/_vendor/html5lib/trie/datrie.py
|
|
||||||
pip/_vendor/html5lib/trie/py.py
|
|
||||||
pip/_vendor/requests/__init__.py
|
|
||||||
pip/_vendor/requests/adapters.py
|
|
||||||
pip/_vendor/requests/api.py
|
|
||||||
pip/_vendor/requests/auth.py
|
|
||||||
pip/_vendor/requests/cacert.pem
|
|
||||||
pip/_vendor/requests/certs.py
|
|
||||||
pip/_vendor/requests/compat.py
|
|
||||||
pip/_vendor/requests/cookies.py
|
|
||||||
pip/_vendor/requests/exceptions.py
|
|
||||||
pip/_vendor/requests/hooks.py
|
|
||||||
pip/_vendor/requests/models.py
|
|
||||||
pip/_vendor/requests/sessions.py
|
|
||||||
pip/_vendor/requests/status_codes.py
|
|
||||||
pip/_vendor/requests/structures.py
|
|
||||||
pip/_vendor/requests/utils.py
|
|
||||||
pip/_vendor/requests/packages/__init__.py
|
|
||||||
pip/_vendor/requests/packages/charade/__init__.py
|
|
||||||
pip/_vendor/requests/packages/charade/__main__.py
|
|
||||||
pip/_vendor/requests/packages/charade/big5freq.py
|
|
||||||
pip/_vendor/requests/packages/charade/big5prober.py
|
|
||||||
pip/_vendor/requests/packages/charade/chardistribution.py
|
|
||||||
pip/_vendor/requests/packages/charade/charsetgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/charsetprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/codingstatemachine.py
|
|
||||||
pip/_vendor/requests/packages/charade/compat.py
|
|
||||||
pip/_vendor/requests/packages/charade/constants.py
|
|
||||||
pip/_vendor/requests/packages/charade/cp949prober.py
|
|
||||||
pip/_vendor/requests/packages/charade/escprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/escsm.py
|
|
||||||
pip/_vendor/requests/packages/charade/eucjpprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/euckrfreq.py
|
|
||||||
pip/_vendor/requests/packages/charade/euckrprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/euctwfreq.py
|
|
||||||
pip/_vendor/requests/packages/charade/euctwprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/gb2312freq.py
|
|
||||||
pip/_vendor/requests/packages/charade/gb2312prober.py
|
|
||||||
pip/_vendor/requests/packages/charade/hebrewprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/jisfreq.py
|
|
||||||
pip/_vendor/requests/packages/charade/jpcntx.py
|
|
||||||
pip/_vendor/requests/packages/charade/langbulgarianmodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/langcyrillicmodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/langgreekmodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/langhebrewmodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/langhungarianmodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/langthaimodel.py
|
|
||||||
pip/_vendor/requests/packages/charade/latin1prober.py
|
|
||||||
pip/_vendor/requests/packages/charade/mbcharsetprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/mbcsgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/mbcssm.py
|
|
||||||
pip/_vendor/requests/packages/charade/sbcharsetprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/sbcsgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/sjisprober.py
|
|
||||||
pip/_vendor/requests/packages/charade/universaldetector.py
|
|
||||||
pip/_vendor/requests/packages/charade/utf8prober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/__init__.py
|
|
||||||
pip/_vendor/requests/packages/chardet/big5freq.py
|
|
||||||
pip/_vendor/requests/packages/chardet/big5prober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/chardetect.py
|
|
||||||
pip/_vendor/requests/packages/chardet/chardistribution.py
|
|
||||||
pip/_vendor/requests/packages/chardet/charsetgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/charsetprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/codingstatemachine.py
|
|
||||||
pip/_vendor/requests/packages/chardet/compat.py
|
|
||||||
pip/_vendor/requests/packages/chardet/constants.py
|
|
||||||
pip/_vendor/requests/packages/chardet/cp949prober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/escprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/escsm.py
|
|
||||||
pip/_vendor/requests/packages/chardet/eucjpprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/euckrfreq.py
|
|
||||||
pip/_vendor/requests/packages/chardet/euckrprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/euctwfreq.py
|
|
||||||
pip/_vendor/requests/packages/chardet/euctwprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/gb2312freq.py
|
|
||||||
pip/_vendor/requests/packages/chardet/gb2312prober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/hebrewprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/jisfreq.py
|
|
||||||
pip/_vendor/requests/packages/chardet/jpcntx.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langbulgarianmodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langcyrillicmodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langgreekmodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langhebrewmodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langhungarianmodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/langthaimodel.py
|
|
||||||
pip/_vendor/requests/packages/chardet/latin1prober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/mbcharsetprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/mbcsgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/mbcssm.py
|
|
||||||
pip/_vendor/requests/packages/chardet/sbcharsetprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/sbcsgroupprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/sjisprober.py
|
|
||||||
pip/_vendor/requests/packages/chardet/universaldetector.py
|
|
||||||
pip/_vendor/requests/packages/chardet/utf8prober.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/__init__.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/_collections.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/connection.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/connectionpool.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/exceptions.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/fields.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/filepost.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/poolmanager.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/request.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/response.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/util.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/contrib/__init__.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/packages/__init__.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/packages/ordered_dict.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/packages/six.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
|
|
||||||
pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
|
|
||||||
pip/backwardcompat/__init__.py
|
|
||||||
pip/commands/__init__.py
|
|
||||||
pip/commands/bundle.py
|
|
||||||
pip/commands/completion.py
|
|
||||||
pip/commands/freeze.py
|
|
||||||
pip/commands/help.py
|
|
||||||
pip/commands/install.py
|
|
||||||
pip/commands/list.py
|
|
||||||
pip/commands/search.py
|
|
||||||
pip/commands/show.py
|
|
||||||
pip/commands/uninstall.py
|
|
||||||
pip/commands/unzip.py
|
|
||||||
pip/commands/wheel.py
|
|
||||||
pip/commands/zip.py
|
|
||||||
pip/vcs/__init__.py
|
|
||||||
pip/vcs/bazaar.py
|
|
||||||
pip/vcs/git.py
|
|
||||||
pip/vcs/mercurial.py
|
|
||||||
pip/vcs/subversion.py
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
[console_scripts]
|
|
||||||
pip = pip:main
|
|
||||||
pip2.7 = pip:main
|
|
||||||
pip2 = pip:main
|
|
||||||
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
[testing]
|
|
||||||
pytest
|
|
||||||
virtualenv>=1.10
|
|
||||||
scripttest>=1.3
|
|
||||||
mock
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
pip
|
|
||||||
Vendored
-277
@@ -1,277 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
import optparse
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
|
|
||||||
from pip.exceptions import InstallationError, CommandError, PipError
|
|
||||||
from pip.log import logger
|
|
||||||
from pip.util import get_installed_distributions, get_prog
|
|
||||||
from pip.vcs import git, mercurial, subversion, bazaar # noqa
|
|
||||||
from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
|
|
||||||
from pip.commands import commands, get_summaries, get_similar_commands
|
|
||||||
|
|
||||||
# This fixes a peculiarity when importing via __import__ - as we are
|
|
||||||
# initialising the pip module, "from pip import cmdoptions" is recursive
|
|
||||||
# and appears not to work properly in that situation.
|
|
||||||
import pip.cmdoptions
|
|
||||||
cmdoptions = pip.cmdoptions
|
|
||||||
|
|
||||||
# The version as used in the setup.py and the docs conf.py
|
|
||||||
__version__ = "1.5.2"
|
|
||||||
|
|
||||||
|
|
||||||
def autocomplete():
|
|
||||||
"""Command and option completion for the main option parser (and options)
|
|
||||||
and its subcommands (and options).
|
|
||||||
|
|
||||||
Enable by sourcing one of the completion shell scripts (bash or zsh).
|
|
||||||
"""
|
|
||||||
# Don't complete if user hasn't sourced bash_completion file.
|
|
||||||
if 'PIP_AUTO_COMPLETE' not in os.environ:
|
|
||||||
return
|
|
||||||
cwords = os.environ['COMP_WORDS'].split()[1:]
|
|
||||||
cword = int(os.environ['COMP_CWORD'])
|
|
||||||
try:
|
|
||||||
current = cwords[cword - 1]
|
|
||||||
except IndexError:
|
|
||||||
current = ''
|
|
||||||
|
|
||||||
subcommands = [cmd for cmd, summary in get_summaries()]
|
|
||||||
options = []
|
|
||||||
# subcommand
|
|
||||||
try:
|
|
||||||
subcommand_name = [w for w in cwords if w in subcommands][0]
|
|
||||||
except IndexError:
|
|
||||||
subcommand_name = None
|
|
||||||
|
|
||||||
parser = create_main_parser()
|
|
||||||
# subcommand options
|
|
||||||
if subcommand_name:
|
|
||||||
# special case: 'help' subcommand has no options
|
|
||||||
if subcommand_name == 'help':
|
|
||||||
sys.exit(1)
|
|
||||||
# special case: list locally installed dists for uninstall command
|
|
||||||
if subcommand_name == 'uninstall' and not current.startswith('-'):
|
|
||||||
installed = []
|
|
||||||
lc = current.lower()
|
|
||||||
for dist in get_installed_distributions(local_only=True):
|
|
||||||
if dist.key.startswith(lc) and dist.key not in cwords[1:]:
|
|
||||||
installed.append(dist.key)
|
|
||||||
# if there are no dists installed, fall back to option completion
|
|
||||||
if installed:
|
|
||||||
for dist in installed:
|
|
||||||
print(dist)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
subcommand = commands[subcommand_name]()
|
|
||||||
options += [(opt.get_opt_string(), opt.nargs)
|
|
||||||
for opt in subcommand.parser.option_list_all
|
|
||||||
if opt.help != optparse.SUPPRESS_HELP]
|
|
||||||
|
|
||||||
# filter out previously specified options from available options
|
|
||||||
prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]]
|
|
||||||
options = [(x, v) for (x, v) in options if x not in prev_opts]
|
|
||||||
# filter options by current input
|
|
||||||
options = [(k, v) for k, v in options if k.startswith(current)]
|
|
||||||
for option in options:
|
|
||||||
opt_label = option[0]
|
|
||||||
# append '=' to options which require args
|
|
||||||
if option[1]:
|
|
||||||
opt_label += '='
|
|
||||||
print(opt_label)
|
|
||||||
else:
|
|
||||||
# show main parser options only when necessary
|
|
||||||
if current.startswith('-') or current.startswith('--'):
|
|
||||||
opts = [i.option_list for i in parser.option_groups]
|
|
||||||
opts.append(parser.option_list)
|
|
||||||
opts = (o for it in opts for o in it)
|
|
||||||
|
|
||||||
subcommands += [i.get_opt_string() for i in opts
|
|
||||||
if i.help != optparse.SUPPRESS_HELP]
|
|
||||||
|
|
||||||
print(' '.join([x for x in subcommands if x.startswith(current)]))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def create_main_parser():
|
|
||||||
parser_kw = {
|
|
||||||
'usage': '\n%prog <command> [options]',
|
|
||||||
'add_help_option': False,
|
|
||||||
'formatter': UpdatingDefaultsHelpFormatter(),
|
|
||||||
'name': 'global',
|
|
||||||
'prog': get_prog(),
|
|
||||||
}
|
|
||||||
|
|
||||||
parser = ConfigOptionParser(**parser_kw)
|
|
||||||
parser.disable_interspersed_args()
|
|
||||||
|
|
||||||
pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
parser.version = 'pip %s from %s (python %s)' % (
|
|
||||||
__version__, pip_pkg_dir, sys.version[:3])
|
|
||||||
|
|
||||||
# add the general options
|
|
||||||
gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
|
|
||||||
parser.add_option_group(gen_opts)
|
|
||||||
|
|
||||||
parser.main = True # so the help formatter knows
|
|
||||||
|
|
||||||
# create command listing for description
|
|
||||||
command_summaries = get_summaries()
|
|
||||||
description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries]
|
|
||||||
parser.description = '\n'.join(description)
|
|
||||||
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
def parseopts(args):
|
|
||||||
parser = create_main_parser()
|
|
||||||
|
|
||||||
# Note: parser calls disable_interspersed_args(), so the result of this call
|
|
||||||
# is to split the initial args into the general options before the
|
|
||||||
# subcommand and everything else.
|
|
||||||
# For example:
|
|
||||||
# args: ['--timeout=5', 'install', '--user', 'INITools']
|
|
||||||
# general_options: ['--timeout==5']
|
|
||||||
# args_else: ['install', '--user', 'INITools']
|
|
||||||
general_options, args_else = parser.parse_args(args)
|
|
||||||
|
|
||||||
# --version
|
|
||||||
if general_options.version:
|
|
||||||
sys.stdout.write(parser.version)
|
|
||||||
sys.stdout.write(os.linesep)
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
# pip || pip help -> print_help()
|
|
||||||
if not args_else or (args_else[0] == 'help' and len(args_else) == 1):
|
|
||||||
parser.print_help()
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
# the subcommand name
|
|
||||||
cmd_name = args_else[0].lower()
|
|
||||||
|
|
||||||
#all the args without the subcommand
|
|
||||||
cmd_args = args[:]
|
|
||||||
cmd_args.remove(args_else[0].lower())
|
|
||||||
|
|
||||||
if cmd_name not in commands:
|
|
||||||
guess = get_similar_commands(cmd_name)
|
|
||||||
|
|
||||||
msg = ['unknown command "%s"' % cmd_name]
|
|
||||||
if guess:
|
|
||||||
msg.append('maybe you meant "%s"' % guess)
|
|
||||||
|
|
||||||
raise CommandError(' - '.join(msg))
|
|
||||||
|
|
||||||
return cmd_name, cmd_args
|
|
||||||
|
|
||||||
|
|
||||||
def main(initial_args=None):
|
|
||||||
if initial_args is None:
|
|
||||||
initial_args = sys.argv[1:]
|
|
||||||
|
|
||||||
autocomplete()
|
|
||||||
|
|
||||||
try:
|
|
||||||
cmd_name, cmd_args = parseopts(initial_args)
|
|
||||||
except PipError:
|
|
||||||
e = sys.exc_info()[1]
|
|
||||||
sys.stderr.write("ERROR: %s" % e)
|
|
||||||
sys.stderr.write(os.linesep)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
command = commands[cmd_name]()
|
|
||||||
return command.main(cmd_args)
|
|
||||||
|
|
||||||
|
|
||||||
def bootstrap():
|
|
||||||
"""
|
|
||||||
Bootstrapping function to be called from install-pip.py script.
|
|
||||||
"""
|
|
||||||
pkgs = ['pip']
|
|
||||||
try:
|
|
||||||
import setuptools
|
|
||||||
except ImportError:
|
|
||||||
pkgs.append('setuptools')
|
|
||||||
return main(['install', '--upgrade'] + pkgs + sys.argv[1:])
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
## Writing freeze files
|
|
||||||
|
|
||||||
|
|
||||||
class FrozenRequirement(object):
|
|
||||||
|
|
||||||
def __init__(self, name, req, editable, comments=()):
|
|
||||||
self.name = name
|
|
||||||
self.req = req
|
|
||||||
self.editable = editable
|
|
||||||
self.comments = comments
|
|
||||||
|
|
||||||
_rev_re = re.compile(r'-r(\d+)$')
|
|
||||||
_date_re = re.compile(r'-(20\d\d\d\d\d\d)$')
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_dist(cls, dist, dependency_links, find_tags=False):
|
|
||||||
location = os.path.normcase(os.path.abspath(dist.location))
|
|
||||||
comments = []
|
|
||||||
from pip.vcs import vcs, get_src_requirement
|
|
||||||
if vcs.get_backend_name(location):
|
|
||||||
editable = True
|
|
||||||
try:
|
|
||||||
req = get_src_requirement(dist, location, find_tags)
|
|
||||||
except InstallationError:
|
|
||||||
ex = sys.exc_info()[1]
|
|
||||||
logger.warn("Error when trying to get requirement for VCS system %s, falling back to uneditable format" % ex)
|
|
||||||
req = None
|
|
||||||
if req is None:
|
|
||||||
logger.warn('Could not determine repository location of %s' % location)
|
|
||||||
comments.append('## !! Could not determine repository location')
|
|
||||||
req = dist.as_requirement()
|
|
||||||
editable = False
|
|
||||||
else:
|
|
||||||
editable = False
|
|
||||||
req = dist.as_requirement()
|
|
||||||
specs = req.specs
|
|
||||||
assert len(specs) == 1 and specs[0][0] == '=='
|
|
||||||
version = specs[0][1]
|
|
||||||
ver_match = cls._rev_re.search(version)
|
|
||||||
date_match = cls._date_re.search(version)
|
|
||||||
if ver_match or date_match:
|
|
||||||
svn_backend = vcs.get_backend('svn')
|
|
||||||
if svn_backend:
|
|
||||||
svn_location = svn_backend(
|
|
||||||
).get_location(dist, dependency_links)
|
|
||||||
if not svn_location:
|
|
||||||
logger.warn(
|
|
||||||
'Warning: cannot find svn location for %s' % req)
|
|
||||||
comments.append('## FIXME: could not find svn URL in dependency_links for this package:')
|
|
||||||
else:
|
|
||||||
comments.append('# Installing as editable to satisfy requirement %s:' % req)
|
|
||||||
if ver_match:
|
|
||||||
rev = ver_match.group(1)
|
|
||||||
else:
|
|
||||||
rev = '{%s}' % date_match.group(1)
|
|
||||||
editable = True
|
|
||||||
req = '%s@%s#egg=%s' % (svn_location, rev, cls.egg_name(dist))
|
|
||||||
return cls(dist.project_name, req, editable, comments)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def egg_name(dist):
|
|
||||||
name = dist.egg_name()
|
|
||||||
match = re.search(r'-py\d\.\d$', name)
|
|
||||||
if match:
|
|
||||||
name = name[:match.start()]
|
|
||||||
return name
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
req = self.req
|
|
||||||
if self.editable:
|
|
||||||
req = '-e %s' % req
|
|
||||||
return '\n'.join(list(self.comments) + [str(req)]) + '\n'
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
exit = main()
|
|
||||||
if exit:
|
|
||||||
sys.exit(exit)
|
|
||||||
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
import sys
|
|
||||||
from .runner import run
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
exit = run()
|
|
||||||
if exit:
|
|
||||||
sys.exit(exit)
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
"""
|
|
||||||
pip._vendor is for vendoring dependencies of pip to prevent needing pip to
|
|
||||||
depend on something external.
|
|
||||||
|
|
||||||
Files inside of pip._vendor should be considered immutable and should only be
|
|
||||||
updated to versions from upstream.
|
|
||||||
"""
|
|
||||||
from __future__ import absolute_import
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
try:
|
|
||||||
import ast
|
|
||||||
from pip._vendor._markerlib.markers import default_environment, compile, interpret
|
|
||||||
except ImportError:
|
|
||||||
if 'ast' in globals():
|
|
||||||
raise
|
|
||||||
def default_environment():
|
|
||||||
return {}
|
|
||||||
def compile(marker):
|
|
||||||
def marker_fn(environment=None, override=None):
|
|
||||||
# 'empty markers are True' heuristic won't install extra deps.
|
|
||||||
return not marker.strip()
|
|
||||||
marker_fn.__doc__ = marker
|
|
||||||
return marker_fn
|
|
||||||
def interpret(marker, environment=None, override=None):
|
|
||||||
return compile(marker)()
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user