mirror of
https://github.com/autistic-symposium/shell-whiz-toolkit.git
synced 2025-05-12 11:42:20 -04:00
add zsh h()
This commit is contained in:
parent
c25625ba80
commit
eb22dc0eaa
898 changed files with 145067 additions and 0 deletions
13
shell/zshrc
13
shell/zshrc
|
@ -44,4 +44,17 @@ export CLICOLOR=230
|
||||||
export HISTCONTROL=ignoredups
|
export HISTCONTROL=ignoredups
|
||||||
|
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# FUNCTIONS
|
||||||
|
#####################################################
|
||||||
|
|
||||||
|
function h() {
|
||||||
|
if [ -z "$*" ]; then
|
||||||
|
history 1
|
||||||
|
else
|
||||||
|
history 1 | egrep --color=auto "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
1
venv/.Python
Symbolic link
1
venv/.Python
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/Python
|
78
venv/bin/activate
Normal file
78
venv/bin/activate
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
# This file must be used with "source bin/activate" *from bash*
|
||||||
|
# you cannot run it directly
|
||||||
|
|
||||||
|
deactivate () {
|
||||||
|
unset -f pydoc >/dev/null 2>&1
|
||||||
|
|
||||||
|
# reset old environment variables
|
||||||
|
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
|
||||||
|
if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then
|
||||||
|
PATH="$_OLD_VIRTUAL_PATH"
|
||||||
|
export PATH
|
||||||
|
unset _OLD_VIRTUAL_PATH
|
||||||
|
fi
|
||||||
|
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
|
||||||
|
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
|
||||||
|
export PYTHONHOME
|
||||||
|
unset _OLD_VIRTUAL_PYTHONHOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
||||||
|
hash -r 2>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
|
||||||
|
PS1="$_OLD_VIRTUAL_PS1"
|
||||||
|
export PS1
|
||||||
|
unset _OLD_VIRTUAL_PS1
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset VIRTUAL_ENV
|
||||||
|
if [ ! "${1-}" = "nondestructive" ] ; then
|
||||||
|
# Self destruct!
|
||||||
|
unset -f deactivate
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# unset irrelevant variables
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
VIRTUAL_ENV="/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv"
|
||||||
|
export VIRTUAL_ENV
|
||||||
|
|
||||||
|
_OLD_VIRTUAL_PATH="$PATH"
|
||||||
|
PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
# unset PYTHONHOME if set
|
||||||
|
if ! [ -z "${PYTHONHOME+_}" ] ; then
|
||||||
|
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
|
||||||
|
unset PYTHONHOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
|
||||||
|
_OLD_VIRTUAL_PS1="${PS1-}"
|
||||||
|
if [ "x" != x ] ; then
|
||||||
|
PS1="${PS1-}"
|
||||||
|
else
|
||||||
|
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
|
||||||
|
fi
|
||||||
|
export PS1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure to unalias pydoc if it's already there
|
||||||
|
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
|
||||||
|
|
||||||
|
pydoc () {
|
||||||
|
python -m pydoc "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
||||||
|
hash -r 2>/dev/null
|
||||||
|
fi
|
42
venv/bin/activate.csh
Normal file
42
venv/bin/activate.csh
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# This file must be used with "source bin/activate.csh" *from csh*.
|
||||||
|
# You cannot run it directly.
|
||||||
|
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
||||||
|
|
||||||
|
set newline='\
|
||||||
|
'
|
||||||
|
|
||||||
|
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
|
||||||
|
|
||||||
|
# Unset irrelevant variables.
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
setenv VIRTUAL_ENV "/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv"
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH="$PATH:q"
|
||||||
|
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ("" != "") then
|
||||||
|
set env_name = ""
|
||||||
|
else
|
||||||
|
set env_name = "$VIRTUAL_ENV:t:q"
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Could be in a non-interactive environment,
|
||||||
|
# in which case, $prompt is undefined and we wouldn't
|
||||||
|
# care about the prompt anyway.
|
||||||
|
if ( $?prompt ) then
|
||||||
|
set _OLD_VIRTUAL_PROMPT="$prompt:q"
|
||||||
|
if ( "$prompt:q" =~ *"$newline:q"* ) then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
set prompt = "[$env_name:q] $prompt:q"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
unset env_name
|
||||||
|
|
||||||
|
alias pydoc python -m pydoc
|
||||||
|
|
||||||
|
rehash
|
101
venv/bin/activate.fish
Normal file
101
venv/bin/activate.fish
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
|
||||||
|
# Do not run it directly.
|
||||||
|
|
||||||
|
function _bashify_path -d "Converts a fish path to something bash can recognize"
|
||||||
|
set fishy_path $argv
|
||||||
|
set bashy_path $fishy_path[1]
|
||||||
|
for path_part in $fishy_path[2..-1]
|
||||||
|
set bashy_path "$bashy_path:$path_part"
|
||||||
|
end
|
||||||
|
echo $bashy_path
|
||||||
|
end
|
||||||
|
|
||||||
|
function _fishify_path -d "Converts a bash path to something fish can recognize"
|
||||||
|
echo $argv | tr ':' '\n'
|
||||||
|
end
|
||||||
|
|
||||||
|
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
|
||||||
|
# reset old environment variables
|
||||||
|
if test -n "$_OLD_VIRTUAL_PATH"
|
||||||
|
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
||||||
|
if test (echo $FISH_VERSION | tr "." "\n")[1] -lt 3
|
||||||
|
set -gx PATH (_fishify_path $_OLD_VIRTUAL_PATH)
|
||||||
|
else
|
||||||
|
set -gx PATH $_OLD_VIRTUAL_PATH
|
||||||
|
end
|
||||||
|
set -e _OLD_VIRTUAL_PATH
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
||||||
|
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
||||||
|
set -e _OLD_VIRTUAL_PYTHONHOME
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
||||||
|
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
|
||||||
|
set -l fish_function_path
|
||||||
|
|
||||||
|
# Erase virtualenv's `fish_prompt` and restore the original.
|
||||||
|
functions -e fish_prompt
|
||||||
|
functions -c _old_fish_prompt fish_prompt
|
||||||
|
functions -e _old_fish_prompt
|
||||||
|
set -e _OLD_FISH_PROMPT_OVERRIDE
|
||||||
|
end
|
||||||
|
|
||||||
|
set -e VIRTUAL_ENV
|
||||||
|
|
||||||
|
if test "$argv[1]" != 'nondestructive'
|
||||||
|
# Self-destruct!
|
||||||
|
functions -e pydoc
|
||||||
|
functions -e deactivate
|
||||||
|
functions -e _bashify_path
|
||||||
|
functions -e _fishify_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Unset irrelevant variables.
|
||||||
|
deactivate nondestructive
|
||||||
|
|
||||||
|
set -gx VIRTUAL_ENV "/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv"
|
||||||
|
|
||||||
|
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
||||||
|
if test (echo $FISH_VERSION | tr "." "\n")[1] -lt 3
|
||||||
|
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
|
||||||
|
else
|
||||||
|
set -gx _OLD_VIRTUAL_PATH $PATH
|
||||||
|
end
|
||||||
|
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
|
||||||
|
|
||||||
|
# Unset `$PYTHONHOME` if set.
|
||||||
|
if set -q PYTHONHOME
|
||||||
|
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
||||||
|
set -e PYTHONHOME
|
||||||
|
end
|
||||||
|
|
||||||
|
function pydoc
|
||||||
|
python -m pydoc $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
||||||
|
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
|
||||||
|
functions -c fish_prompt _old_fish_prompt
|
||||||
|
|
||||||
|
function fish_prompt
|
||||||
|
# Save the current $status, for fish_prompts that display it.
|
||||||
|
set -l old_status $status
|
||||||
|
|
||||||
|
# Prompt override provided?
|
||||||
|
# If not, just prepend the environment name.
|
||||||
|
if test -n ""
|
||||||
|
printf '%s%s' "" (set_color normal)
|
||||||
|
else
|
||||||
|
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Restore the original $status
|
||||||
|
echo "exit $old_status" | source
|
||||||
|
_old_fish_prompt
|
||||||
|
end
|
||||||
|
|
||||||
|
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
||||||
|
end
|
60
venv/bin/activate.ps1
Normal file
60
venv/bin/activate.ps1
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# This file must be dot sourced from PoSh; you cannot run it directly. Do this: . ./activate.ps1
|
||||||
|
|
||||||
|
$script:THIS_PATH = $myinvocation.mycommand.path
|
||||||
|
$script:BASE_DIR = split-path (resolve-path "$THIS_PATH/..") -Parent
|
||||||
|
|
||||||
|
function global:deactivate([switch] $NonDestructive)
|
||||||
|
{
|
||||||
|
if (test-path variable:_OLD_VIRTUAL_PATH)
|
||||||
|
{
|
||||||
|
$env:PATH = $variable:_OLD_VIRTUAL_PATH
|
||||||
|
remove-variable "_OLD_VIRTUAL_PATH" -scope global
|
||||||
|
}
|
||||||
|
|
||||||
|
if (test-path function:_old_virtual_prompt)
|
||||||
|
{
|
||||||
|
$function:prompt = $function:_old_virtual_prompt
|
||||||
|
remove-item function:\_old_virtual_prompt
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($env:VIRTUAL_ENV)
|
||||||
|
{
|
||||||
|
$old_env = split-path $env:VIRTUAL_ENV -leaf
|
||||||
|
remove-item env:VIRTUAL_ENV -erroraction silentlycontinue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$NonDestructive)
|
||||||
|
{
|
||||||
|
# Self destruct!
|
||||||
|
remove-item function:deactivate
|
||||||
|
remove-item function:pydoc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function global:pydoc
|
||||||
|
{
|
||||||
|
python -m pydoc $args
|
||||||
|
}
|
||||||
|
|
||||||
|
# unset irrelevant variables
|
||||||
|
deactivate -nondestructive
|
||||||
|
|
||||||
|
$VIRTUAL_ENV = $BASE_DIR
|
||||||
|
$env:VIRTUAL_ENV = $VIRTUAL_ENV
|
||||||
|
|
||||||
|
$global:_OLD_VIRTUAL_PATH = $env:PATH
|
||||||
|
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
|
||||||
|
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT)
|
||||||
|
{
|
||||||
|
function global:_old_virtual_prompt
|
||||||
|
{
|
||||||
|
""
|
||||||
|
}
|
||||||
|
$function:_old_virtual_prompt = $function:prompt
|
||||||
|
function global:prompt
|
||||||
|
{
|
||||||
|
# Add a prefix to the current prompt, but don't discard it.
|
||||||
|
write-host "($( split-path $env:VIRTUAL_ENV -leaf )) " -nonewline
|
||||||
|
& $function:_old_virtual_prompt
|
||||||
|
}
|
||||||
|
}
|
46
venv/bin/activate_this.py
Normal file
46
venv/bin/activate_this.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
"""Activate virtualenv for current interpreter:
|
||||||
|
|
||||||
|
Use exec(open(this_file).read(), {'__file__': this_file}).
|
||||||
|
|
||||||
|
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import site
|
||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
__file__
|
||||||
|
except NameError:
|
||||||
|
raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
|
||||||
|
|
||||||
|
# prepend bin to PATH (this file is inside the bin directory)
|
||||||
|
bin_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
|
||||||
|
|
||||||
|
base = os.path.dirname(bin_dir)
|
||||||
|
|
||||||
|
# virtual env is right above bin directory
|
||||||
|
os.environ["VIRTUAL_ENV"] = base
|
||||||
|
|
||||||
|
# add the virtual environments site-package to the host python import mechanism
|
||||||
|
IS_PYPY = hasattr(sys, "pypy_version_info")
|
||||||
|
IS_JYTHON = sys.platform.startswith("java")
|
||||||
|
if IS_JYTHON:
|
||||||
|
site_packages = os.path.join(base, "Lib", "site-packages")
|
||||||
|
elif IS_PYPY:
|
||||||
|
site_packages = os.path.join(base, "site-packages")
|
||||||
|
else:
|
||||||
|
IS_WIN = sys.platform == "win32"
|
||||||
|
if IS_WIN:
|
||||||
|
site_packages = os.path.join(base, "Lib", "site-packages")
|
||||||
|
else:
|
||||||
|
site_packages = os.path.join(base, "lib", "python{}".format(sys.version[:3]), "site-packages")
|
||||||
|
|
||||||
|
prev = set(sys.path)
|
||||||
|
site.addsitedir(site_packages)
|
||||||
|
sys.real_prefix = sys.prefix
|
||||||
|
sys.prefix = base
|
||||||
|
|
||||||
|
# Move the added items to the front of the path, in place
|
||||||
|
new = list(sys.path)
|
||||||
|
sys.path[:] = [i for i in new if i not in prev] + [i for i in new if i in prev]
|
10
venv/bin/easy_install
Executable file
10
venv/bin/easy_install
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from setuptools.command.easy_install import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
10
venv/bin/easy_install-2.7
Executable file
10
venv/bin/easy_install-2.7
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from setuptools.command.easy_install import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
10
venv/bin/pip
Executable file
10
venv/bin/pip
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
10
venv/bin/pip2
Executable file
10
venv/bin/pip2
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
10
venv/bin/pip2.7
Executable file
10
venv/bin/pip2.7
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
BIN
venv/bin/python
Executable file
BIN
venv/bin/python
Executable file
Binary file not shown.
78
venv/bin/python-config
Executable file
78
venv/bin/python-config
Executable file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
import sysconfig
|
||||||
|
|
||||||
|
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
|
||||||
|
'ldflags', 'help']
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 2):
|
||||||
|
valid_opts.insert(-1, 'extension-suffix')
|
||||||
|
valid_opts.append('abiflags')
|
||||||
|
if sys.version_info >= (3, 3):
|
||||||
|
valid_opts.append('configdir')
|
||||||
|
|
||||||
|
|
||||||
|
def exit_with_usage(code=1):
|
||||||
|
sys.stderr.write("Usage: {0} [{1}]\n".format(
|
||||||
|
sys.argv[0], '|'.join('--'+opt for opt in valid_opts)))
|
||||||
|
sys.exit(code)
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
|
||||||
|
except getopt.error:
|
||||||
|
exit_with_usage()
|
||||||
|
|
||||||
|
if not opts:
|
||||||
|
exit_with_usage()
|
||||||
|
|
||||||
|
pyver = sysconfig.get_config_var('VERSION')
|
||||||
|
getvar = sysconfig.get_config_var
|
||||||
|
|
||||||
|
opt_flags = [flag for (flag, val) in opts]
|
||||||
|
|
||||||
|
if '--help' in opt_flags:
|
||||||
|
exit_with_usage(code=0)
|
||||||
|
|
||||||
|
for opt in opt_flags:
|
||||||
|
if opt == '--prefix':
|
||||||
|
print(sysconfig.get_config_var('prefix'))
|
||||||
|
|
||||||
|
elif opt == '--exec-prefix':
|
||||||
|
print(sysconfig.get_config_var('exec_prefix'))
|
||||||
|
|
||||||
|
elif opt in ('--includes', '--cflags'):
|
||||||
|
flags = ['-I' + sysconfig.get_path('include'),
|
||||||
|
'-I' + sysconfig.get_path('platinclude')]
|
||||||
|
if opt == '--cflags':
|
||||||
|
flags.extend(getvar('CFLAGS').split())
|
||||||
|
print(' '.join(flags))
|
||||||
|
|
||||||
|
elif opt in ('--libs', '--ldflags'):
|
||||||
|
abiflags = getattr(sys, 'abiflags', '')
|
||||||
|
libs = ['-lpython' + pyver + abiflags]
|
||||||
|
libs += getvar('LIBS').split()
|
||||||
|
libs += getvar('SYSLIBS').split()
|
||||||
|
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
|
||||||
|
# shared library in prefix/lib/.
|
||||||
|
if opt == '--ldflags':
|
||||||
|
if not getvar('Py_ENABLE_SHARED'):
|
||||||
|
libs.insert(0, '-L' + getvar('LIBPL'))
|
||||||
|
if not getvar('PYTHONFRAMEWORK'):
|
||||||
|
libs.extend(getvar('LINKFORSHARED').split())
|
||||||
|
print(' '.join(libs))
|
||||||
|
|
||||||
|
elif opt == '--extension-suffix':
|
||||||
|
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
|
||||||
|
if ext_suffix is None:
|
||||||
|
ext_suffix = sysconfig.get_config_var('SO')
|
||||||
|
print(ext_suffix)
|
||||||
|
|
||||||
|
elif opt == '--abiflags':
|
||||||
|
if not getattr(sys, 'abiflags', None):
|
||||||
|
exit_with_usage()
|
||||||
|
print(sys.abiflags)
|
||||||
|
|
||||||
|
elif opt == '--configdir':
|
||||||
|
print(sysconfig.get_config_var('LIBPL'))
|
1
venv/bin/python2
Symbolic link
1
venv/bin/python2
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
python
|
1
venv/bin/python2.7
Symbolic link
1
venv/bin/python2.7
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
python
|
10
venv/bin/wheel
Executable file
10
venv/bin/wheel
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/Users/miavonsteinkirch/Projects/ARXIV_/Shell-Scripts_and_Dotfiles/venv/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from wheel.cli import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
1
venv/include/python2.7
Symbolic link
1
venv/include/python2.7
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
|
1
venv/lib/python2.7/UserDict.py
Symbolic link
1
venv/lib/python2.7/UserDict.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py
|
BIN
venv/lib/python2.7/UserDict.pyc
Normal file
BIN
venv/lib/python2.7/UserDict.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/_abcoll.py
Symbolic link
1
venv/lib/python2.7/_abcoll.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py
|
BIN
venv/lib/python2.7/_abcoll.pyc
Normal file
BIN
venv/lib/python2.7/_abcoll.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/_weakrefset.py
Symbolic link
1
venv/lib/python2.7/_weakrefset.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py
|
BIN
venv/lib/python2.7/_weakrefset.pyc
Normal file
BIN
venv/lib/python2.7/_weakrefset.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/abc.py
Symbolic link
1
venv/lib/python2.7/abc.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py
|
BIN
venv/lib/python2.7/abc.pyc
Normal file
BIN
venv/lib/python2.7/abc.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/codecs.py
Symbolic link
1
venv/lib/python2.7/codecs.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py
|
BIN
venv/lib/python2.7/codecs.pyc
Normal file
BIN
venv/lib/python2.7/codecs.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/config
Symbolic link
1
venv/lib/python2.7/config
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
|
1
venv/lib/python2.7/copy_reg.py
Symbolic link
1
venv/lib/python2.7/copy_reg.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py
|
BIN
venv/lib/python2.7/copy_reg.pyc
Normal file
BIN
venv/lib/python2.7/copy_reg.pyc
Normal file
Binary file not shown.
134
venv/lib/python2.7/distutils/__init__.py
Normal file
134
venv/lib/python2.7/distutils/__init__.py
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
# opcode is not a virtualenv module, so we can use it to find the stdlib
|
||||||
|
# Important! To work on pypy, this must be a module that resides in the
|
||||||
|
# lib-python/modified-x.y.z directory
|
||||||
|
import opcode
|
||||||
|
|
||||||
|
dirname = os.path.dirname
|
||||||
|
|
||||||
|
distutils_path = os.path.join(os.path.dirname(opcode.__file__), "distutils")
|
||||||
|
if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)):
|
||||||
|
warnings.warn("The virtualenv distutils package at %s appears to be in the same location as the system distutils?")
|
||||||
|
else:
|
||||||
|
__path__.insert(0, distutils_path) # noqa: F821
|
||||||
|
if sys.version_info < (3, 4):
|
||||||
|
import imp
|
||||||
|
|
||||||
|
real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ("", "", imp.PKG_DIRECTORY))
|
||||||
|
else:
|
||||||
|
import importlib.machinery
|
||||||
|
|
||||||
|
distutils_path = os.path.join(distutils_path, "__init__.py")
|
||||||
|
loader = importlib.machinery.SourceFileLoader("_virtualenv_distutils", distutils_path)
|
||||||
|
if sys.version_info < (3, 5):
|
||||||
|
import types
|
||||||
|
|
||||||
|
real_distutils = types.ModuleType(loader.name)
|
||||||
|
else:
|
||||||
|
import importlib.util
|
||||||
|
|
||||||
|
spec = importlib.util.spec_from_loader(loader.name, loader)
|
||||||
|
real_distutils = importlib.util.module_from_spec(spec)
|
||||||
|
loader.exec_module(real_distutils)
|
||||||
|
|
||||||
|
# Copy the relevant attributes
|
||||||
|
try:
|
||||||
|
__revision__ = real_distutils.__revision__
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
__version__ = real_distutils.__version__
|
||||||
|
|
||||||
|
from distutils import dist, sysconfig # isort:skip
|
||||||
|
|
||||||
|
try:
|
||||||
|
basestring
|
||||||
|
except NameError:
|
||||||
|
basestring = str
|
||||||
|
|
||||||
|
# patch build_ext (distutils doesn't know how to get the libs directory
|
||||||
|
# path on windows - it hardcodes the paths around the patched sys.prefix)
|
||||||
|
|
||||||
|
if sys.platform == "win32":
|
||||||
|
from distutils.command.build_ext import build_ext as old_build_ext
|
||||||
|
|
||||||
|
class build_ext(old_build_ext):
|
||||||
|
def finalize_options(self):
|
||||||
|
if self.library_dirs is None:
|
||||||
|
self.library_dirs = []
|
||||||
|
elif isinstance(self.library_dirs, basestring):
|
||||||
|
self.library_dirs = self.library_dirs.split(os.pathsep)
|
||||||
|
|
||||||
|
self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs"))
|
||||||
|
old_build_ext.finalize_options(self)
|
||||||
|
|
||||||
|
from distutils.command import build_ext as build_ext_module
|
||||||
|
|
||||||
|
build_ext_module.build_ext = build_ext
|
||||||
|
|
||||||
|
# distutils.dist patches:
|
||||||
|
|
||||||
|
old_find_config_files = dist.Distribution.find_config_files
|
||||||
|
|
||||||
|
|
||||||
|
def find_config_files(self):
|
||||||
|
found = old_find_config_files(self)
|
||||||
|
if os.name == "posix":
|
||||||
|
user_filename = ".pydistutils.cfg"
|
||||||
|
else:
|
||||||
|
user_filename = "pydistutils.cfg"
|
||||||
|
user_filename = os.path.join(sys.prefix, user_filename)
|
||||||
|
if os.path.isfile(user_filename):
|
||||||
|
for item in list(found):
|
||||||
|
if item.endswith("pydistutils.cfg"):
|
||||||
|
found.remove(item)
|
||||||
|
found.append(user_filename)
|
||||||
|
return found
|
||||||
|
|
||||||
|
|
||||||
|
dist.Distribution.find_config_files = find_config_files
|
||||||
|
|
||||||
|
# distutils.sysconfig patches:
|
||||||
|
|
||||||
|
old_get_python_inc = sysconfig.get_python_inc
|
||||||
|
|
||||||
|
|
||||||
|
def sysconfig_get_python_inc(plat_specific=0, prefix=None):
|
||||||
|
if prefix is None:
|
||||||
|
prefix = sys.real_prefix
|
||||||
|
return old_get_python_inc(plat_specific, prefix)
|
||||||
|
|
||||||
|
|
||||||
|
sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__
|
||||||
|
sysconfig.get_python_inc = sysconfig_get_python_inc
|
||||||
|
|
||||||
|
old_get_python_lib = sysconfig.get_python_lib
|
||||||
|
|
||||||
|
|
||||||
|
def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
|
||||||
|
if standard_lib and prefix is None:
|
||||||
|
prefix = sys.real_prefix
|
||||||
|
return old_get_python_lib(plat_specific, standard_lib, prefix)
|
||||||
|
|
||||||
|
|
||||||
|
sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__
|
||||||
|
sysconfig.get_python_lib = sysconfig_get_python_lib
|
||||||
|
|
||||||
|
old_get_config_vars = sysconfig.get_config_vars
|
||||||
|
|
||||||
|
|
||||||
|
def sysconfig_get_config_vars(*args):
|
||||||
|
real_vars = old_get_config_vars(*args)
|
||||||
|
if sys.platform == "win32":
|
||||||
|
lib_dir = os.path.join(sys.real_prefix, "libs")
|
||||||
|
if isinstance(real_vars, dict) and "LIBDIR" not in real_vars:
|
||||||
|
real_vars["LIBDIR"] = lib_dir # asked for all
|
||||||
|
elif isinstance(real_vars, list) and "LIBDIR" in args:
|
||||||
|
real_vars = real_vars + [lib_dir] # asked for list
|
||||||
|
return real_vars
|
||||||
|
|
||||||
|
|
||||||
|
sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__
|
||||||
|
sysconfig.get_config_vars = sysconfig_get_config_vars
|
BIN
venv/lib/python2.7/distutils/__init__.pyc
Normal file
BIN
venv/lib/python2.7/distutils/__init__.pyc
Normal file
Binary file not shown.
6
venv/lib/python2.7/distutils/distutils.cfg
Normal file
6
venv/lib/python2.7/distutils/distutils.cfg
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# This is a config file local to this virtualenv installation
|
||||||
|
# You may include options that will be used by all distutils commands,
|
||||||
|
# and by easy_install. For instance:
|
||||||
|
#
|
||||||
|
# [easy_install]
|
||||||
|
# find_links = http://mylocalsite
|
1
venv/lib/python2.7/encodings
Symbolic link
1
venv/lib/python2.7/encodings
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings
|
1
venv/lib/python2.7/fnmatch.py
Symbolic link
1
venv/lib/python2.7/fnmatch.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/fnmatch.py
|
BIN
venv/lib/python2.7/fnmatch.pyc
Normal file
BIN
venv/lib/python2.7/fnmatch.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/genericpath.py
Symbolic link
1
venv/lib/python2.7/genericpath.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py
|
BIN
venv/lib/python2.7/genericpath.pyc
Normal file
BIN
venv/lib/python2.7/genericpath.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/lib-dynload
Symbolic link
1
venv/lib/python2.7/lib-dynload
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
|
1
venv/lib/python2.7/linecache.py
Symbolic link
1
venv/lib/python2.7/linecache.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/linecache.py
|
BIN
venv/lib/python2.7/linecache.pyc
Normal file
BIN
venv/lib/python2.7/linecache.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/locale.py
Symbolic link
1
venv/lib/python2.7/locale.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py
|
BIN
venv/lib/python2.7/locale.pyc
Normal file
BIN
venv/lib/python2.7/locale.pyc
Normal file
Binary file not shown.
0
venv/lib/python2.7/no-global-site-packages.txt
Normal file
0
venv/lib/python2.7/no-global-site-packages.txt
Normal file
1
venv/lib/python2.7/ntpath.py
Symbolic link
1
venv/lib/python2.7/ntpath.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ntpath.py
|
1
venv/lib/python2.7/orig-prefix.txt
Normal file
1
venv/lib/python2.7/orig-prefix.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7
|
1
venv/lib/python2.7/os.py
Symbolic link
1
venv/lib/python2.7/os.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py
|
BIN
venv/lib/python2.7/os.pyc
Normal file
BIN
venv/lib/python2.7/os.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/posixpath.py
Symbolic link
1
venv/lib/python2.7/posixpath.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
|
BIN
venv/lib/python2.7/posixpath.pyc
Normal file
BIN
venv/lib/python2.7/posixpath.pyc
Normal file
Binary file not shown.
1
venv/lib/python2.7/re.py
Symbolic link
1
venv/lib/python2.7/re.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py
|
BIN
venv/lib/python2.7/re.pyc
Normal file
BIN
venv/lib/python2.7/re.pyc
Normal file
Binary file not shown.
5
venv/lib/python2.7/site-packages/easy_install.py
Normal file
5
venv/lib/python2.7/site-packages/easy_install.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
"""Run the EasyInstall command"""
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
from setuptools.command.easy_install import main
|
||||||
|
main()
|
BIN
venv/lib/python2.7/site-packages/easy_install.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/easy_install.pyc
Normal file
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
pip
|
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2008-2019 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.
|
|
@ -0,0 +1,75 @@
|
||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: pip
|
||||||
|
Version: 19.1.1
|
||||||
|
Summary: The PyPA recommended tool for installing Python packages.
|
||||||
|
Home-page: https://pip.pypa.io/
|
||||||
|
Author: The pip developers
|
||||||
|
Author-email: pypa-dev@groups.google.com
|
||||||
|
License: MIT
|
||||||
|
Keywords: distutils easy_install egg setuptools wheel 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
|
||||||
|
Classifier: Programming Language :: Python :: 2
|
||||||
|
Classifier: Programming Language :: Python :: 2.7
|
||||||
|
Classifier: Programming Language :: Python :: 3
|
||||||
|
Classifier: Programming Language :: Python :: 3.4
|
||||||
|
Classifier: Programming Language :: Python :: 3.5
|
||||||
|
Classifier: Programming Language :: Python :: 3.6
|
||||||
|
Classifier: Programming Language :: Python :: 3.7
|
||||||
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||||||
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
||||||
|
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
|
||||||
|
|
||||||
|
pip - The Python Package Installer
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/v/pip.svg
|
||||||
|
:target: https://pypi.org/project/pip/
|
||||||
|
|
||||||
|
.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
|
||||||
|
:target: https://pip.pypa.io/en/latest
|
||||||
|
|
||||||
|
pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
|
||||||
|
|
||||||
|
Please take a look at our documentation for how to install and use pip:
|
||||||
|
|
||||||
|
* `Installation`_
|
||||||
|
* `Usage`_
|
||||||
|
* `Release notes`_
|
||||||
|
|
||||||
|
If you find bugs, need help, or want to talk to the developers please use our mailing lists or chat rooms:
|
||||||
|
|
||||||
|
* `Issue tracking`_
|
||||||
|
* `Discourse channel`_
|
||||||
|
* `User IRC`_
|
||||||
|
|
||||||
|
If you want to get involved head over to GitHub to get the source code and feel free to jump on the developer mailing lists and chat rooms:
|
||||||
|
|
||||||
|
* `GitHub page`_
|
||||||
|
* `Dev mailing list`_
|
||||||
|
* `Dev IRC`_
|
||||||
|
|
||||||
|
Code of Conduct
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Everyone interacting in the pip project's codebases, issue trackers, chat
|
||||||
|
rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_.
|
||||||
|
|
||||||
|
.. _package installer: https://packaging.python.org/en/latest/current/
|
||||||
|
.. _Python Package Index: https://pypi.org
|
||||||
|
.. _Installation: https://pip.pypa.io/en/stable/installing.html
|
||||||
|
.. _Usage: https://pip.pypa.io/en/stable/
|
||||||
|
.. _Release notes: https://pip.pypa.io/en/stable/news.html
|
||||||
|
.. _GitHub page: https://github.com/pypa/pip
|
||||||
|
.. _Issue tracking: https://github.com/pypa/pip/issues
|
||||||
|
.. _Discourse channel: https://discuss.python.org/c/packaging
|
||||||
|
.. _Dev mailing list: https://groups.google.com/forum/#!forum/pypa-dev
|
||||||
|
.. _User IRC: https://webchat.freenode.net/?channels=%23pypa
|
||||||
|
.. _Dev IRC: https://webchat.freenode.net/?channels=%23pypa-dev
|
||||||
|
.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
|
||||||
|
|
||||||
|
|
618
venv/lib/python2.7/site-packages/pip-19.1.1.dist-info/RECORD
Normal file
618
venv/lib/python2.7/site-packages/pip-19.1.1.dist-info/RECORD
Normal file
|
@ -0,0 +1,618 @@
|
||||||
|
../../../bin/pip,sha256=BWX-_qNClSU8YbNP85Get7EaWqQA8m5XV46NUNP7m1M,281
|
||||||
|
../../../bin/pip2,sha256=BWX-_qNClSU8YbNP85Get7EaWqQA8m5XV46NUNP7m1M,281
|
||||||
|
../../../bin/pip2.7,sha256=BWX-_qNClSU8YbNP85Get7EaWqQA8m5XV46NUNP7m1M,281
|
||||||
|
pip-19.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
pip-19.1.1.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090
|
||||||
|
pip-19.1.1.dist-info/METADATA,sha256=bLFqR8At4rsCvM1hJTM98bOrT26dNZLeTLo_0PYIZCs,2892
|
||||||
|
pip-19.1.1.dist-info/RECORD,,
|
||||||
|
pip-19.1.1.dist-info/WHEEL,sha256=HX-v9-noUkyUoxyZ1PMSuS7auUxDAR4VBdoYLqD0xws,110
|
||||||
|
pip-19.1.1.dist-info/entry_points.txt,sha256=S_zfxY25QtQDVY1BiLAmOKSkkI5llzCKPLiYOSEupsY,98
|
||||||
|
pip-19.1.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
pip/__init__.py,sha256=A9ZYTNji94NmcmoIbn-XLsEni4ac8BoiAt7guiAW27g,23
|
||||||
|
pip/__init__.pyc,,
|
||||||
|
pip/__main__.py,sha256=L3IHqBeasELUHvwy5CT_izVEMhM12tve289qut49DvU,623
|
||||||
|
pip/__main__.pyc,,
|
||||||
|
pip/_internal/__init__.py,sha256=Di4rpoQhA2Kx0Dm0THczf61CDOXcPokR2FIpyKkRm1Y,2870
|
||||||
|
pip/_internal/__init__.pyc,,
|
||||||
|
pip/_internal/build_env.py,sha256=ZUpR-00pxQc-Mw750jyBVA-oWb4WHtpK63pfiTHd8qU,7392
|
||||||
|
pip/_internal/build_env.pyc,,
|
||||||
|
pip/_internal/cache.py,sha256=PQesJm1JrjgAya3VyV6qkbnfACG23c1wQ7PaSw_0F-Y,7656
|
||||||
|
pip/_internal/cache.pyc,,
|
||||||
|
pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132
|
||||||
|
pip/_internal/cli/__init__.pyc,,
|
||||||
|
pip/_internal/cli/autocompletion.py,sha256=ptvsMdGjq42pzoY4skABVF43u2xAtLJlXAulPi-A10Y,6083
|
||||||
|
pip/_internal/cli/autocompletion.pyc,,
|
||||||
|
pip/_internal/cli/base_command.py,sha256=2SbVZ2o3KmVdeJlK4l1lP6y_ZMFZ8VkDp9ns1ByZ-xM,12629
|
||||||
|
pip/_internal/cli/base_command.pyc,,
|
||||||
|
pip/_internal/cli/cmdoptions.py,sha256=IA1XAgTJ1oWXp1oF3CkE8mpUx8vqIysyd7hlEZk7wWE,23813
|
||||||
|
pip/_internal/cli/cmdoptions.pyc,,
|
||||||
|
pip/_internal/cli/main_parser.py,sha256=YH_w_hApq2pyS_G5tZlbIe7g_HUIcKE820jhnv0piVA,3002
|
||||||
|
pip/_internal/cli/main_parser.pyc,,
|
||||||
|
pip/_internal/cli/parser.py,sha256=VZKUKJPbU6I2cHPLDOikin-aCx7OvLcZ3fzYp3xytd8,9378
|
||||||
|
pip/_internal/cli/parser.pyc,,
|
||||||
|
pip/_internal/cli/status_codes.py,sha256=F6uDG6Gj7RNKQJUDnd87QKqI16Us-t-B0wPF_4QMpWc,156
|
||||||
|
pip/_internal/cli/status_codes.pyc,,
|
||||||
|
pip/_internal/commands/__init__.py,sha256=7fscm9bUGJInZwWY7VjH2pPC7HUWQWyjYMEIB33L9CY,2223
|
||||||
|
pip/_internal/commands/__init__.pyc,,
|
||||||
|
pip/_internal/commands/check.py,sha256=liigNVif0iz2mBfhvsajrLZT5zM5KIvgmKvhAW91EzA,1430
|
||||||
|
pip/_internal/commands/check.pyc,,
|
||||||
|
pip/_internal/commands/completion.py,sha256=hqvCvoxsIHjysiD7olHKTqK2lzE1_lS6LWn69kN5qyI,2929
|
||||||
|
pip/_internal/commands/completion.pyc,,
|
||||||
|
pip/_internal/commands/configuration.py,sha256=Il76e-ERfEHtW2GbV1aTR6o-xurh-LVv2NCea7erP4s,8020
|
||||||
|
pip/_internal/commands/configuration.pyc,,
|
||||||
|
pip/_internal/commands/download.py,sha256=XPe3Kuj9iZfXwOiJq70mYVYNZD5lJCLnGT_C61cOsKw,6623
|
||||||
|
pip/_internal/commands/download.pyc,,
|
||||||
|
pip/_internal/commands/freeze.py,sha256=VvS3G0wrm_9BH3B7Ex5msLL_1UQTtCq5G8dDI63Iemo,3259
|
||||||
|
pip/_internal/commands/freeze.pyc,,
|
||||||
|
pip/_internal/commands/hash.py,sha256=K1JycsD-rpjqrRcL_ijacY9UKmI82pQcLYq4kCM4Pv0,1681
|
||||||
|
pip/_internal/commands/hash.pyc,,
|
||||||
|
pip/_internal/commands/help.py,sha256=MwBhPJpW1Dt3GfJV3V8V6kgAy_pXT0jGrZJB1wCTW-E,1090
|
||||||
|
pip/_internal/commands/help.pyc,,
|
||||||
|
pip/_internal/commands/install.py,sha256=vSb8TfUHwz3HJ5cA-JnPP3X84ONQ0wkCztw0pHFbmsc,22841
|
||||||
|
pip/_internal/commands/install.pyc,,
|
||||||
|
pip/_internal/commands/list.py,sha256=EtKEUotPbLCzzcWrZqEiEXi4ic00dgUOKUeNU0y7Pfg,10166
|
||||||
|
pip/_internal/commands/list.pyc,,
|
||||||
|
pip/_internal/commands/search.py,sha256=sLZ9icKMEEGekHvzRRZMiTd1zCFIZeDptyyU1mQCYzk,4728
|
||||||
|
pip/_internal/commands/search.pyc,,
|
||||||
|
pip/_internal/commands/show.py,sha256=bE-ucu8fAjTTENpRRKhwD3QSWR8Rss7YgKAbMJoxock,6273
|
||||||
|
pip/_internal/commands/show.pyc,,
|
||||||
|
pip/_internal/commands/uninstall.py,sha256=h0gfPF5jylDESx_IHgF6bZME7QAEOHzQHdn65GP-jrE,2963
|
||||||
|
pip/_internal/commands/uninstall.pyc,,
|
||||||
|
pip/_internal/commands/wheel.py,sha256=7MNPZqK9WWxZC3TgzvMBH-RPRlOFLpwq927lkzUiUjI,7167
|
||||||
|
pip/_internal/commands/wheel.pyc,,
|
||||||
|
pip/_internal/configuration.py,sha256=xit1f8ZdnHz-AHzWAKTUa_gZzlIIM-5AgK30glB71ik,13115
|
||||||
|
pip/_internal/configuration.pyc,,
|
||||||
|
pip/_internal/download.py,sha256=0_8jUtL4SLZe4qo8Fe66qkbO69gUG-IPbp932WOHyFs,35147
|
||||||
|
pip/_internal/download.pyc,,
|
||||||
|
pip/_internal/exceptions.py,sha256=ryXWmEJpSHr3yXXk1efWHSzQwAjBdBJiKR5kCQvjgPA,9117
|
||||||
|
pip/_internal/exceptions.pyc,,
|
||||||
|
pip/_internal/index.py,sha256=BO6jpJRvb_6HaS4meE8Lj_lyAX7IRP6pRof-zG-_hYw,42268
|
||||||
|
pip/_internal/index.pyc,,
|
||||||
|
pip/_internal/locations.py,sha256=-N3f1I24gcPTdW52onPnySDoQUIn_TtPYV99WwsjxRE,6932
|
||||||
|
pip/_internal/locations.pyc,,
|
||||||
|
pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63
|
||||||
|
pip/_internal/models/__init__.pyc,,
|
||||||
|
pip/_internal/models/candidate.py,sha256=_IzS-yw0h2UHfZALsZ2mxkeGNSNuNGspjSn2JfZ-ZHM,1045
|
||||||
|
pip/_internal/models/candidate.pyc,,
|
||||||
|
pip/_internal/models/format_control.py,sha256=ap8Swa26ocSXBxIuCvaDBRZjxdKUFuwC-bfqXQHWtKw,2250
|
||||||
|
pip/_internal/models/format_control.pyc,,
|
||||||
|
pip/_internal/models/index.py,sha256=K59A8-hVhBM20Xkahr4dTwP7OjkJyEqXH11UwHFVgqM,1060
|
||||||
|
pip/_internal/models/index.pyc,,
|
||||||
|
pip/_internal/models/link.py,sha256=Hqu72UgH266njr2z2kTnIG-sQiPtjENDbPqXFzT-84s,4783
|
||||||
|
pip/_internal/models/link.pyc,,
|
||||||
|
pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_internal/operations/__init__.pyc,,
|
||||||
|
pip/_internal/operations/check.py,sha256=CZHaksHKUMo58wGHGhhKlPrpcRMHObouzzyd9pMRFt8,5109
|
||||||
|
pip/_internal/operations/check.pyc,,
|
||||||
|
pip/_internal/operations/freeze.py,sha256=_Ffl2HpoWLLHaiB1XyTjKIA3QWC8H-E1ib6xJgX_mRE,9279
|
||||||
|
pip/_internal/operations/freeze.pyc,,
|
||||||
|
pip/_internal/operations/prepare.py,sha256=jQ6FaxA2u_MYnDQxcu6YCfmJ9sfhqrKN9vdd4-5N6lU,16931
|
||||||
|
pip/_internal/operations/prepare.pyc,,
|
||||||
|
pip/_internal/pep425tags.py,sha256=jyBorYxepVJeHNo69TE-3UxJXsGO2XvGxveSWQDi_Wo,13128
|
||||||
|
pip/_internal/pep425tags.pyc,,
|
||||||
|
pip/_internal/pyproject.py,sha256=OlCw7pSqST68hUF_eV-YVaqJ4I7z_ROJwvgra-2C_5I,6464
|
||||||
|
pip/_internal/pyproject.pyc,,
|
||||||
|
pip/_internal/req/__init__.py,sha256=Y2SjAuMFsSt3dkiK8kkiQAfv8sHrjl0PAT63FKFT0tM,2364
|
||||||
|
pip/_internal/req/__init__.pyc,,
|
||||||
|
pip/_internal/req/constructors.py,sha256=4KlO_-G89XYZW1VnzHwV34oCvR6ilmxFqSSGLgv4PEw,11399
|
||||||
|
pip/_internal/req/constructors.pyc,,
|
||||||
|
pip/_internal/req/req_file.py,sha256=mZoQvhHZJwgljrXDH8CLXaNoUK4sM8_bRfK9Po2fM80,13714
|
||||||
|
pip/_internal/req/req_file.pyc,,
|
||||||
|
pip/_internal/req/req_install.py,sha256=SGJLNpyZwzOL_EqfviIvAoZgxAoivxmFBN1cOU7DX9s,40061
|
||||||
|
pip/_internal/req/req_install.pyc,,
|
||||||
|
pip/_internal/req/req_set.py,sha256=PaDc5EswLQhxBMFbuKbJ0frZbMNKocmA8OGqIWT-9EY,7860
|
||||||
|
pip/_internal/req/req_set.pyc,,
|
||||||
|
pip/_internal/req/req_tracker.py,sha256=wBpDzSDSYwpUfW4K43NrEOCCp1r6stuubfLc65Y95EM,3129
|
||||||
|
pip/_internal/req/req_tracker.pyc,,
|
||||||
|
pip/_internal/req/req_uninstall.py,sha256=rVOk8BRM_L9rsUUr9lmkV6Lm9N1Os7TEIDir6tT1Q7U,23105
|
||||||
|
pip/_internal/req/req_uninstall.pyc,,
|
||||||
|
pip/_internal/resolve.py,sha256=rZDMkyhUIbaytY9KsYQVez8nl21xLXgaDt8xuHvyGMI,15128
|
||||||
|
pip/_internal/resolve.pyc,,
|
||||||
|
pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_internal/utils/__init__.pyc,,
|
||||||
|
pip/_internal/utils/appdirs.py,sha256=r9i0BZLK9KcvrzI5tqlw8ehRTtSehWGERFLy7YppG3g,9398
|
||||||
|
pip/_internal/utils/appdirs.pyc,,
|
||||||
|
pip/_internal/utils/compat.py,sha256=Q0cmYGBaKB4tV5E0CG11339YLxuCaqdUCSJd9vinMc8,8551
|
||||||
|
pip/_internal/utils/compat.pyc,,
|
||||||
|
pip/_internal/utils/deprecation.py,sha256=HYUvfCZUxwLIFlYHeZM3VmuFhXTdlw0rk4-cC14bKw4,3080
|
||||||
|
pip/_internal/utils/deprecation.pyc,,
|
||||||
|
pip/_internal/utils/encoding.py,sha256=tudXCoAPe9fZvNK4cmWQs2frREZ-QuGCwF_SlTyz6cI,1218
|
||||||
|
pip/_internal/utils/encoding.pyc,,
|
||||||
|
pip/_internal/utils/filesystem.py,sha256=ojaIDvOFOtkpKme5se6X2N8ARmQxu8cxvaaI-NFqVtk,990
|
||||||
|
pip/_internal/utils/filesystem.pyc,,
|
||||||
|
pip/_internal/utils/glibc.py,sha256=9_1wY9Lmca4xzOQDF1A6ITW_N80j_BXwN7Sx7vBqP4k,3282
|
||||||
|
pip/_internal/utils/glibc.pyc,,
|
||||||
|
pip/_internal/utils/hashes.py,sha256=_6l8M_nqmLZjs-o2lP2rB7ZleAT05WOuqgwBa8uFYR8,3527
|
||||||
|
pip/_internal/utils/hashes.pyc,,
|
||||||
|
pip/_internal/utils/logging.py,sha256=qSYK7Wf_oiCr1VR4qvAq_TtpY3SIKSlVDgnAeQqSjHc,11671
|
||||||
|
pip/_internal/utils/logging.pyc,,
|
||||||
|
pip/_internal/utils/misc.py,sha256=QsYl2j5rU5Mh_CEsSf1W8GB6HvPOfioj30Emqz7mg7s,32434
|
||||||
|
pip/_internal/utils/misc.pyc,,
|
||||||
|
pip/_internal/utils/models.py,sha256=DQYZSRhjvSdDTAaJLLCpDtxAn1S_-v_8nlNjv4T2jwY,1042
|
||||||
|
pip/_internal/utils/models.pyc,,
|
||||||
|
pip/_internal/utils/outdated.py,sha256=sEe1l902jiOl3tArf6omqVd44s4BT9DOk3a3CXtJNNI,5868
|
||||||
|
pip/_internal/utils/outdated.pyc,,
|
||||||
|
pip/_internal/utils/packaging.py,sha256=frr5M-ORe30rRKbH6pwqp_jkX1T8rx-UGDlj8vG5HII,2743
|
||||||
|
pip/_internal/utils/packaging.pyc,,
|
||||||
|
pip/_internal/utils/setuptools_build.py,sha256=0blfscmNJW_iZ5DcswJeDB_PbtTEjfK9RL1R1WEDW2E,278
|
||||||
|
pip/_internal/utils/setuptools_build.pyc,,
|
||||||
|
pip/_internal/utils/temp_dir.py,sha256=0Xq5ZlOd2OOeHwKM6hGy66gnMGAbyhio7DtjLHd7DFg,5339
|
||||||
|
pip/_internal/utils/temp_dir.pyc,,
|
||||||
|
pip/_internal/utils/typing.py,sha256=bF73ImJzIaxLLEVwfEaSJzFGqV9LaxkQBvDULIyr1jI,1125
|
||||||
|
pip/_internal/utils/typing.pyc,,
|
||||||
|
pip/_internal/utils/ui.py,sha256=yRqmi2V4OeTYP9SnXhuXKlyRx8xJ79AjLRgvLCZ4E1E,13812
|
||||||
|
pip/_internal/utils/ui.pyc,,
|
||||||
|
pip/_internal/vcs/__init__.py,sha256=kgwOhkt6ddbKosZytktLydMUb_e-JpXMstJF9YpSOwM,19205
|
||||||
|
pip/_internal/vcs/__init__.pyc,,
|
||||||
|
pip/_internal/vcs/bazaar.py,sha256=3lA6CKyrYpoJuxjTa8oTozszNcqdYILqEhKLJ41RMug,3231
|
||||||
|
pip/_internal/vcs/bazaar.pyc,,
|
||||||
|
pip/_internal/vcs/git.py,sha256=x0PQDgzWho544gfqtE9CXoUkN34zE4YkpgrbTcWEte4,12960
|
||||||
|
pip/_internal/vcs/git.pyc,,
|
||||||
|
pip/_internal/vcs/mercurial.py,sha256=AbH4IWdLCsjUxFnIHRvijV-7SNhfjDZJJFzQ1e_b48Q,3355
|
||||||
|
pip/_internal/vcs/mercurial.pyc,,
|
||||||
|
pip/_internal/vcs/subversion.py,sha256=cMH4MEobSj68gaSiBD53KXVJnEbhtuUJjL8U1Kk_v70,8167
|
||||||
|
pip/_internal/vcs/subversion.pyc,,
|
||||||
|
pip/_internal/wheel.py,sha256=-MijhN1BIuaQkb3909smA63wkbvdRrdtr1CUDxnQTqA,41189
|
||||||
|
pip/_internal/wheel.pyc,,
|
||||||
|
pip/_vendor/__init__.py,sha256=iip2nWwH_riYqnDnM0q4BJFrWE-XWjYfxCejJKct0WM,4654
|
||||||
|
pip/_vendor/__init__.pyc,,
|
||||||
|
pip/_vendor/appdirs.py,sha256=BENKsvcA08IpccD9345-rMrg3aXWFA1q6BFEglnHg6I,24547
|
||||||
|
pip/_vendor/appdirs.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/__init__.py,sha256=6cRPchVqkAkeUtYTSW8qCetjSqJo-GxP-n4VMVDbvmc,302
|
||||||
|
pip/_vendor/cachecontrol/__init__.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/_cmd.py,sha256=URGE0KrA87QekCG3SGPatlSPT571dZTDjNa-ZXX3pDc,1295
|
||||||
|
pip/_vendor/cachecontrol/_cmd.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/adapter.py,sha256=eBGAtVNRZgtl_Kj5JV54miqL9YND-D0JZPahwY8kFtY,4863
|
||||||
|
pip/_vendor/cachecontrol/adapter.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/cache.py,sha256=1fc4wJP8HYt1ycnJXeEw5pCpeBL2Cqxx6g9Fb0AYDWQ,805
|
||||||
|
pip/_vendor/cachecontrol/cache.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/caches/__init__.py,sha256=-gHNKYvaeD0kOk5M74eOrsSgIKUtC6i6GfbmugGweEo,86
|
||||||
|
pip/_vendor/cachecontrol/caches/__init__.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/caches/file_cache.py,sha256=8vrSzzGcdfEfICago1uSFbkumNJMGLbCdEkXsmUIExw,4177
|
||||||
|
pip/_vendor/cachecontrol/caches/file_cache.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=HxelMpNCo-dYr2fiJDwM3hhhRmxUYtB5tXm1GpAAT4Y,856
|
||||||
|
pip/_vendor/cachecontrol/caches/redis_cache.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/compat.py,sha256=kHNvMRdt6s_Xwqq_9qJmr9ou3wYMOMUMxPPcwNxT8Mc,695
|
||||||
|
pip/_vendor/cachecontrol/compat.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/controller.py,sha256=U7g-YwizQ2O5NRgK_MZreF1ntM4E49C3PuF3od-Vwz4,13698
|
||||||
|
pip/_vendor/cachecontrol/controller.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/filewrapper.py,sha256=vACKO8Llzu_ZWyjV1Fxn1MA4TGU60N5N3GSrAFdAY2Q,2533
|
||||||
|
pip/_vendor/cachecontrol/filewrapper.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/heuristics.py,sha256=BFGHJ3yQcxvZizfo90LLZ04T_Z5XSCXvFotrp7Us0sc,4070
|
||||||
|
pip/_vendor/cachecontrol/heuristics.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/serialize.py,sha256=GebE34fgToyWwAsRPguh8hEPN6CqoG-5hRMXRsjVABQ,6954
|
||||||
|
pip/_vendor/cachecontrol/serialize.pyc,,
|
||||||
|
pip/_vendor/cachecontrol/wrapper.py,sha256=sfr9YHWx-5TwNz1H5rT6QOo8ggII6v3vbEDjQFwR6wc,671
|
||||||
|
pip/_vendor/cachecontrol/wrapper.pyc,,
|
||||||
|
pip/_vendor/certifi/__init__.py,sha256=-M1moep9D6jZnOAT0qnM1dpoEHMPage7Osv5xLRLyFg,52
|
||||||
|
pip/_vendor/certifi/__init__.pyc,,
|
||||||
|
pip/_vendor/certifi/__main__.py,sha256=NaCn6WtWME-zzVWQ2j4zFyl8cY4knDa9CwtHNIeFPhM,53
|
||||||
|
pip/_vendor/certifi/__main__.pyc,,
|
||||||
|
pip/_vendor/certifi/cacert.pem,sha256=OXuDPlrPiaJwm5ZEAamspo0ktiNJtyu-OGhOWGqgeic,284518
|
||||||
|
pip/_vendor/certifi/core.py,sha256=EuFc2BsToG5O1-qsx4BSjQ1r1-7WRtH87b1WflZOWhI,218
|
||||||
|
pip/_vendor/certifi/core.pyc,,
|
||||||
|
pip/_vendor/chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559
|
||||||
|
pip/_vendor/chardet/__init__.pyc,,
|
||||||
|
pip/_vendor/chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254
|
||||||
|
pip/_vendor/chardet/big5freq.pyc,,
|
||||||
|
pip/_vendor/chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757
|
||||||
|
pip/_vendor/chardet/big5prober.pyc,,
|
||||||
|
pip/_vendor/chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411
|
||||||
|
pip/_vendor/chardet/chardistribution.pyc,,
|
||||||
|
pip/_vendor/chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787
|
||||||
|
pip/_vendor/chardet/charsetgroupprober.pyc,,
|
||||||
|
pip/_vendor/chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110
|
||||||
|
pip/_vendor/chardet/charsetprober.pyc,,
|
||||||
|
pip/_vendor/chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
||||||
|
pip/_vendor/chardet/cli/__init__.pyc,,
|
||||||
|
pip/_vendor/chardet/cli/chardetect.py,sha256=DI8dlV3FBD0c0XA_y3sQ78z754DUv1J8n34RtDjOXNw,2774
|
||||||
|
pip/_vendor/chardet/cli/chardetect.pyc,,
|
||||||
|
pip/_vendor/chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590
|
||||||
|
pip/_vendor/chardet/codingstatemachine.pyc,,
|
||||||
|
pip/_vendor/chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134
|
||||||
|
pip/_vendor/chardet/compat.pyc,,
|
||||||
|
pip/_vendor/chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855
|
||||||
|
pip/_vendor/chardet/cp949prober.pyc,,
|
||||||
|
pip/_vendor/chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661
|
||||||
|
pip/_vendor/chardet/enums.pyc,,
|
||||||
|
pip/_vendor/chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950
|
||||||
|
pip/_vendor/chardet/escprober.pyc,,
|
||||||
|
pip/_vendor/chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510
|
||||||
|
pip/_vendor/chardet/escsm.pyc,,
|
||||||
|
pip/_vendor/chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749
|
||||||
|
pip/_vendor/chardet/eucjpprober.pyc,,
|
||||||
|
pip/_vendor/chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546
|
||||||
|
pip/_vendor/chardet/euckrfreq.pyc,,
|
||||||
|
pip/_vendor/chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748
|
||||||
|
pip/_vendor/chardet/euckrprober.pyc,,
|
||||||
|
pip/_vendor/chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621
|
||||||
|
pip/_vendor/chardet/euctwfreq.pyc,,
|
||||||
|
pip/_vendor/chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747
|
||||||
|
pip/_vendor/chardet/euctwprober.pyc,,
|
||||||
|
pip/_vendor/chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715
|
||||||
|
pip/_vendor/chardet/gb2312freq.pyc,,
|
||||||
|
pip/_vendor/chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754
|
||||||
|
pip/_vendor/chardet/gb2312prober.pyc,,
|
||||||
|
pip/_vendor/chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838
|
||||||
|
pip/_vendor/chardet/hebrewprober.pyc,,
|
||||||
|
pip/_vendor/chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777
|
||||||
|
pip/_vendor/chardet/jisfreq.pyc,,
|
||||||
|
pip/_vendor/chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643
|
||||||
|
pip/_vendor/chardet/jpcntx.pyc,,
|
||||||
|
pip/_vendor/chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839
|
||||||
|
pip/_vendor/chardet/langbulgarianmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948
|
||||||
|
pip/_vendor/chardet/langcyrillicmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688
|
||||||
|
pip/_vendor/chardet/langgreekmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345
|
||||||
|
pip/_vendor/chardet/langhebrewmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592
|
||||||
|
pip/_vendor/chardet/langhungarianmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290
|
||||||
|
pip/_vendor/chardet/langthaimodel.pyc,,
|
||||||
|
pip/_vendor/chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102
|
||||||
|
pip/_vendor/chardet/langturkishmodel.pyc,,
|
||||||
|
pip/_vendor/chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370
|
||||||
|
pip/_vendor/chardet/latin1prober.pyc,,
|
||||||
|
pip/_vendor/chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413
|
||||||
|
pip/_vendor/chardet/mbcharsetprober.pyc,,
|
||||||
|
pip/_vendor/chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012
|
||||||
|
pip/_vendor/chardet/mbcsgroupprober.pyc,,
|
||||||
|
pip/_vendor/chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481
|
||||||
|
pip/_vendor/chardet/mbcssm.pyc,,
|
||||||
|
pip/_vendor/chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657
|
||||||
|
pip/_vendor/chardet/sbcharsetprober.pyc,,
|
||||||
|
pip/_vendor/chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546
|
||||||
|
pip/_vendor/chardet/sbcsgroupprober.pyc,,
|
||||||
|
pip/_vendor/chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774
|
||||||
|
pip/_vendor/chardet/sjisprober.pyc,,
|
||||||
|
pip/_vendor/chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485
|
||||||
|
pip/_vendor/chardet/universaldetector.pyc,,
|
||||||
|
pip/_vendor/chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766
|
||||||
|
pip/_vendor/chardet/utf8prober.pyc,,
|
||||||
|
pip/_vendor/chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242
|
||||||
|
pip/_vendor/chardet/version.pyc,,
|
||||||
|
pip/_vendor/colorama/__init__.py,sha256=lJdY6COz9uM_pXwuk9oLr0fp8H8q2RrUqN16GKabvq4,239
|
||||||
|
pip/_vendor/colorama/__init__.pyc,,
|
||||||
|
pip/_vendor/colorama/ansi.py,sha256=Fi0un-QLqRm-v7o_nKiOqyC8PapBJK7DLV_q9LKtTO0,2524
|
||||||
|
pip/_vendor/colorama/ansi.pyc,,
|
||||||
|
pip/_vendor/colorama/ansitowin32.py,sha256=u8QaqdqS_xYSfNkPM1eRJLHz6JMWPodaJaP0mxgHCDc,10462
|
||||||
|
pip/_vendor/colorama/ansitowin32.pyc,,
|
||||||
|
pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915
|
||||||
|
pip/_vendor/colorama/initialise.pyc,,
|
||||||
|
pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404
|
||||||
|
pip/_vendor/colorama/win32.pyc,,
|
||||||
|
pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438
|
||||||
|
pip/_vendor/colorama/winterm.pyc,,
|
||||||
|
pip/_vendor/distlib/__init__.py,sha256=7uthK6m96pTekk8hjlT-MybcwYmmxwP8gEOxXVg1f2s,581
|
||||||
|
pip/_vendor/distlib/__init__.pyc,,
|
||||||
|
pip/_vendor/distlib/_backport/__init__.py,sha256=bqS_dTOH6uW9iGgd0uzfpPjo6vZ4xpPZ7kyfZJ2vNaw,274
|
||||||
|
pip/_vendor/distlib/_backport/__init__.pyc,,
|
||||||
|
pip/_vendor/distlib/_backport/misc.py,sha256=KWecINdbFNOxSOP1fGF680CJnaC6S4fBRgEtaYTw0ig,971
|
||||||
|
pip/_vendor/distlib/_backport/misc.pyc,,
|
||||||
|
pip/_vendor/distlib/_backport/shutil.py,sha256=VW1t3uYqUjWZH7jV-6QiimLhnldoV5uIpH4EuiT1jfw,25647
|
||||||
|
pip/_vendor/distlib/_backport/shutil.pyc,,
|
||||||
|
pip/_vendor/distlib/_backport/sysconfig.cfg,sha256=swZKxq9RY5e9r3PXCrlvQPMsvOdiWZBTHLEbqS8LJLU,2617
|
||||||
|
pip/_vendor/distlib/_backport/sysconfig.py,sha256=JdJ9ztRy4Hc-b5-VS74x3nUtdEIVr_OBvMsIb8O2sjc,26964
|
||||||
|
pip/_vendor/distlib/_backport/sysconfig.pyc,,
|
||||||
|
pip/_vendor/distlib/_backport/tarfile.py,sha256=Ihp7rXRcjbIKw8COm9wSePV9ARGXbSF9gGXAMn2Q-KU,92628
|
||||||
|
pip/_vendor/distlib/_backport/tarfile.pyc,,
|
||||||
|
pip/_vendor/distlib/compat.py,sha256=xdNZmqFN5HwF30HjRn5M415pcC2kgXRBXn767xS8v-M,41404
|
||||||
|
pip/_vendor/distlib/compat.pyc,,
|
||||||
|
pip/_vendor/distlib/database.py,sha256=-KJH63AJ7hqjLtGCwOTrionhKr2Vsytdwkjyo8UdEco,51029
|
||||||
|
pip/_vendor/distlib/database.pyc,,
|
||||||
|
pip/_vendor/distlib/index.py,sha256=Dd1kIV06XIdynNpKxHMMRRIKsXuoUsG7QIzntfVtZCI,21073
|
||||||
|
pip/_vendor/distlib/index.pyc,,
|
||||||
|
pip/_vendor/distlib/locators.py,sha256=S9G2IsZp0RnMMbXGrT-gu7892pNpy1XMlUEuUHX3OI8,51828
|
||||||
|
pip/_vendor/distlib/locators.pyc,,
|
||||||
|
pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811
|
||||||
|
pip/_vendor/distlib/manifest.pyc,,
|
||||||
|
pip/_vendor/distlib/markers.py,sha256=6Ac3cCfFBERexiESWIOXmg-apIP8l2esafNSX3KMy-8,4387
|
||||||
|
pip/_vendor/distlib/markers.pyc,,
|
||||||
|
pip/_vendor/distlib/metadata.py,sha256=BNCnpRfFVslyZcosr4vnE_YbkRb3TNxXtk7TrDszJdc,40172
|
||||||
|
pip/_vendor/distlib/metadata.pyc,,
|
||||||
|
pip/_vendor/distlib/resources.py,sha256=2FGv0ZHF14KXjLIlL0R991lyQQGcewOS4mJ-5n-JVnc,10766
|
||||||
|
pip/_vendor/distlib/resources.pyc,,
|
||||||
|
pip/_vendor/distlib/scripts.py,sha256=NYqRJ2uuEuJwr_NNLzWH0m_s_YsobDFQb6HqxuQ2Sew,16638
|
||||||
|
pip/_vendor/distlib/scripts.pyc,,
|
||||||
|
pip/_vendor/distlib/t32.exe,sha256=ftub1bsSPUCOnBn-eCtcarKTk0N0CBEP53BumkIxWJE,92672
|
||||||
|
pip/_vendor/distlib/t64.exe,sha256=iChOG627LWTHY8-jzSwlo9SYU5a-0JHwQu4AqDz8I68,102400
|
||||||
|
pip/_vendor/distlib/util.py,sha256=gwKL5geJKmtR4GeIUnoMAWjsPPG3tVP_mFxw_Sx-isc,59681
|
||||||
|
pip/_vendor/distlib/util.pyc,,
|
||||||
|
pip/_vendor/distlib/version.py,sha256=_n7F6juvQGAcn769E_SHa7fOcf5ERlEVymJ_EjPRwGw,23391
|
||||||
|
pip/_vendor/distlib/version.pyc,,
|
||||||
|
pip/_vendor/distlib/w32.exe,sha256=NPYPpt7PIjVqABEu1CzabbDyHHkJpuw-_qZq_48H0j0,89088
|
||||||
|
pip/_vendor/distlib/w64.exe,sha256=Yb-qr1OQEzL8KRGTk-XHUZDwMSljfQeZnVoTk-K4e7E,99328
|
||||||
|
pip/_vendor/distlib/wheel.py,sha256=gV53KDG7BgbxsdeKjnATbP47gTEJRNylcIeE1TFin1o,39880
|
||||||
|
pip/_vendor/distlib/wheel.pyc,,
|
||||||
|
pip/_vendor/distro.py,sha256=X2So5kjrRKyMbQJ90Xgy93HU5eFtujCzKaYNeoy1k1c,43251
|
||||||
|
pip/_vendor/distro.pyc,,
|
||||||
|
pip/_vendor/html5lib/__init__.py,sha256=Ztrn7UvF-wIFAgRBBa0ML-Gu5AffH3BPX_INJx4SaBI,1162
|
||||||
|
pip/_vendor/html5lib/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/_ihatexml.py,sha256=3LBtJMlzgwM8vpQiU1TvGmEEmNH72sV0yD8yS53y07A,16705
|
||||||
|
pip/_vendor/html5lib/_ihatexml.pyc,,
|
||||||
|
pip/_vendor/html5lib/_inputstream.py,sha256=bPUWcAfJScK4xkjQQaG_HsI2BvEVbFvI0AsodDYPQj0,32552
|
||||||
|
pip/_vendor/html5lib/_inputstream.pyc,,
|
||||||
|
pip/_vendor/html5lib/_tokenizer.py,sha256=YAaOEBD6qc5ISq9Xt9Nif1OFgcybTTfMdwqBkZhpAq4,76580
|
||||||
|
pip/_vendor/html5lib/_tokenizer.pyc,,
|
||||||
|
pip/_vendor/html5lib/_trie/__init__.py,sha256=8VR1bcgD2OpeS2XExpu5yBhP_Q1K-lwKbBKICBPf1kU,289
|
||||||
|
pip/_vendor/html5lib/_trie/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/_trie/_base.py,sha256=uJHVhzif9S0MJXgy9F98iEev5evi_rgUk5BmEbUSp8c,930
|
||||||
|
pip/_vendor/html5lib/_trie/_base.pyc,,
|
||||||
|
pip/_vendor/html5lib/_trie/datrie.py,sha256=EQpqSfkZRuTbE-DuhW7xMdVDxdZNZ0CfmnYfHA_3zxM,1178
|
||||||
|
pip/_vendor/html5lib/_trie/datrie.pyc,,
|
||||||
|
pip/_vendor/html5lib/_trie/py.py,sha256=wXmQLrZRf4MyWNyg0m3h81m9InhLR7GJ002mIIZh-8o,1775
|
||||||
|
pip/_vendor/html5lib/_trie/py.pyc,,
|
||||||
|
pip/_vendor/html5lib/_utils.py,sha256=ismpASeqa2jqEPQjHUj8vReAf7yIoKnvLN5fuOw6nv0,4015
|
||||||
|
pip/_vendor/html5lib/_utils.pyc,,
|
||||||
|
pip/_vendor/html5lib/constants.py,sha256=4lmZWLtEPRLnl8NzftOoYTJdo6jpeMtP6dqQC0g_bWQ,83518
|
||||||
|
pip/_vendor/html5lib/constants.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_vendor/html5lib/filters/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919
|
||||||
|
pip/_vendor/html5lib/filters/alphabeticalattributes.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286
|
||||||
|
pip/_vendor/html5lib/filters/base.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945
|
||||||
|
pip/_vendor/html5lib/filters/inject_meta_charset.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/lint.py,sha256=jk6q56xY0ojiYfvpdP-OZSm9eTqcAdRqhCoPItemPYA,3643
|
||||||
|
pip/_vendor/html5lib/filters/lint.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588
|
||||||
|
pip/_vendor/html5lib/filters/optionaltags.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/sanitizer.py,sha256=4ON02KNjuqda1lCw5_JCUZxb0BzWR5M7ON84dtJ7dm0,26248
|
||||||
|
pip/_vendor/html5lib/filters/sanitizer.pyc,,
|
||||||
|
pip/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214
|
||||||
|
pip/_vendor/html5lib/filters/whitespace.pyc,,
|
||||||
|
pip/_vendor/html5lib/html5parser.py,sha256=g5g2ezkusHxhi7b23vK_-d6K6BfIJRbqIQmvQ9z4EgI,118963
|
||||||
|
pip/_vendor/html5lib/html5parser.pyc,,
|
||||||
|
pip/_vendor/html5lib/serializer.py,sha256=yfcfBHse2wDs6ojxn-kieJjLT5s1ipilQJ0gL3-rJis,15758
|
||||||
|
pip/_vendor/html5lib/serializer.pyc,,
|
||||||
|
pip/_vendor/html5lib/treeadapters/__init__.py,sha256=A0rY5gXIe4bJOiSGRO_j_tFhngRBO8QZPzPtPw5dFzo,679
|
||||||
|
pip/_vendor/html5lib/treeadapters/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715
|
||||||
|
pip/_vendor/html5lib/treeadapters/genshi.pyc,,
|
||||||
|
pip/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776
|
||||||
|
pip/_vendor/html5lib/treeadapters/sax.pyc,,
|
||||||
|
pip/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592
|
||||||
|
pip/_vendor/html5lib/treebuilders/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/treebuilders/base.py,sha256=wQGp5yy22TNG8tJ6aREe4UUeTR7A99dEz0BXVaedWb4,14579
|
||||||
|
pip/_vendor/html5lib/treebuilders/base.pyc,,
|
||||||
|
pip/_vendor/html5lib/treebuilders/dom.py,sha256=SY3MsijXyzdNPc8aK5IQsupBoM8J67y56DgNtGvsb9g,8835
|
||||||
|
pip/_vendor/html5lib/treebuilders/dom.pyc,,
|
||||||
|
pip/_vendor/html5lib/treebuilders/etree.py,sha256=aqIBOGj_dFYqBURIcTegGNBhAIJOw5iFDHb4jrkYH-8,12764
|
||||||
|
pip/_vendor/html5lib/treebuilders/etree.pyc,,
|
||||||
|
pip/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=9V0dXxbJYYq-Skgb5-_OL2NkVYpjioEb4CHajo0e9yI,14122
|
||||||
|
pip/_vendor/html5lib/treebuilders/etree_lxml.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/__init__.py,sha256=yhXxHpjlSqfQyUag3v8-vWjMPriFBU8YRAPNpDgBTn8,5714
|
||||||
|
pip/_vendor/html5lib/treewalkers/__init__.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476
|
||||||
|
pip/_vendor/html5lib/treewalkers/base.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413
|
||||||
|
pip/_vendor/html5lib/treewalkers/dom.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/etree.py,sha256=sz1o6mmE93NQ53qJFDO7HKyDtuwgK-Ay3qSFZPC6u00,4550
|
||||||
|
pip/_vendor/html5lib/treewalkers/etree.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=sY6wfRshWTllu6n48TPWpKsQRPp-0CQrT0hj_AdzHSU,6309
|
||||||
|
pip/_vendor/html5lib/treewalkers/etree_lxml.pyc,,
|
||||||
|
pip/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309
|
||||||
|
pip/_vendor/html5lib/treewalkers/genshi.pyc,,
|
||||||
|
pip/_vendor/idna/__init__.py,sha256=9Nt7xpyet3DmOrPUGooDdAwmHZZu1qUAy2EaJ93kGiQ,58
|
||||||
|
pip/_vendor/idna/__init__.pyc,,
|
||||||
|
pip/_vendor/idna/codec.py,sha256=lvYb7yu7PhAqFaAIAdWcwgaWI2UmgseUua-1c0AsG0A,3299
|
||||||
|
pip/_vendor/idna/codec.pyc,,
|
||||||
|
pip/_vendor/idna/compat.py,sha256=R-h29D-6mrnJzbXxymrWUW7iZUvy-26TQwZ0ij57i4U,232
|
||||||
|
pip/_vendor/idna/compat.pyc,,
|
||||||
|
pip/_vendor/idna/core.py,sha256=JDCZZ_PLESqIgEbU8mPyoEufWwoOiIqygA17-QZIe3s,11733
|
||||||
|
pip/_vendor/idna/core.pyc,,
|
||||||
|
pip/_vendor/idna/idnadata.py,sha256=HXaPFw6_YAJ0qppACPu0YLAULtRs3QovRM_CCZHGdY0,40899
|
||||||
|
pip/_vendor/idna/idnadata.pyc,,
|
||||||
|
pip/_vendor/idna/intranges.py,sha256=TY1lpxZIQWEP6tNqjZkFA5hgoMWOj1OBmnUG8ihT87E,1749
|
||||||
|
pip/_vendor/idna/intranges.pyc,,
|
||||||
|
pip/_vendor/idna/package_data.py,sha256=kIzeKKXEouXLR4srqwf9Q3zv-NffKSOz5aSDOJARPB0,21
|
||||||
|
pip/_vendor/idna/package_data.pyc,,
|
||||||
|
pip/_vendor/idna/uts46data.py,sha256=oLyNZ1pBaiBlj9zFzLFRd_P7J8MkRcgDisjExZR_4MY,198292
|
||||||
|
pip/_vendor/idna/uts46data.pyc,,
|
||||||
|
pip/_vendor/ipaddress.py,sha256=2OgbkeAD2rLkcXqbcvof3J5R7lRwjNLoBySyTkBtKnc,79852
|
||||||
|
pip/_vendor/ipaddress.pyc,,
|
||||||
|
pip/_vendor/lockfile/__init__.py,sha256=Tqpz90DwKYfhPsfzVOJl84TL87pdFE5ePNHdXAxs4Tk,9371
|
||||||
|
pip/_vendor/lockfile/__init__.pyc,,
|
||||||
|
pip/_vendor/lockfile/linklockfile.py,sha256=C7OH3H4GdK68u4FQgp8fkP2kO4fyUTSyj3X6blgfobc,2652
|
||||||
|
pip/_vendor/lockfile/linklockfile.pyc,,
|
||||||
|
pip/_vendor/lockfile/mkdirlockfile.py,sha256=e3qgIL-etZMLsS-3ft19iW_8IQ360HNkGOqE3yBKsUw,3096
|
||||||
|
pip/_vendor/lockfile/mkdirlockfile.pyc,,
|
||||||
|
pip/_vendor/lockfile/pidlockfile.py,sha256=ukH9uk6NFuxyVmG5QiWw4iKq3fT7MjqUguX95avYPIY,6090
|
||||||
|
pip/_vendor/lockfile/pidlockfile.pyc,,
|
||||||
|
pip/_vendor/lockfile/sqlitelockfile.py,sha256=o2TMkMRY0iwn-iL1XMRRIFStMUkS4i3ajceeYNntKFg,5506
|
||||||
|
pip/_vendor/lockfile/sqlitelockfile.pyc,,
|
||||||
|
pip/_vendor/lockfile/symlinklockfile.py,sha256=ABwXXmvTHvCl5viPblShL3PG-gGsLiT1roAMfDRwhi8,2616
|
||||||
|
pip/_vendor/lockfile/symlinklockfile.pyc,,
|
||||||
|
pip/_vendor/msgpack/__init__.py,sha256=y0bk2YbzK6J2e0J_dyreN6nD7yM2IezT6m_tU2h-Mdg,1677
|
||||||
|
pip/_vendor/msgpack/__init__.pyc,,
|
||||||
|
pip/_vendor/msgpack/_version.py,sha256=dN7wVIjbyuQIJ35B2o6gymQNDLPlj_7-uTfgCv7KErM,20
|
||||||
|
pip/_vendor/msgpack/_version.pyc,,
|
||||||
|
pip/_vendor/msgpack/exceptions.py,sha256=lPkAi_u12NlFajDz4FELSHEdfU8hrR3zeTvKX8aQuz4,1056
|
||||||
|
pip/_vendor/msgpack/exceptions.pyc,,
|
||||||
|
pip/_vendor/msgpack/fallback.py,sha256=h0ll8xnq12mI9PuQ9Qd_Ihtt08Sp8L0JqhG9KY8Vyjk,36411
|
||||||
|
pip/_vendor/msgpack/fallback.pyc,,
|
||||||
|
pip/_vendor/packaging/__about__.py,sha256=Wg0-hNgTU2_lBZcGBh5pm1R9yroQ3rv-X0rig8KjA6o,744
|
||||||
|
pip/_vendor/packaging/__about__.pyc,,
|
||||||
|
pip/_vendor/packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562
|
||||||
|
pip/_vendor/packaging/__init__.pyc,,
|
||||||
|
pip/_vendor/packaging/_compat.py,sha256=Ugdm-qcneSchW25JrtMIKgUxfEEBcCAz6WrEeXeqz9o,865
|
||||||
|
pip/_vendor/packaging/_compat.pyc,,
|
||||||
|
pip/_vendor/packaging/_structures.py,sha256=pVd90XcXRGwpZRB_qdFuVEibhCHpX_bL5zYr9-N0mc8,1416
|
||||||
|
pip/_vendor/packaging/_structures.pyc,,
|
||||||
|
pip/_vendor/packaging/markers.py,sha256=-QjvJkhSJBxBogO9J_EpPQudHaaLV3rgVYsBDqn-ZLc,8234
|
||||||
|
pip/_vendor/packaging/markers.pyc,,
|
||||||
|
pip/_vendor/packaging/requirements.py,sha256=grcnFU8x7KD230JaFLXtWl3VClLuOmsOy4c-m55tOWs,4700
|
||||||
|
pip/_vendor/packaging/requirements.pyc,,
|
||||||
|
pip/_vendor/packaging/specifiers.py,sha256=0ZzQpcUnvrQ6LjR-mQRLzMr8G6hdRv-mY0VSf_amFtI,27778
|
||||||
|
pip/_vendor/packaging/specifiers.pyc,,
|
||||||
|
pip/_vendor/packaging/utils.py,sha256=VaTC0Ei7zO2xl9ARiWmz2YFLFt89PuuhLbAlXMyAGms,1520
|
||||||
|
pip/_vendor/packaging/utils.pyc,,
|
||||||
|
pip/_vendor/packaging/version.py,sha256=Npdwnb8OHedj_2L86yiUqscujb7w_i5gmSK1PhOAFzg,11978
|
||||||
|
pip/_vendor/packaging/version.pyc,,
|
||||||
|
pip/_vendor/pep517/__init__.py,sha256=nOY747zTld3oTdEetBG6DWxEcZXTeOQk0aHvbR-sa5w,84
|
||||||
|
pip/_vendor/pep517/__init__.pyc,,
|
||||||
|
pip/_vendor/pep517/_in_process.py,sha256=xMY2kLutkjCti5WqTmKOLRRL3o8Ds_k-fObFyuMv1tk,6061
|
||||||
|
pip/_vendor/pep517/_in_process.pyc,,
|
||||||
|
pip/_vendor/pep517/build.py,sha256=-n8PT-ugS1TdqoTUY1vatDQjrLtx48K_-Quu2MuQBiA,2699
|
||||||
|
pip/_vendor/pep517/build.pyc,,
|
||||||
|
pip/_vendor/pep517/check.py,sha256=Lu7nMdYu1JVV58fE3hv-d_avTy5h0yO9LsIzAt82Clk,5885
|
||||||
|
pip/_vendor/pep517/check.pyc,,
|
||||||
|
pip/_vendor/pep517/colorlog.py,sha256=Tk9AuYm_cLF3BKTBoSTJt9bRryn0aFojIQOwbfVUTxQ,4098
|
||||||
|
pip/_vendor/pep517/colorlog.pyc,,
|
||||||
|
pip/_vendor/pep517/compat.py,sha256=4SFG4QN-cNj8ebSa0wV0HUtEEQWwmbok2a0uk1gYEOM,631
|
||||||
|
pip/_vendor/pep517/compat.pyc,,
|
||||||
|
pip/_vendor/pep517/envbuild.py,sha256=9-u4KffexPMEm52rTaIjEOxsCAd2DMByxzv5H566QLw,5763
|
||||||
|
pip/_vendor/pep517/envbuild.pyc,,
|
||||||
|
pip/_vendor/pep517/wrappers.py,sha256=9dZn-q7F5KyQKUJMie2uKwur2FG0CLXz_kLZzkJOhZc,5912
|
||||||
|
pip/_vendor/pep517/wrappers.pyc,,
|
||||||
|
pip/_vendor/pkg_resources/__init__.py,sha256=ZVHzk7ZiFIIgE2RTJj8F7wwjdMGrAngMWtQo-rGNsm4,107910
|
||||||
|
pip/_vendor/pkg_resources/__init__.pyc,,
|
||||||
|
pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562
|
||||||
|
pip/_vendor/pkg_resources/py31compat.pyc,,
|
||||||
|
pip/_vendor/progress/__init__.py,sha256=fcbQQXo5np2CoQyhSH5XprkicwLZNLePR3uIahznSO0,4857
|
||||||
|
pip/_vendor/progress/__init__.pyc,,
|
||||||
|
pip/_vendor/progress/bar.py,sha256=QuDuVNcmXgpxtNtxO0Fq72xKigxABaVmxYGBw4J3Z_E,2854
|
||||||
|
pip/_vendor/progress/bar.pyc,,
|
||||||
|
pip/_vendor/progress/counter.py,sha256=MznyBrvPWrOlGe4MZAlGUb9q3aODe6_aNYeAE_VNoYA,1372
|
||||||
|
pip/_vendor/progress/counter.pyc,,
|
||||||
|
pip/_vendor/progress/spinner.py,sha256=k8JbDW94T0-WXuXfxZIFhdoNPYp3jfnpXqBnfRv5fGs,1380
|
||||||
|
pip/_vendor/progress/spinner.pyc,,
|
||||||
|
pip/_vendor/pyparsing.py,sha256=sxGUe_YcWBB5ZoHec0m1iJtgcj4iKv_SGfdA_zVCYII,245385
|
||||||
|
pip/_vendor/pyparsing.pyc,,
|
||||||
|
pip/_vendor/pytoml/__init__.py,sha256=W_SKx36Hsew-Fty36BOpreLm4uF4V_Tgkm_z9rIoOE8,127
|
||||||
|
pip/_vendor/pytoml/__init__.pyc,,
|
||||||
|
pip/_vendor/pytoml/core.py,sha256=9CrLLTs1PdWjEwRnYzt_i4dhHcZvGxs_GsMlYAX3iY4,509
|
||||||
|
pip/_vendor/pytoml/core.pyc,,
|
||||||
|
pip/_vendor/pytoml/parser.py,sha256=2tDXkldqPQJhyadXzL2rGhVbjUyBNeXXhaEfncHl2iQ,10326
|
||||||
|
pip/_vendor/pytoml/parser.pyc,,
|
||||||
|
pip/_vendor/pytoml/test.py,sha256=2nQs4aX3XQEaaQCx6x_OJTS2Hb0_IiTZRqNOeDmLCzo,1021
|
||||||
|
pip/_vendor/pytoml/test.pyc,,
|
||||||
|
pip/_vendor/pytoml/utils.py,sha256=JCLHx77Hu1R3F-bRgiROIiKyCzLwyebnp5P35cRJxWs,1665
|
||||||
|
pip/_vendor/pytoml/utils.pyc,,
|
||||||
|
pip/_vendor/pytoml/writer.py,sha256=WbNNQg3sh_V-s3kt88LkNNbxEq6pPDdhRE-daJzArcI,3198
|
||||||
|
pip/_vendor/pytoml/writer.pyc,,
|
||||||
|
pip/_vendor/requests/__init__.py,sha256=ZI8kbaEzLAxsqex3MmMPr-v24d1RfZbNAOY8fUxg2Xw,4074
|
||||||
|
pip/_vendor/requests/__init__.pyc,,
|
||||||
|
pip/_vendor/requests/__version__.py,sha256=8KG3anaNCi-PEclPPOHJ_cv1udY_L1_njVr84gRZ9HM,436
|
||||||
|
pip/_vendor/requests/__version__.pyc,,
|
||||||
|
pip/_vendor/requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096
|
||||||
|
pip/_vendor/requests/_internal_utils.pyc,,
|
||||||
|
pip/_vendor/requests/adapters.py,sha256=e-bmKEApNVqFdylxuMJJfiaHdlmS_zhWhIMEzlHvGuc,21548
|
||||||
|
pip/_vendor/requests/adapters.pyc,,
|
||||||
|
pip/_vendor/requests/api.py,sha256=hWZgfD7OriCZFOnpeq0bv2pbXDl8YXfxDwAcU036qDs,6253
|
||||||
|
pip/_vendor/requests/api.pyc,,
|
||||||
|
pip/_vendor/requests/auth.py,sha256=QB2-cSUj1jrvWZfPXttsZpyAacQgtKLVk14vQW9TpSE,10206
|
||||||
|
pip/_vendor/requests/auth.pyc,,
|
||||||
|
pip/_vendor/requests/certs.py,sha256=nXRVq9DtGmv_1AYbwjTu9UrgAcdJv05ZvkNeaoLOZxY,465
|
||||||
|
pip/_vendor/requests/certs.pyc,,
|
||||||
|
pip/_vendor/requests/compat.py,sha256=FZX4Q_EMKiMnhZpZ3g_gOsT-j2ca9ij2gehDx1cwYeo,1941
|
||||||
|
pip/_vendor/requests/compat.pyc,,
|
||||||
|
pip/_vendor/requests/cookies.py,sha256=Y-bKX6TvW3FnYlE6Au0SXtVVWcaNdFvuAwQxw-G0iTI,18430
|
||||||
|
pip/_vendor/requests/cookies.pyc,,
|
||||||
|
pip/_vendor/requests/exceptions.py,sha256=-mLam3TAx80V09EaH3H-ZxR61eAVuLRZ8zgBBSLjK44,3197
|
||||||
|
pip/_vendor/requests/exceptions.pyc,,
|
||||||
|
pip/_vendor/requests/help.py,sha256=SJPVcoXeo7KfK4AxJN5eFVQCjr0im87tU2n7ubLsksU,3578
|
||||||
|
pip/_vendor/requests/help.pyc,,
|
||||||
|
pip/_vendor/requests/hooks.py,sha256=QReGyy0bRcr5rkwCuObNakbYsc7EkiKeBwG4qHekr2Q,757
|
||||||
|
pip/_vendor/requests/hooks.pyc,,
|
||||||
|
pip/_vendor/requests/models.py,sha256=6s-37iAqXVptq8z7U_LoH_pbIPrCQUm_Z8QuIGE29Q0,34275
|
||||||
|
pip/_vendor/requests/models.pyc,,
|
||||||
|
pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695
|
||||||
|
pip/_vendor/requests/packages.pyc,,
|
||||||
|
pip/_vendor/requests/sessions.py,sha256=DjbCotDW6xSAaBsjbW-L8l4N0UcwmrxVNgSrZgIjGWM,29332
|
||||||
|
pip/_vendor/requests/sessions.pyc,,
|
||||||
|
pip/_vendor/requests/status_codes.py,sha256=XWlcpBjbCtq9sSqpH9_KKxgnLTf9Z__wCWolq21ySlg,4129
|
||||||
|
pip/_vendor/requests/status_codes.pyc,,
|
||||||
|
pip/_vendor/requests/structures.py,sha256=zoP8qly2Jak5e89HwpqjN1z2diztI-_gaqts1raJJBc,2981
|
||||||
|
pip/_vendor/requests/structures.pyc,,
|
||||||
|
pip/_vendor/requests/utils.py,sha256=LtPJ1db6mJff2TJSJWKi7rBpzjPS3mSOrjC9zRhoD3A,30049
|
||||||
|
pip/_vendor/requests/utils.pyc,,
|
||||||
|
pip/_vendor/retrying.py,sha256=k3fflf5_Mm0XcIJYhB7Tj34bqCCPhUDkYbx1NvW2FPE,9972
|
||||||
|
pip/_vendor/retrying.pyc,,
|
||||||
|
pip/_vendor/six.py,sha256=h9jch2pS86y4R36pKRS3LOYUCVFNIJMRwjZ4fJDtJ44,32452
|
||||||
|
pip/_vendor/six.pyc,,
|
||||||
|
pip/_vendor/urllib3/__init__.py,sha256=EZviRQA_iuL_94EeJHY4JAArRXbRCkAzA0HH9iXZ15s,2722
|
||||||
|
pip/_vendor/urllib3/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/_collections.py,sha256=-CAKsDE-WdubAjlBSZLx7b0e7WKenaNGwWvGLDEF1TM,10746
|
||||||
|
pip/_vendor/urllib3/_collections.pyc,,
|
||||||
|
pip/_vendor/urllib3/connection.py,sha256=KLFvknLgllcMkgJ-zUsFjCzOt9P03fDoIpTPz_vqXCw,13839
|
||||||
|
pip/_vendor/urllib3/connection.pyc,,
|
||||||
|
pip/_vendor/urllib3/connectionpool.py,sha256=rgc_3D0VsD5VDxr4KzzA8Plee0Rmerm5WKb71FcxWu8,35097
|
||||||
|
pip/_vendor/urllib3/connectionpool.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_vendor/urllib3/contrib/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=lhYXvB5_oGKSeurX7za3XhcGyERvNjXRQ3eJp2GmQ3M,717
|
||||||
|
pip/_vendor/urllib3/contrib/_appengine_environ.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=x2kLSh-ASZKsun0FxtraBuLVe3oHuth4YW6yZ5Vof-w,17560
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/bindings.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=Umy5u-3Z957GirdapnicXVOpHaM4xdOZABJuJxfaeJA,12162
|
||||||
|
pip/_vendor/urllib3/contrib/_securetransport/low_level.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/appengine.py,sha256=VvDpkc5gf9dTXNxXmyG1mPdON_3DrYG_eW4uOqN98oQ,10938
|
||||||
|
pip/_vendor/urllib3/contrib/appengine.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=5ZpMF7N9B6NEjVU-r-xjDOV_-hkNvsDoNc84J2yqauI,4459
|
||||||
|
pip/_vendor/urllib3/contrib/ntlmpool.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=-kI_9y99Iwybv6Wy8IF8PugVl61BeMBEEqGwrDYNCuc,15823
|
||||||
|
pip/_vendor/urllib3/contrib/pyopenssl.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/securetransport.py,sha256=BqXSlChN9_hjCWgyN6JdcgvBUdc37QCCX4u3_8zE_9o,30309
|
||||||
|
pip/_vendor/urllib3/contrib/securetransport.pyc,,
|
||||||
|
pip/_vendor/urllib3/contrib/socks.py,sha256=Iom0snbHkCuZbZ7Sle2Kueha1W0jYAJ0SyCOtePLaio,6391
|
||||||
|
pip/_vendor/urllib3/contrib/socks.pyc,,
|
||||||
|
pip/_vendor/urllib3/exceptions.py,sha256=rFeIfBNKC8KJ61ux-MtJyJlEC9G9ggkmCeF751JwVR4,6604
|
||||||
|
pip/_vendor/urllib3/exceptions.pyc,,
|
||||||
|
pip/_vendor/urllib3/fields.py,sha256=D_TE_SK15YatdbhWDMN0OE3X6UCJn1RTkANINCYOobE,5943
|
||||||
|
pip/_vendor/urllib3/fields.pyc,,
|
||||||
|
pip/_vendor/urllib3/filepost.py,sha256=40CROlpRKVBpFUkD0R6wJf_PpvbcRQRFUu0OOQlFkKM,2436
|
||||||
|
pip/_vendor/urllib3/filepost.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/__init__.py,sha256=nlChrGzkjCkmhCX9HrF_qHPUgosfsPQkVIJxiiLhk9g,109
|
||||||
|
pip/_vendor/urllib3/packages/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
pip/_vendor/urllib3/packages/backports/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/backports/makefile.py,sha256=so2z9BiNM8kh38Ve5tomQP_mp2_ubEqzdlCpLZKzzCI,1456
|
||||||
|
pip/_vendor/urllib3/packages/backports/makefile.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098
|
||||||
|
pip/_vendor/urllib3/packages/six.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py,sha256=WBVbxQBojNAxfZwNavkox3BgJiMA9BJmm-_fwd0jD_o,688
|
||||||
|
pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py,sha256=E-9J-kAaUn76WMZ4PpzKUxM4C3yjY7mopOpbPIy3Dso,5700
|
||||||
|
pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.pyc,,
|
||||||
|
pip/_vendor/urllib3/poolmanager.py,sha256=csE6Bh6L0FJ3iNOHk2z8KhMT8Eiq976b6pk8I6vrOC8,16853
|
||||||
|
pip/_vendor/urllib3/poolmanager.pyc,,
|
||||||
|
pip/_vendor/urllib3/request.py,sha256=OfelFYzPnxGlU3amEz9uBLjCBOriwgJh4QC_aW9SF3U,5991
|
||||||
|
pip/_vendor/urllib3/request.pyc,,
|
||||||
|
pip/_vendor/urllib3/response.py,sha256=ta1jp4B5PGBWzoAV1s48WLuHCRICQnK7F9m_kyK4Z8g,25609
|
||||||
|
pip/_vendor/urllib3/response.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/__init__.py,sha256=6Ran4oAVIy40Cu_oEPWnNV9bwF5rXx6G1DUZ7oehjPY,1044
|
||||||
|
pip/_vendor/urllib3/util/__init__.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/connection.py,sha256=-AyqcRTuNUHuo5ndtsU0Og_nMyCGATC-kYqOUdBHwIQ,4639
|
||||||
|
pip/_vendor/urllib3/util/connection.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/queue.py,sha256=myTX3JDHntglKQNBf3b6dasHH-uF-W59vzGSQiFdAfI,497
|
||||||
|
pip/_vendor/urllib3/util/queue.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/request.py,sha256=H5_lrHvtwl2U2BbT1UYN9HpruNc1gsNFlz2njQmhPrQ,3705
|
||||||
|
pip/_vendor/urllib3/util/request.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/response.py,sha256=028PNXDZhwBtnm2uXvnAHi_l9_AAGrAMH2Igh2AbgWg,2586
|
||||||
|
pip/_vendor/urllib3/util/response.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/retry.py,sha256=kFQTesNiwPp6ZeQo9VHeUO7b8qA-_l3BnErCAOEPo4Q,15105
|
||||||
|
pip/_vendor/urllib3/util/retry.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/ssl_.py,sha256=4qqBDM82bufhqqEd0b-99sObz95XmEVEXDVi5iAyCeE,13172
|
||||||
|
pip/_vendor/urllib3/util/ssl_.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/timeout.py,sha256=7lHNrgL5YH2cI1j-yZnzV_J8jBlRVdmFhQaNyM1_2b8,9757
|
||||||
|
pip/_vendor/urllib3/util/timeout.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/url.py,sha256=qCY_HHUXvo05wAsEERALgExtlgxLnAHSQ7ce1b-g3SM,6487
|
||||||
|
pip/_vendor/urllib3/util/url.pyc,,
|
||||||
|
pip/_vendor/urllib3/util/wait.py,sha256=p4BZo_Ukp5JF0Dn6jro7cUfqIjnU6WFtuoA6poaV5Jk,5403
|
||||||
|
pip/_vendor/urllib3/util/wait.pyc,,
|
||||||
|
pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579
|
||||||
|
pip/_vendor/webencodings/__init__.pyc,,
|
||||||
|
pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979
|
||||||
|
pip/_vendor/webencodings/labels.pyc,,
|
||||||
|
pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
|
||||||
|
pip/_vendor/webencodings/mklabels.pyc,,
|
||||||
|
pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
|
||||||
|
pip/_vendor/webencodings/tests.pyc,,
|
||||||
|
pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307
|
||||||
|
pip/_vendor/webencodings/x_user_defined.pyc,,
|
|
@ -0,0 +1,6 @@
|
||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: bdist_wheel (0.33.1)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py2-none-any
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[console_scripts]
|
||||||
|
pip = pip._internal:main
|
||||||
|
pip3 = pip._internal:main
|
||||||
|
pip3.7 = pip._internal:main
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
pip
|
1
venv/lib/python2.7/site-packages/pip/__init__.py
Normal file
1
venv/lib/python2.7/site-packages/pip/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__version__ = "19.1.1"
|
BIN
venv/lib/python2.7/site-packages/pip/__init__.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/__init__.pyc
Normal file
Binary file not shown.
19
venv/lib/python2.7/site-packages/pip/__main__.py
Normal file
19
venv/lib/python2.7/site-packages/pip/__main__.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# If we are running from a wheel, add the wheel to sys.path
|
||||||
|
# This allows the usage python pip-*.whl/pip install pip-*.whl
|
||||||
|
if __package__ == '':
|
||||||
|
# __file__ is pip-*.whl/pip/__main__.py
|
||||||
|
# first dirname call strips of '/__main__.py', second strips off '/pip'
|
||||||
|
# Resulting path is the name of the wheel itself
|
||||||
|
# Add that to sys.path so we can import pip
|
||||||
|
path = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
sys.path.insert(0, path)
|
||||||
|
|
||||||
|
from pip._internal import main as _main # isort:skip # noqa
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(_main())
|
BIN
venv/lib/python2.7/site-packages/pip/__main__.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/__main__.pyc
Normal file
Binary file not shown.
78
venv/lib/python2.7/site-packages/pip/_internal/__init__.py
Normal file
78
venv/lib/python2.7/site-packages/pip/_internal/__init__.py
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import locale
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks,
|
||||||
|
# but if invoked (i.e. imported), it will issue a warning to stderr if socks
|
||||||
|
# isn't available. requests unconditionally imports urllib3's socks contrib
|
||||||
|
# module, triggering this warning. The warning breaks DEP-8 tests (because of
|
||||||
|
# the stderr output) and is just plain annoying in normal usage. I don't want
|
||||||
|
# to add socks as yet another dependency for pip, nor do I want to allow-stderr
|
||||||
|
# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to
|
||||||
|
# be done before the import of pip.vcs.
|
||||||
|
from pip._vendor.urllib3.exceptions import DependencyWarning
|
||||||
|
warnings.filterwarnings("ignore", category=DependencyWarning) # noqa
|
||||||
|
|
||||||
|
# We want to inject the use of SecureTransport as early as possible so that any
|
||||||
|
# references or sessions or what have you are ensured to have it, however we
|
||||||
|
# only want to do this in the case that we're running on macOS and the linked
|
||||||
|
# OpenSSL is too old to handle TLSv1.2
|
||||||
|
try:
|
||||||
|
import ssl
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Checks for OpenSSL 1.0.1 on MacOS
|
||||||
|
if sys.platform == "darwin" and ssl.OPENSSL_VERSION_NUMBER < 0x1000100f:
|
||||||
|
try:
|
||||||
|
from pip._vendor.urllib3.contrib import securetransport
|
||||||
|
except (ImportError, OSError):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
securetransport.inject_into_urllib3()
|
||||||
|
|
||||||
|
from pip._internal.cli.autocompletion import autocomplete
|
||||||
|
from pip._internal.cli.main_parser import parse_command
|
||||||
|
from pip._internal.commands import commands_dict
|
||||||
|
from pip._internal.exceptions import PipError
|
||||||
|
from pip._internal.utils import deprecation
|
||||||
|
from pip._internal.vcs import git, mercurial, subversion, bazaar # noqa
|
||||||
|
from pip._vendor.urllib3.exceptions import InsecureRequestWarning
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Hide the InsecureRequestWarning from urllib3
|
||||||
|
warnings.filterwarnings("ignore", category=InsecureRequestWarning)
|
||||||
|
|
||||||
|
|
||||||
|
def main(args=None):
|
||||||
|
if args is None:
|
||||||
|
args = sys.argv[1:]
|
||||||
|
|
||||||
|
# Configure our deprecation warnings to be sent through loggers
|
||||||
|
deprecation.install_warning_logger()
|
||||||
|
|
||||||
|
autocomplete()
|
||||||
|
|
||||||
|
try:
|
||||||
|
cmd_name, cmd_args = parse_command(args)
|
||||||
|
except PipError as exc:
|
||||||
|
sys.stderr.write("ERROR: %s" % exc)
|
||||||
|
sys.stderr.write(os.linesep)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Needed for locale.getpreferredencoding(False) to work
|
||||||
|
# in pip._internal.utils.encoding.auto_decode
|
||||||
|
try:
|
||||||
|
locale.setlocale(locale.LC_ALL, '')
|
||||||
|
except locale.Error as e:
|
||||||
|
# setlocale can apparently crash if locale are uninitialized
|
||||||
|
logger.debug("Ignoring error %s when setting locale", e)
|
||||||
|
command = commands_dict[cmd_name](isolated=("--isolated" in cmd_args))
|
||||||
|
return command.main(cmd_args)
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/__init__.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/__init__.pyc
Normal file
Binary file not shown.
215
venv/lib/python2.7/site-packages/pip/_internal/build_env.py
Normal file
215
venv/lib/python2.7/site-packages/pip/_internal/build_env.py
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
"""Build Environment used for isolation during sdist building
|
||||||
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
from collections import OrderedDict
|
||||||
|
from distutils.sysconfig import get_python_lib
|
||||||
|
from sysconfig import get_paths
|
||||||
|
|
||||||
|
from pip._vendor.pkg_resources import Requirement, VersionConflict, WorkingSet
|
||||||
|
|
||||||
|
from pip import __file__ as pip_location
|
||||||
|
from pip._internal.utils.misc import call_subprocess
|
||||||
|
from pip._internal.utils.temp_dir import TempDirectory
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
from pip._internal.utils.ui import open_spinner
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import Tuple, Set, Iterable, Optional, List
|
||||||
|
from pip._internal.index import PackageFinder
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class _Prefix:
|
||||||
|
|
||||||
|
def __init__(self, path):
|
||||||
|
# type: (str) -> None
|
||||||
|
self.path = path
|
||||||
|
self.setup = False
|
||||||
|
self.bin_dir = get_paths(
|
||||||
|
'nt' if os.name == 'nt' else 'posix_prefix',
|
||||||
|
vars={'base': path, 'platbase': path}
|
||||||
|
)['scripts']
|
||||||
|
# Note: prefer distutils' sysconfig to get the
|
||||||
|
# library paths so PyPy is correctly supported.
|
||||||
|
purelib = get_python_lib(plat_specific=False, prefix=path)
|
||||||
|
platlib = get_python_lib(plat_specific=True, prefix=path)
|
||||||
|
if purelib == platlib:
|
||||||
|
self.lib_dirs = [purelib]
|
||||||
|
else:
|
||||||
|
self.lib_dirs = [purelib, platlib]
|
||||||
|
|
||||||
|
|
||||||
|
class BuildEnvironment(object):
|
||||||
|
"""Creates and manages an isolated environment to install build deps
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
# type: () -> None
|
||||||
|
self._temp_dir = TempDirectory(kind="build-env")
|
||||||
|
self._temp_dir.create()
|
||||||
|
|
||||||
|
self._prefixes = OrderedDict((
|
||||||
|
(name, _Prefix(os.path.join(self._temp_dir.path, name)))
|
||||||
|
for name in ('normal', 'overlay')
|
||||||
|
))
|
||||||
|
|
||||||
|
self._bin_dirs = [] # type: List[str]
|
||||||
|
self._lib_dirs = [] # type: List[str]
|
||||||
|
for prefix in reversed(list(self._prefixes.values())):
|
||||||
|
self._bin_dirs.append(prefix.bin_dir)
|
||||||
|
self._lib_dirs.extend(prefix.lib_dirs)
|
||||||
|
|
||||||
|
# Customize site to:
|
||||||
|
# - ensure .pth files are honored
|
||||||
|
# - prevent access to system site packages
|
||||||
|
system_sites = {
|
||||||
|
os.path.normcase(site) for site in (
|
||||||
|
get_python_lib(plat_specific=False),
|
||||||
|
get_python_lib(plat_specific=True),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
self._site_dir = os.path.join(self._temp_dir.path, 'site')
|
||||||
|
if not os.path.exists(self._site_dir):
|
||||||
|
os.mkdir(self._site_dir)
|
||||||
|
with open(os.path.join(self._site_dir, 'sitecustomize.py'), 'w') as fp:
|
||||||
|
fp.write(textwrap.dedent(
|
||||||
|
'''
|
||||||
|
import os, site, sys
|
||||||
|
|
||||||
|
# First, drop system-sites related paths.
|
||||||
|
original_sys_path = sys.path[:]
|
||||||
|
known_paths = set()
|
||||||
|
for path in {system_sites!r}:
|
||||||
|
site.addsitedir(path, known_paths=known_paths)
|
||||||
|
system_paths = set(
|
||||||
|
os.path.normcase(path)
|
||||||
|
for path in sys.path[len(original_sys_path):]
|
||||||
|
)
|
||||||
|
original_sys_path = [
|
||||||
|
path for path in original_sys_path
|
||||||
|
if os.path.normcase(path) not in system_paths
|
||||||
|
]
|
||||||
|
sys.path = original_sys_path
|
||||||
|
|
||||||
|
# Second, add lib directories.
|
||||||
|
# ensuring .pth file are processed.
|
||||||
|
for path in {lib_dirs!r}:
|
||||||
|
assert not path in sys.path
|
||||||
|
site.addsitedir(path)
|
||||||
|
'''
|
||||||
|
).format(system_sites=system_sites, lib_dirs=self._lib_dirs))
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
self._save_env = {
|
||||||
|
name: os.environ.get(name, None)
|
||||||
|
for name in ('PATH', 'PYTHONNOUSERSITE', 'PYTHONPATH')
|
||||||
|
}
|
||||||
|
|
||||||
|
path = self._bin_dirs[:]
|
||||||
|
old_path = self._save_env['PATH']
|
||||||
|
if old_path:
|
||||||
|
path.extend(old_path.split(os.pathsep))
|
||||||
|
|
||||||
|
pythonpath = [self._site_dir]
|
||||||
|
|
||||||
|
os.environ.update({
|
||||||
|
'PATH': os.pathsep.join(path),
|
||||||
|
'PYTHONNOUSERSITE': '1',
|
||||||
|
'PYTHONPATH': os.pathsep.join(pythonpath),
|
||||||
|
})
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
for varname, old_value in self._save_env.items():
|
||||||
|
if old_value is None:
|
||||||
|
os.environ.pop(varname, None)
|
||||||
|
else:
|
||||||
|
os.environ[varname] = old_value
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
# type: () -> None
|
||||||
|
self._temp_dir.cleanup()
|
||||||
|
|
||||||
|
def check_requirements(self, reqs):
|
||||||
|
# type: (Iterable[str]) -> Tuple[Set[Tuple[str, str]], Set[str]]
|
||||||
|
"""Return 2 sets:
|
||||||
|
- conflicting requirements: set of (installed, wanted) reqs tuples
|
||||||
|
- missing requirements: set of reqs
|
||||||
|
"""
|
||||||
|
missing = set()
|
||||||
|
conflicting = set()
|
||||||
|
if reqs:
|
||||||
|
ws = WorkingSet(self._lib_dirs)
|
||||||
|
for req in reqs:
|
||||||
|
try:
|
||||||
|
if ws.find(Requirement.parse(req)) is None:
|
||||||
|
missing.add(req)
|
||||||
|
except VersionConflict as e:
|
||||||
|
conflicting.add((str(e.args[0].as_requirement()),
|
||||||
|
str(e.args[1])))
|
||||||
|
return conflicting, missing
|
||||||
|
|
||||||
|
def install_requirements(
|
||||||
|
self,
|
||||||
|
finder, # type: PackageFinder
|
||||||
|
requirements, # type: Iterable[str]
|
||||||
|
prefix_as_string, # type: str
|
||||||
|
message # type: Optional[str]
|
||||||
|
):
|
||||||
|
# type: (...) -> None
|
||||||
|
prefix = self._prefixes[prefix_as_string]
|
||||||
|
assert not prefix.setup
|
||||||
|
prefix.setup = True
|
||||||
|
if not requirements:
|
||||||
|
return
|
||||||
|
args = [
|
||||||
|
sys.executable, os.path.dirname(pip_location), 'install',
|
||||||
|
'--ignore-installed', '--no-user', '--prefix', prefix.path,
|
||||||
|
'--no-warn-script-location',
|
||||||
|
] # type: List[str]
|
||||||
|
if logger.getEffectiveLevel() <= logging.DEBUG:
|
||||||
|
args.append('-v')
|
||||||
|
for format_control in ('no_binary', 'only_binary'):
|
||||||
|
formats = getattr(finder.format_control, format_control)
|
||||||
|
args.extend(('--' + format_control.replace('_', '-'),
|
||||||
|
','.join(sorted(formats or {':none:'}))))
|
||||||
|
if finder.index_urls:
|
||||||
|
args.extend(['-i', finder.index_urls[0]])
|
||||||
|
for extra_index in finder.index_urls[1:]:
|
||||||
|
args.extend(['--extra-index-url', extra_index])
|
||||||
|
else:
|
||||||
|
args.append('--no-index')
|
||||||
|
for link in finder.find_links:
|
||||||
|
args.extend(['--find-links', link])
|
||||||
|
for _, host, _ in finder.secure_origins:
|
||||||
|
args.extend(['--trusted-host', host])
|
||||||
|
if finder.allow_all_prereleases:
|
||||||
|
args.append('--pre')
|
||||||
|
args.append('--')
|
||||||
|
args.extend(requirements)
|
||||||
|
with open_spinner(message) as spinner:
|
||||||
|
call_subprocess(args, spinner=spinner)
|
||||||
|
|
||||||
|
|
||||||
|
class NoOpBuildEnvironment(BuildEnvironment):
|
||||||
|
"""A no-op drop-in replacement for BuildEnvironment
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def install_requirements(self, finder, requirements, prefix, message):
|
||||||
|
raise NotImplementedError()
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/build_env.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/build_env.pyc
Normal file
Binary file not shown.
224
venv/lib/python2.7/site-packages/pip/_internal/cache.py
Normal file
224
venv/lib/python2.7/site-packages/pip/_internal/cache.py
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
"""Cache Management
|
||||||
|
"""
|
||||||
|
|
||||||
|
import errno
|
||||||
|
import hashlib
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
from pip._vendor.packaging.utils import canonicalize_name
|
||||||
|
|
||||||
|
from pip._internal.download import path_to_url
|
||||||
|
from pip._internal.models.link import Link
|
||||||
|
from pip._internal.utils.compat import expanduser
|
||||||
|
from pip._internal.utils.temp_dir import TempDirectory
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
from pip._internal.wheel import InvalidWheelFilename, Wheel
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import Optional, Set, List, Any
|
||||||
|
from pip._internal.index import FormatControl
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Cache(object):
|
||||||
|
"""An abstract class - provides cache directories for data from links
|
||||||
|
|
||||||
|
|
||||||
|
:param cache_dir: The root of the cache.
|
||||||
|
:param format_control: An object of FormatControl class to limit
|
||||||
|
binaries being read from the cache.
|
||||||
|
:param allowed_formats: which formats of files the cache should store.
|
||||||
|
('binary' and 'source' are the only allowed values)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, cache_dir, format_control, allowed_formats):
|
||||||
|
# type: (str, FormatControl, Set[str]) -> None
|
||||||
|
super(Cache, self).__init__()
|
||||||
|
self.cache_dir = expanduser(cache_dir) if cache_dir else None
|
||||||
|
self.format_control = format_control
|
||||||
|
self.allowed_formats = allowed_formats
|
||||||
|
|
||||||
|
_valid_formats = {"source", "binary"}
|
||||||
|
assert self.allowed_formats.union(_valid_formats) == _valid_formats
|
||||||
|
|
||||||
|
def _get_cache_path_parts(self, link):
|
||||||
|
# type: (Link) -> List[str]
|
||||||
|
"""Get parts of part that must be os.path.joined with cache_dir
|
||||||
|
"""
|
||||||
|
|
||||||
|
# We want to generate an url to use as our cache key, we don't want to
|
||||||
|
# just re-use the URL because it might have other items in the fragment
|
||||||
|
# and we don't care about those.
|
||||||
|
key_parts = [link.url_without_fragment]
|
||||||
|
if link.hash_name is not None and link.hash is not None:
|
||||||
|
key_parts.append("=".join([link.hash_name, link.hash]))
|
||||||
|
key_url = "#".join(key_parts)
|
||||||
|
|
||||||
|
# Encode our key url with sha224, we'll use this because it has similar
|
||||||
|
# security properties to sha256, but with a shorter total output (and
|
||||||
|
# thus less secure). However the differences don't make a lot of
|
||||||
|
# difference for our use case here.
|
||||||
|
hashed = hashlib.sha224(key_url.encode()).hexdigest()
|
||||||
|
|
||||||
|
# We want to nest the directories some to prevent having a ton of top
|
||||||
|
# level directories where we might run out of sub directories on some
|
||||||
|
# FS.
|
||||||
|
parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]]
|
||||||
|
|
||||||
|
return parts
|
||||||
|
|
||||||
|
def _get_candidates(self, link, package_name):
|
||||||
|
# type: (Link, Optional[str]) -> List[Any]
|
||||||
|
can_not_cache = (
|
||||||
|
not self.cache_dir or
|
||||||
|
not package_name or
|
||||||
|
not link
|
||||||
|
)
|
||||||
|
if can_not_cache:
|
||||||
|
return []
|
||||||
|
|
||||||
|
canonical_name = canonicalize_name(package_name)
|
||||||
|
formats = self.format_control.get_allowed_formats(
|
||||||
|
canonical_name
|
||||||
|
)
|
||||||
|
if not self.allowed_formats.intersection(formats):
|
||||||
|
return []
|
||||||
|
|
||||||
|
root = self.get_path_for_link(link)
|
||||||
|
try:
|
||||||
|
return os.listdir(root)
|
||||||
|
except OSError as err:
|
||||||
|
if err.errno in {errno.ENOENT, errno.ENOTDIR}:
|
||||||
|
return []
|
||||||
|
raise
|
||||||
|
|
||||||
|
def get_path_for_link(self, link):
|
||||||
|
# type: (Link) -> str
|
||||||
|
"""Return a directory to store cached items in for link.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def get(self, link, package_name):
|
||||||
|
# type: (Link, Optional[str]) -> Link
|
||||||
|
"""Returns a link to a cached item if it exists, otherwise returns the
|
||||||
|
passed link.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def _link_for_candidate(self, link, candidate):
|
||||||
|
# type: (Link, str) -> Link
|
||||||
|
root = self.get_path_for_link(link)
|
||||||
|
path = os.path.join(root, candidate)
|
||||||
|
|
||||||
|
return Link(path_to_url(path))
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
# type: () -> None
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleWheelCache(Cache):
|
||||||
|
"""A cache of wheels for future installs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, cache_dir, format_control):
|
||||||
|
# type: (str, FormatControl) -> None
|
||||||
|
super(SimpleWheelCache, self).__init__(
|
||||||
|
cache_dir, format_control, {"binary"}
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_path_for_link(self, link):
|
||||||
|
# type: (Link) -> str
|
||||||
|
"""Return a directory to store cached wheels for link
|
||||||
|
|
||||||
|
Because there are M wheels for any one sdist, we provide a directory
|
||||||
|
to cache them in, and then consult that directory when looking up
|
||||||
|
cache hits.
|
||||||
|
|
||||||
|
We only insert things into the cache if they have plausible version
|
||||||
|
numbers, so that we don't contaminate the cache with things that were
|
||||||
|
not unique. E.g. ./package might have dozens of installs done for it
|
||||||
|
and build a version of 0.0...and if we built and cached a wheel, we'd
|
||||||
|
end up using the same wheel even if the source has been edited.
|
||||||
|
|
||||||
|
:param link: The link of the sdist for which this will cache wheels.
|
||||||
|
"""
|
||||||
|
parts = self._get_cache_path_parts(link)
|
||||||
|
|
||||||
|
# Store wheels within the root cache_dir
|
||||||
|
return os.path.join(self.cache_dir, "wheels", *parts)
|
||||||
|
|
||||||
|
def get(self, link, package_name):
|
||||||
|
# type: (Link, Optional[str]) -> Link
|
||||||
|
candidates = []
|
||||||
|
|
||||||
|
for wheel_name in self._get_candidates(link, package_name):
|
||||||
|
try:
|
||||||
|
wheel = Wheel(wheel_name)
|
||||||
|
except InvalidWheelFilename:
|
||||||
|
continue
|
||||||
|
if not wheel.supported():
|
||||||
|
# Built for a different python/arch/etc
|
||||||
|
continue
|
||||||
|
candidates.append((wheel.support_index_min(), wheel_name))
|
||||||
|
|
||||||
|
if not candidates:
|
||||||
|
return link
|
||||||
|
|
||||||
|
return self._link_for_candidate(link, min(candidates)[1])
|
||||||
|
|
||||||
|
|
||||||
|
class EphemWheelCache(SimpleWheelCache):
|
||||||
|
"""A SimpleWheelCache that creates it's own temporary cache directory
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, format_control):
|
||||||
|
# type: (FormatControl) -> None
|
||||||
|
self._temp_dir = TempDirectory(kind="ephem-wheel-cache")
|
||||||
|
self._temp_dir.create()
|
||||||
|
|
||||||
|
super(EphemWheelCache, self).__init__(
|
||||||
|
self._temp_dir.path, format_control
|
||||||
|
)
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
# type: () -> None
|
||||||
|
self._temp_dir.cleanup()
|
||||||
|
|
||||||
|
|
||||||
|
class WheelCache(Cache):
|
||||||
|
"""Wraps EphemWheelCache and SimpleWheelCache into a single Cache
|
||||||
|
|
||||||
|
This Cache allows for gracefully degradation, using the ephem wheel cache
|
||||||
|
when a certain link is not found in the simple wheel cache first.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, cache_dir, format_control):
|
||||||
|
# type: (str, FormatControl) -> None
|
||||||
|
super(WheelCache, self).__init__(
|
||||||
|
cache_dir, format_control, {'binary'}
|
||||||
|
)
|
||||||
|
self._wheel_cache = SimpleWheelCache(cache_dir, format_control)
|
||||||
|
self._ephem_cache = EphemWheelCache(format_control)
|
||||||
|
|
||||||
|
def get_path_for_link(self, link):
|
||||||
|
# type: (Link) -> str
|
||||||
|
return self._wheel_cache.get_path_for_link(link)
|
||||||
|
|
||||||
|
def get_ephem_path_for_link(self, link):
|
||||||
|
# type: (Link) -> str
|
||||||
|
return self._ephem_cache.get_path_for_link(link)
|
||||||
|
|
||||||
|
def get(self, link, package_name):
|
||||||
|
# type: (Link, Optional[str]) -> Link
|
||||||
|
retval = self._wheel_cache.get(link, package_name)
|
||||||
|
if retval is link:
|
||||||
|
retval = self._ephem_cache.get(link, package_name)
|
||||||
|
return retval
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
# type: () -> None
|
||||||
|
self._wheel_cache.cleanup()
|
||||||
|
self._ephem_cache.cleanup()
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/cache.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/cache.pyc
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
"""Subpackage containing all of pip's command line interface related code
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This file intentionally does not import submodules
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/cli/__init__.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/cli/__init__.pyc
Normal file
Binary file not shown.
|
@ -0,0 +1,152 @@
|
||||||
|
"""Logic that powers autocompletion installed by ``pip completion``.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import optparse
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal.cli.main_parser import create_main_parser
|
||||||
|
from pip._internal.commands import commands_dict, get_summaries
|
||||||
|
from pip._internal.utils.misc import get_installed_distributions
|
||||||
|
|
||||||
|
|
||||||
|
def autocomplete():
|
||||||
|
"""Entry Point for completion of main and subcommand options.
|
||||||
|
"""
|
||||||
|
# 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 show and uninstall
|
||||||
|
should_list_installed = (
|
||||||
|
subcommand_name in ['show', 'uninstall'] and
|
||||||
|
not current.startswith('-')
|
||||||
|
)
|
||||||
|
if should_list_installed:
|
||||||
|
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_dict[subcommand_name]()
|
||||||
|
|
||||||
|
for opt in subcommand.parser.option_list_all:
|
||||||
|
if opt.help != optparse.SUPPRESS_HELP:
|
||||||
|
for opt_str in opt._long_opts + opt._short_opts:
|
||||||
|
options.append((opt_str, opt.nargs))
|
||||||
|
|
||||||
|
# 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)]
|
||||||
|
# get completion type given cwords and available subcommand options
|
||||||
|
completion_type = get_path_completion_type(
|
||||||
|
cwords, cword, subcommand.parser.option_list_all,
|
||||||
|
)
|
||||||
|
# get completion files and directories if ``completion_type`` is
|
||||||
|
# ``<file>``, ``<dir>`` or ``<path>``
|
||||||
|
if completion_type:
|
||||||
|
options = auto_complete_paths(current, completion_type)
|
||||||
|
options = ((opt, 0) for opt in options)
|
||||||
|
for option in options:
|
||||||
|
opt_label = option[0]
|
||||||
|
# append '=' to options which require args
|
||||||
|
if option[1] and option[0][:2] == "--":
|
||||||
|
opt_label += '='
|
||||||
|
print(opt_label)
|
||||||
|
else:
|
||||||
|
# show main parser options only when necessary
|
||||||
|
|
||||||
|
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)
|
||||||
|
if current.startswith('-'):
|
||||||
|
for opt in opts:
|
||||||
|
if opt.help != optparse.SUPPRESS_HELP:
|
||||||
|
subcommands += opt._long_opts + opt._short_opts
|
||||||
|
else:
|
||||||
|
# get completion type given cwords and all available options
|
||||||
|
completion_type = get_path_completion_type(cwords, cword, opts)
|
||||||
|
if completion_type:
|
||||||
|
subcommands = auto_complete_paths(current, completion_type)
|
||||||
|
|
||||||
|
print(' '.join([x for x in subcommands if x.startswith(current)]))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def get_path_completion_type(cwords, cword, opts):
|
||||||
|
"""Get the type of path completion (``file``, ``dir``, ``path`` or None)
|
||||||
|
|
||||||
|
:param cwords: same as the environmental variable ``COMP_WORDS``
|
||||||
|
:param cword: same as the environmental variable ``COMP_CWORD``
|
||||||
|
:param opts: The available options to check
|
||||||
|
:return: path completion type (``file``, ``dir``, ``path`` or None)
|
||||||
|
"""
|
||||||
|
if cword < 2 or not cwords[cword - 2].startswith('-'):
|
||||||
|
return
|
||||||
|
for opt in opts:
|
||||||
|
if opt.help == optparse.SUPPRESS_HELP:
|
||||||
|
continue
|
||||||
|
for o in str(opt).split('/'):
|
||||||
|
if cwords[cword - 2].split('=')[0] == o:
|
||||||
|
if not opt.metavar or any(
|
||||||
|
x in ('path', 'file', 'dir')
|
||||||
|
for x in opt.metavar.split('/')):
|
||||||
|
return opt.metavar
|
||||||
|
|
||||||
|
|
||||||
|
def auto_complete_paths(current, completion_type):
|
||||||
|
"""If ``completion_type`` is ``file`` or ``path``, list all regular files
|
||||||
|
and directories starting with ``current``; otherwise only list directories
|
||||||
|
starting with ``current``.
|
||||||
|
|
||||||
|
:param current: The word to be completed
|
||||||
|
:param completion_type: path completion type(`file`, `path` or `dir`)i
|
||||||
|
:return: A generator of regular files and/or directories
|
||||||
|
"""
|
||||||
|
directory, filename = os.path.split(current)
|
||||||
|
current_path = os.path.abspath(directory)
|
||||||
|
# Don't complete paths if they can't be accessed
|
||||||
|
if not os.access(current_path, os.R_OK):
|
||||||
|
return
|
||||||
|
filename = os.path.normcase(filename)
|
||||||
|
# list all files that start with ``filename``
|
||||||
|
file_list = (x for x in os.listdir(current_path)
|
||||||
|
if os.path.normcase(x).startswith(filename))
|
||||||
|
for f in file_list:
|
||||||
|
opt = os.path.join(current_path, f)
|
||||||
|
comp_file = os.path.normcase(os.path.join(directory, f))
|
||||||
|
# complete regular files when there is not ``<dir>`` after option
|
||||||
|
# complete directories when there is ``<file>``, ``<path>`` or
|
||||||
|
# ``<dir>``after option
|
||||||
|
if completion_type != 'dir' and os.path.isfile(opt):
|
||||||
|
yield comp_file
|
||||||
|
elif os.path.isdir(opt):
|
||||||
|
yield os.path.join(comp_file, '')
|
Binary file not shown.
|
@ -0,0 +1,340 @@
|
||||||
|
"""Base Command class, and related routines"""
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import logging.config
|
||||||
|
import optparse
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
from pip._internal.cli import cmdoptions
|
||||||
|
from pip._internal.cli.parser import (
|
||||||
|
ConfigOptionParser, UpdatingDefaultsHelpFormatter,
|
||||||
|
)
|
||||||
|
from pip._internal.cli.status_codes import (
|
||||||
|
ERROR, PREVIOUS_BUILD_DIR_ERROR, SUCCESS, UNKNOWN_ERROR,
|
||||||
|
VIRTUALENV_NOT_FOUND,
|
||||||
|
)
|
||||||
|
from pip._internal.download import PipSession
|
||||||
|
from pip._internal.exceptions import (
|
||||||
|
BadCommand, CommandError, InstallationError, PreviousBuildDirError,
|
||||||
|
UninstallationError,
|
||||||
|
)
|
||||||
|
from pip._internal.index import PackageFinder
|
||||||
|
from pip._internal.locations import running_under_virtualenv
|
||||||
|
from pip._internal.req.constructors import (
|
||||||
|
install_req_from_editable, install_req_from_line,
|
||||||
|
)
|
||||||
|
from pip._internal.req.req_file import parse_requirements
|
||||||
|
from pip._internal.utils.deprecation import deprecated
|
||||||
|
from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
|
||||||
|
from pip._internal.utils.misc import (
|
||||||
|
get_prog, normalize_path, redact_password_from_url,
|
||||||
|
)
|
||||||
|
from pip._internal.utils.outdated import pip_version_check
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import Optional, List, Tuple, Any
|
||||||
|
from optparse import Values
|
||||||
|
from pip._internal.cache import WheelCache
|
||||||
|
from pip._internal.req.req_set import RequirementSet
|
||||||
|
|
||||||
|
__all__ = ['Command']
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Command(object):
|
||||||
|
name = None # type: Optional[str]
|
||||||
|
usage = None # type: Optional[str]
|
||||||
|
ignore_require_venv = False # type: bool
|
||||||
|
|
||||||
|
def __init__(self, isolated=False):
|
||||||
|
# type: (bool) -> None
|
||||||
|
parser_kw = {
|
||||||
|
'usage': self.usage,
|
||||||
|
'prog': '%s %s' % (get_prog(), self.name),
|
||||||
|
'formatter': UpdatingDefaultsHelpFormatter(),
|
||||||
|
'add_help_option': False,
|
||||||
|
'name': self.name,
|
||||||
|
'description': self.__doc__,
|
||||||
|
'isolated': isolated,
|
||||||
|
}
|
||||||
|
|
||||||
|
self.parser = ConfigOptionParser(**parser_kw)
|
||||||
|
|
||||||
|
# Commands should add options to this option group
|
||||||
|
optgroup_name = '%s Options' % self.name.capitalize()
|
||||||
|
self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
|
||||||
|
|
||||||
|
# Add the general options
|
||||||
|
gen_opts = cmdoptions.make_option_group(
|
||||||
|
cmdoptions.general_group,
|
||||||
|
self.parser,
|
||||||
|
)
|
||||||
|
self.parser.add_option_group(gen_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
# type: (Values, List[Any]) -> Any
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def _build_session(self, options, retries=None, timeout=None):
|
||||||
|
# type: (Values, Optional[int], Optional[int]) -> PipSession
|
||||||
|
session = PipSession(
|
||||||
|
cache=(
|
||||||
|
normalize_path(os.path.join(options.cache_dir, "http"))
|
||||||
|
if options.cache_dir else None
|
||||||
|
),
|
||||||
|
retries=retries if retries is not None else options.retries,
|
||||||
|
insecure_hosts=options.trusted_hosts,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Handle custom ca-bundles from the user
|
||||||
|
if options.cert:
|
||||||
|
session.verify = options.cert
|
||||||
|
|
||||||
|
# Handle SSL client certificate
|
||||||
|
if options.client_cert:
|
||||||
|
session.cert = options.client_cert
|
||||||
|
|
||||||
|
# Handle timeouts
|
||||||
|
if options.timeout or timeout:
|
||||||
|
session.timeout = (
|
||||||
|
timeout if timeout is not None else options.timeout
|
||||||
|
)
|
||||||
|
|
||||||
|
# Handle configured proxies
|
||||||
|
if options.proxy:
|
||||||
|
session.proxies = {
|
||||||
|
"http": options.proxy,
|
||||||
|
"https": options.proxy,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine if we can prompt the user for authentication or not
|
||||||
|
session.auth.prompting = not options.no_input
|
||||||
|
|
||||||
|
return session
|
||||||
|
|
||||||
|
def parse_args(self, args):
|
||||||
|
# type: (List[str]) -> Tuple
|
||||||
|
# factored out for testability
|
||||||
|
return self.parser.parse_args(args)
|
||||||
|
|
||||||
|
def main(self, args):
|
||||||
|
# type: (List[str]) -> int
|
||||||
|
options, args = self.parse_args(args)
|
||||||
|
|
||||||
|
# Set verbosity so that it can be used elsewhere.
|
||||||
|
self.verbosity = options.verbose - options.quiet
|
||||||
|
|
||||||
|
level_number = setup_logging(
|
||||||
|
verbosity=self.verbosity,
|
||||||
|
no_color=options.no_color,
|
||||||
|
user_log_file=options.log,
|
||||||
|
)
|
||||||
|
|
||||||
|
if sys.version_info[:2] == (3, 4):
|
||||||
|
deprecated(
|
||||||
|
"Python 3.4 support has been deprecated. pip 19.1 will be the "
|
||||||
|
"last one supporting it. Please upgrade your Python as Python "
|
||||||
|
"3.4 won't be maintained after March 2019 (cf PEP 429).",
|
||||||
|
replacement=None,
|
||||||
|
gone_in='19.2',
|
||||||
|
)
|
||||||
|
elif sys.version_info[:2] == (2, 7):
|
||||||
|
message = (
|
||||||
|
"A future version of pip will drop support for Python 2.7."
|
||||||
|
)
|
||||||
|
if platform.python_implementation() == "CPython":
|
||||||
|
message = (
|
||||||
|
"Python 2.7 will reach the end of its life on January "
|
||||||
|
"1st, 2020. Please upgrade your Python as Python 2.7 "
|
||||||
|
"won't be maintained after that date. "
|
||||||
|
) + message
|
||||||
|
deprecated(message, replacement=None, gone_in=None)
|
||||||
|
|
||||||
|
# TODO: Try to get these passing down from the command?
|
||||||
|
# without resorting to os.environ to hold these.
|
||||||
|
# This also affects isolated builds and it should.
|
||||||
|
|
||||||
|
if options.no_input:
|
||||||
|
os.environ['PIP_NO_INPUT'] = '1'
|
||||||
|
|
||||||
|
if options.exists_action:
|
||||||
|
os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action)
|
||||||
|
|
||||||
|
if options.require_venv and not self.ignore_require_venv:
|
||||||
|
# If a venv is required check if it can really be found
|
||||||
|
if not running_under_virtualenv():
|
||||||
|
logger.critical(
|
||||||
|
'Could not find an activated virtualenv (required).'
|
||||||
|
)
|
||||||
|
sys.exit(VIRTUALENV_NOT_FOUND)
|
||||||
|
|
||||||
|
try:
|
||||||
|
status = self.run(options, args)
|
||||||
|
# FIXME: all commands should return an exit status
|
||||||
|
# and when it is done, isinstance is not needed anymore
|
||||||
|
if isinstance(status, int):
|
||||||
|
return status
|
||||||
|
except PreviousBuildDirError as exc:
|
||||||
|
logger.critical(str(exc))
|
||||||
|
logger.debug('Exception information:', exc_info=True)
|
||||||
|
|
||||||
|
return PREVIOUS_BUILD_DIR_ERROR
|
||||||
|
except (InstallationError, UninstallationError, BadCommand) as exc:
|
||||||
|
logger.critical(str(exc))
|
||||||
|
logger.debug('Exception information:', exc_info=True)
|
||||||
|
|
||||||
|
return ERROR
|
||||||
|
except CommandError as exc:
|
||||||
|
logger.critical('%s', exc)
|
||||||
|
logger.debug('Exception information:', exc_info=True)
|
||||||
|
|
||||||
|
return ERROR
|
||||||
|
except BrokenStdoutLoggingError:
|
||||||
|
# Bypass our logger and write any remaining messages to stderr
|
||||||
|
# because stdout no longer works.
|
||||||
|
print('ERROR: Pipe to stdout was broken', file=sys.stderr)
|
||||||
|
if level_number <= logging.DEBUG:
|
||||||
|
traceback.print_exc(file=sys.stderr)
|
||||||
|
|
||||||
|
return ERROR
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
logger.critical('Operation cancelled by user')
|
||||||
|
logger.debug('Exception information:', exc_info=True)
|
||||||
|
|
||||||
|
return ERROR
|
||||||
|
except BaseException:
|
||||||
|
logger.critical('Exception:', exc_info=True)
|
||||||
|
|
||||||
|
return UNKNOWN_ERROR
|
||||||
|
finally:
|
||||||
|
allow_version_check = (
|
||||||
|
# Does this command have the index_group options?
|
||||||
|
hasattr(options, "no_index") and
|
||||||
|
# Is this command allowed to perform this check?
|
||||||
|
not (options.disable_pip_version_check or options.no_index)
|
||||||
|
)
|
||||||
|
# Check if we're using the latest version of pip available
|
||||||
|
if allow_version_check:
|
||||||
|
session = self._build_session(
|
||||||
|
options,
|
||||||
|
retries=0,
|
||||||
|
timeout=min(5, options.timeout)
|
||||||
|
)
|
||||||
|
with session:
|
||||||
|
pip_version_check(session, options)
|
||||||
|
|
||||||
|
# Shutdown the logging module
|
||||||
|
logging.shutdown()
|
||||||
|
|
||||||
|
return SUCCESS
|
||||||
|
|
||||||
|
|
||||||
|
class RequirementCommand(Command):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def populate_requirement_set(requirement_set, # type: RequirementSet
|
||||||
|
args, # type: List[str]
|
||||||
|
options, # type: Values
|
||||||
|
finder, # type: PackageFinder
|
||||||
|
session, # type: PipSession
|
||||||
|
name, # type: str
|
||||||
|
wheel_cache # type: Optional[WheelCache]
|
||||||
|
):
|
||||||
|
# type: (...) -> None
|
||||||
|
"""
|
||||||
|
Marshal cmd line args into a requirement set.
|
||||||
|
"""
|
||||||
|
# NOTE: As a side-effect, options.require_hashes and
|
||||||
|
# requirement_set.require_hashes may be updated
|
||||||
|
|
||||||
|
for filename in options.constraints:
|
||||||
|
for req_to_add in parse_requirements(
|
||||||
|
filename,
|
||||||
|
constraint=True, finder=finder, options=options,
|
||||||
|
session=session, wheel_cache=wheel_cache):
|
||||||
|
req_to_add.is_direct = True
|
||||||
|
requirement_set.add_requirement(req_to_add)
|
||||||
|
|
||||||
|
for req in args:
|
||||||
|
req_to_add = install_req_from_line(
|
||||||
|
req, None, isolated=options.isolated_mode,
|
||||||
|
use_pep517=options.use_pep517,
|
||||||
|
wheel_cache=wheel_cache
|
||||||
|
)
|
||||||
|
req_to_add.is_direct = True
|
||||||
|
requirement_set.add_requirement(req_to_add)
|
||||||
|
|
||||||
|
for req in options.editables:
|
||||||
|
req_to_add = install_req_from_editable(
|
||||||
|
req,
|
||||||
|
isolated=options.isolated_mode,
|
||||||
|
use_pep517=options.use_pep517,
|
||||||
|
wheel_cache=wheel_cache
|
||||||
|
)
|
||||||
|
req_to_add.is_direct = True
|
||||||
|
requirement_set.add_requirement(req_to_add)
|
||||||
|
|
||||||
|
for filename in options.requirements:
|
||||||
|
for req_to_add in parse_requirements(
|
||||||
|
filename,
|
||||||
|
finder=finder, options=options, session=session,
|
||||||
|
wheel_cache=wheel_cache,
|
||||||
|
use_pep517=options.use_pep517):
|
||||||
|
req_to_add.is_direct = True
|
||||||
|
requirement_set.add_requirement(req_to_add)
|
||||||
|
# If --require-hashes was a line in a requirements file, tell
|
||||||
|
# RequirementSet about it:
|
||||||
|
requirement_set.require_hashes = options.require_hashes
|
||||||
|
|
||||||
|
if not (args or options.editables or options.requirements):
|
||||||
|
opts = {'name': name}
|
||||||
|
if options.find_links:
|
||||||
|
raise CommandError(
|
||||||
|
'You must give at least one requirement to %(name)s '
|
||||||
|
'(maybe you meant "pip %(name)s %(links)s"?)' %
|
||||||
|
dict(opts, links=' '.join(options.find_links)))
|
||||||
|
else:
|
||||||
|
raise CommandError(
|
||||||
|
'You must give at least one requirement to %(name)s '
|
||||||
|
'(see "pip help %(name)s")' % opts)
|
||||||
|
|
||||||
|
def _build_package_finder(
|
||||||
|
self,
|
||||||
|
options, # type: Values
|
||||||
|
session, # type: PipSession
|
||||||
|
platform=None, # type: Optional[str]
|
||||||
|
python_versions=None, # type: Optional[List[str]]
|
||||||
|
abi=None, # type: Optional[str]
|
||||||
|
implementation=None # type: Optional[str]
|
||||||
|
):
|
||||||
|
# type: (...) -> PackageFinder
|
||||||
|
"""
|
||||||
|
Create a package finder appropriate to this requirement command.
|
||||||
|
"""
|
||||||
|
index_urls = [options.index_url] + options.extra_index_urls
|
||||||
|
if options.no_index:
|
||||||
|
logger.debug(
|
||||||
|
'Ignoring indexes: %s',
|
||||||
|
','.join(redact_password_from_url(url) for url in index_urls),
|
||||||
|
)
|
||||||
|
index_urls = []
|
||||||
|
|
||||||
|
return PackageFinder(
|
||||||
|
find_links=options.find_links,
|
||||||
|
format_control=options.format_control,
|
||||||
|
index_urls=index_urls,
|
||||||
|
trusted_hosts=options.trusted_hosts,
|
||||||
|
allow_all_prereleases=options.pre,
|
||||||
|
session=session,
|
||||||
|
platform=platform,
|
||||||
|
versions=python_versions,
|
||||||
|
abi=abi,
|
||||||
|
implementation=implementation,
|
||||||
|
prefer_binary=options.prefer_binary,
|
||||||
|
)
|
Binary file not shown.
809
venv/lib/python2.7/site-packages/pip/_internal/cli/cmdoptions.py
Normal file
809
venv/lib/python2.7/site-packages/pip/_internal/cli/cmdoptions.py
Normal file
|
@ -0,0 +1,809 @@
|
||||||
|
"""
|
||||||
|
shared options and groups
|
||||||
|
|
||||||
|
The principle here is to define options once, but *not* instantiate them
|
||||||
|
globally. One reason being that options with action='append' can carry state
|
||||||
|
between parses. pip parses general options twice internally, and shouldn't
|
||||||
|
pass on state. To be consistent, all options will follow this design.
|
||||||
|
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import textwrap
|
||||||
|
import warnings
|
||||||
|
from distutils.util import strtobool
|
||||||
|
from functools import partial
|
||||||
|
from optparse import SUPPRESS_HELP, Option, OptionGroup
|
||||||
|
|
||||||
|
from pip._internal.exceptions import CommandError
|
||||||
|
from pip._internal.locations import USER_CACHE_DIR, src_prefix
|
||||||
|
from pip._internal.models.format_control import FormatControl
|
||||||
|
from pip._internal.models.index import PyPI
|
||||||
|
from pip._internal.utils.hashes import STRONG_HASHES
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
from pip._internal.utils.ui import BAR_TYPES
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import Any, Callable, Dict, Optional
|
||||||
|
from optparse import OptionParser, Values
|
||||||
|
from pip._internal.cli.parser import ConfigOptionParser
|
||||||
|
|
||||||
|
|
||||||
|
def raise_option_error(parser, option, msg):
|
||||||
|
"""
|
||||||
|
Raise an option parsing error using parser.error().
|
||||||
|
|
||||||
|
Args:
|
||||||
|
parser: an OptionParser instance.
|
||||||
|
option: an Option instance.
|
||||||
|
msg: the error text.
|
||||||
|
"""
|
||||||
|
msg = '{} error: {}'.format(option, msg)
|
||||||
|
msg = textwrap.fill(' '.join(msg.split()))
|
||||||
|
parser.error(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def make_option_group(group, parser):
|
||||||
|
# type: (Dict[str, Any], ConfigOptionParser) -> OptionGroup
|
||||||
|
"""
|
||||||
|
Return an OptionGroup object
|
||||||
|
group -- assumed to be dict with 'name' and 'options' keys
|
||||||
|
parser -- an optparse Parser
|
||||||
|
"""
|
||||||
|
option_group = OptionGroup(parser, group['name'])
|
||||||
|
for option in group['options']:
|
||||||
|
option_group.add_option(option())
|
||||||
|
return option_group
|
||||||
|
|
||||||
|
|
||||||
|
def check_install_build_global(options, check_options=None):
|
||||||
|
# type: (Values, Optional[Values]) -> None
|
||||||
|
"""Disable wheels if per-setup.py call options are set.
|
||||||
|
|
||||||
|
:param options: The OptionParser options to update.
|
||||||
|
:param check_options: The options to check, if not supplied defaults to
|
||||||
|
options.
|
||||||
|
"""
|
||||||
|
if check_options is None:
|
||||||
|
check_options = options
|
||||||
|
|
||||||
|
def getname(n):
|
||||||
|
return getattr(check_options, n, None)
|
||||||
|
names = ["build_options", "global_options", "install_options"]
|
||||||
|
if any(map(getname, names)):
|
||||||
|
control = options.format_control
|
||||||
|
control.disallow_binaries()
|
||||||
|
warnings.warn(
|
||||||
|
'Disabling all use of wheels due to the use of --build-options '
|
||||||
|
'/ --global-options / --install-options.', stacklevel=2,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def check_dist_restriction(options, check_target=False):
|
||||||
|
# type: (Values, bool) -> None
|
||||||
|
"""Function for determining if custom platform options are allowed.
|
||||||
|
|
||||||
|
:param options: The OptionParser options.
|
||||||
|
:param check_target: Whether or not to check if --target is being used.
|
||||||
|
"""
|
||||||
|
dist_restriction_set = any([
|
||||||
|
options.python_version,
|
||||||
|
options.platform,
|
||||||
|
options.abi,
|
||||||
|
options.implementation,
|
||||||
|
])
|
||||||
|
|
||||||
|
binary_only = FormatControl(set(), {':all:'})
|
||||||
|
sdist_dependencies_allowed = (
|
||||||
|
options.format_control != binary_only and
|
||||||
|
not options.ignore_dependencies
|
||||||
|
)
|
||||||
|
|
||||||
|
# Installations or downloads using dist restrictions must not combine
|
||||||
|
# source distributions and dist-specific wheels, as they are not
|
||||||
|
# guaranteed to be locally compatible.
|
||||||
|
if dist_restriction_set and sdist_dependencies_allowed:
|
||||||
|
raise CommandError(
|
||||||
|
"When restricting platform and interpreter constraints using "
|
||||||
|
"--python-version, --platform, --abi, or --implementation, "
|
||||||
|
"either --no-deps must be set, or --only-binary=:all: must be "
|
||||||
|
"set and --no-binary must not be set (or must be set to "
|
||||||
|
":none:)."
|
||||||
|
)
|
||||||
|
|
||||||
|
if check_target:
|
||||||
|
if dist_restriction_set and not options.target_dir:
|
||||||
|
raise CommandError(
|
||||||
|
"Can not use any platform or abi specific options unless "
|
||||||
|
"installing via '--target'"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
###########
|
||||||
|
# options #
|
||||||
|
###########
|
||||||
|
|
||||||
|
help_ = partial(
|
||||||
|
Option,
|
||||||
|
'-h', '--help',
|
||||||
|
dest='help',
|
||||||
|
action='help',
|
||||||
|
help='Show help.',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
isolated_mode = partial(
|
||||||
|
Option,
|
||||||
|
"--isolated",
|
||||||
|
dest="isolated_mode",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help=(
|
||||||
|
"Run pip in an isolated mode, ignoring environment variables and user "
|
||||||
|
"configuration."
|
||||||
|
),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
require_virtualenv = partial(
|
||||||
|
Option,
|
||||||
|
# Run only if inside a virtualenv, bail if not.
|
||||||
|
'--require-virtualenv', '--require-venv',
|
||||||
|
dest='require_venv',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=SUPPRESS_HELP
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
verbose = partial(
|
||||||
|
Option,
|
||||||
|
'-v', '--verbose',
|
||||||
|
dest='verbose',
|
||||||
|
action='count',
|
||||||
|
default=0,
|
||||||
|
help='Give more output. Option is additive, and can be used up to 3 times.'
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
no_color = partial(
|
||||||
|
Option,
|
||||||
|
'--no-color',
|
||||||
|
dest='no_color',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help="Suppress colored output",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
version = partial(
|
||||||
|
Option,
|
||||||
|
'-V', '--version',
|
||||||
|
dest='version',
|
||||||
|
action='store_true',
|
||||||
|
help='Show version and exit.',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
quiet = partial(
|
||||||
|
Option,
|
||||||
|
'-q', '--quiet',
|
||||||
|
dest='quiet',
|
||||||
|
action='count',
|
||||||
|
default=0,
|
||||||
|
help=(
|
||||||
|
'Give less output. Option is additive, and can be used up to 3'
|
||||||
|
' times (corresponding to WARNING, ERROR, and CRITICAL logging'
|
||||||
|
' levels).'
|
||||||
|
),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
progress_bar = partial(
|
||||||
|
Option,
|
||||||
|
'--progress-bar',
|
||||||
|
dest='progress_bar',
|
||||||
|
type='choice',
|
||||||
|
choices=list(BAR_TYPES.keys()),
|
||||||
|
default='on',
|
||||||
|
help=(
|
||||||
|
'Specify type of progress to be displayed [' +
|
||||||
|
'|'.join(BAR_TYPES.keys()) + '] (default: %default)'
|
||||||
|
),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
log = partial(
|
||||||
|
Option,
|
||||||
|
"--log", "--log-file", "--local-log",
|
||||||
|
dest="log",
|
||||||
|
metavar="path",
|
||||||
|
help="Path to a verbose appending log."
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
no_input = partial(
|
||||||
|
Option,
|
||||||
|
# Don't ask for input
|
||||||
|
'--no-input',
|
||||||
|
dest='no_input',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=SUPPRESS_HELP
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
proxy = partial(
|
||||||
|
Option,
|
||||||
|
'--proxy',
|
||||||
|
dest='proxy',
|
||||||
|
type='str',
|
||||||
|
default='',
|
||||||
|
help="Specify a proxy in the form [user:passwd@]proxy.server:port."
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
retries = partial(
|
||||||
|
Option,
|
||||||
|
'--retries',
|
||||||
|
dest='retries',
|
||||||
|
type='int',
|
||||||
|
default=5,
|
||||||
|
help="Maximum number of retries each connection should attempt "
|
||||||
|
"(default %default times).",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
timeout = partial(
|
||||||
|
Option,
|
||||||
|
'--timeout', '--default-timeout',
|
||||||
|
metavar='sec',
|
||||||
|
dest='timeout',
|
||||||
|
type='float',
|
||||||
|
default=15,
|
||||||
|
help='Set the socket timeout (default %default seconds).',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
skip_requirements_regex = partial(
|
||||||
|
Option,
|
||||||
|
# A regex to be used to skip requirements
|
||||||
|
'--skip-requirements-regex',
|
||||||
|
dest='skip_requirements_regex',
|
||||||
|
type='str',
|
||||||
|
default='',
|
||||||
|
help=SUPPRESS_HELP,
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def exists_action():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
# Option when path already exist
|
||||||
|
'--exists-action',
|
||||||
|
dest='exists_action',
|
||||||
|
type='choice',
|
||||||
|
choices=['s', 'i', 'w', 'b', 'a'],
|
||||||
|
default=[],
|
||||||
|
action='append',
|
||||||
|
metavar='action',
|
||||||
|
help="Default action when a path already exists: "
|
||||||
|
"(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
cert = partial(
|
||||||
|
Option,
|
||||||
|
'--cert',
|
||||||
|
dest='cert',
|
||||||
|
type='str',
|
||||||
|
metavar='path',
|
||||||
|
help="Path to alternate CA bundle.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
client_cert = partial(
|
||||||
|
Option,
|
||||||
|
'--client-cert',
|
||||||
|
dest='client_cert',
|
||||||
|
type='str',
|
||||||
|
default=None,
|
||||||
|
metavar='path',
|
||||||
|
help="Path to SSL client certificate, a single file containing the "
|
||||||
|
"private key and the certificate in PEM format.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
index_url = partial(
|
||||||
|
Option,
|
||||||
|
'-i', '--index-url', '--pypi-url',
|
||||||
|
dest='index_url',
|
||||||
|
metavar='URL',
|
||||||
|
default=PyPI.simple_url,
|
||||||
|
help="Base URL of Python Package Index (default %default). "
|
||||||
|
"This should point to a repository compliant with PEP 503 "
|
||||||
|
"(the simple repository API) or a local directory laid out "
|
||||||
|
"in the same format.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def extra_index_url():
|
||||||
|
return Option(
|
||||||
|
'--extra-index-url',
|
||||||
|
dest='extra_index_urls',
|
||||||
|
metavar='URL',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
help="Extra URLs of package indexes to use in addition to "
|
||||||
|
"--index-url. Should follow the same rules as "
|
||||||
|
"--index-url.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
no_index = partial(
|
||||||
|
Option,
|
||||||
|
'--no-index',
|
||||||
|
dest='no_index',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Ignore package index (only looking at --find-links URLs instead).',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def find_links():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
'-f', '--find-links',
|
||||||
|
dest='find_links',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='url',
|
||||||
|
help="If a url or path to an html file, then parse for links to "
|
||||||
|
"archives. If a local path or file:// url that's a directory, "
|
||||||
|
"then look for archives in the directory listing.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def trusted_host():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
"--trusted-host",
|
||||||
|
dest="trusted_hosts",
|
||||||
|
action="append",
|
||||||
|
metavar="HOSTNAME",
|
||||||
|
default=[],
|
||||||
|
help="Mark this host as trusted, even though it does not have valid "
|
||||||
|
"or any HTTPS.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def constraints():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
'-c', '--constraint',
|
||||||
|
dest='constraints',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='file',
|
||||||
|
help='Constrain versions using the given constraints file. '
|
||||||
|
'This option can be used multiple times.'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def requirements():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
'-r', '--requirement',
|
||||||
|
dest='requirements',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='file',
|
||||||
|
help='Install from the given requirements file. '
|
||||||
|
'This option can be used multiple times.'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def editable():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
'-e', '--editable',
|
||||||
|
dest='editables',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='path/url',
|
||||||
|
help=('Install a project in editable mode (i.e. setuptools '
|
||||||
|
'"develop mode") from a local project path or a VCS url.'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
src = partial(
|
||||||
|
Option,
|
||||||
|
'--src', '--source', '--source-dir', '--source-directory',
|
||||||
|
dest='src_dir',
|
||||||
|
metavar='dir',
|
||||||
|
default=src_prefix,
|
||||||
|
help='Directory to check out editable projects into. '
|
||||||
|
'The default in a virtualenv is "<venv path>/src". '
|
||||||
|
'The default for global installs is "<current dir>/src".'
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def _get_format_control(values, option):
|
||||||
|
# type: (Values, Option) -> Any
|
||||||
|
"""Get a format_control object."""
|
||||||
|
return getattr(values, option.dest)
|
||||||
|
|
||||||
|
|
||||||
|
def _handle_no_binary(option, opt_str, value, parser):
|
||||||
|
# type: (Option, str, str, OptionParser) -> None
|
||||||
|
existing = _get_format_control(parser.values, option)
|
||||||
|
FormatControl.handle_mutual_excludes(
|
||||||
|
value, existing.no_binary, existing.only_binary,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _handle_only_binary(option, opt_str, value, parser):
|
||||||
|
# type: (Option, str, str, OptionParser) -> None
|
||||||
|
existing = _get_format_control(parser.values, option)
|
||||||
|
FormatControl.handle_mutual_excludes(
|
||||||
|
value, existing.only_binary, existing.no_binary,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def no_binary():
|
||||||
|
# type: () -> Option
|
||||||
|
format_control = FormatControl(set(), set())
|
||||||
|
return Option(
|
||||||
|
"--no-binary", dest="format_control", action="callback",
|
||||||
|
callback=_handle_no_binary, type="str",
|
||||||
|
default=format_control,
|
||||||
|
help="Do not use binary packages. Can be supplied multiple times, and "
|
||||||
|
"each time adds to the existing value. Accepts either :all: to "
|
||||||
|
"disable all binary packages, :none: to empty the set, or one or "
|
||||||
|
"more package names with commas between them. Note that some "
|
||||||
|
"packages are tricky to compile and may fail to install when "
|
||||||
|
"this option is used on them.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def only_binary():
|
||||||
|
# type: () -> Option
|
||||||
|
format_control = FormatControl(set(), set())
|
||||||
|
return Option(
|
||||||
|
"--only-binary", dest="format_control", action="callback",
|
||||||
|
callback=_handle_only_binary, type="str",
|
||||||
|
default=format_control,
|
||||||
|
help="Do not use source packages. Can be supplied multiple times, and "
|
||||||
|
"each time adds to the existing value. Accepts either :all: to "
|
||||||
|
"disable all source packages, :none: to empty the set, or one or "
|
||||||
|
"more package names with commas between them. Packages without "
|
||||||
|
"binary distributions will fail to install when this option is "
|
||||||
|
"used on them.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
platform = partial(
|
||||||
|
Option,
|
||||||
|
'--platform',
|
||||||
|
dest='platform',
|
||||||
|
metavar='platform',
|
||||||
|
default=None,
|
||||||
|
help=("Only use wheels compatible with <platform>. "
|
||||||
|
"Defaults to the platform of the running system."),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
python_version = partial(
|
||||||
|
Option,
|
||||||
|
'--python-version',
|
||||||
|
dest='python_version',
|
||||||
|
metavar='python_version',
|
||||||
|
default=None,
|
||||||
|
help=("Only use wheels compatible with Python "
|
||||||
|
"interpreter version <version>. If not specified, then the "
|
||||||
|
"current system interpreter minor version is used. A major "
|
||||||
|
"version (e.g. '2') can be specified to match all "
|
||||||
|
"minor revs of that major version. A minor version "
|
||||||
|
"(e.g. '34') can also be specified."),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
implementation = partial(
|
||||||
|
Option,
|
||||||
|
'--implementation',
|
||||||
|
dest='implementation',
|
||||||
|
metavar='implementation',
|
||||||
|
default=None,
|
||||||
|
help=("Only use wheels compatible with Python "
|
||||||
|
"implementation <implementation>, e.g. 'pp', 'jy', 'cp', "
|
||||||
|
" or 'ip'. If not specified, then the current "
|
||||||
|
"interpreter implementation is used. Use 'py' to force "
|
||||||
|
"implementation-agnostic wheels."),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
abi = partial(
|
||||||
|
Option,
|
||||||
|
'--abi',
|
||||||
|
dest='abi',
|
||||||
|
metavar='abi',
|
||||||
|
default=None,
|
||||||
|
help=("Only use wheels compatible with Python "
|
||||||
|
"abi <abi>, e.g. 'pypy_41'. If not specified, then the "
|
||||||
|
"current interpreter abi tag is used. Generally "
|
||||||
|
"you will need to specify --implementation, "
|
||||||
|
"--platform, and --python-version when using "
|
||||||
|
"this option."),
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def prefer_binary():
|
||||||
|
# type: () -> Option
|
||||||
|
return Option(
|
||||||
|
"--prefer-binary",
|
||||||
|
dest="prefer_binary",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="Prefer older binary packages over newer source packages."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
cache_dir = partial(
|
||||||
|
Option,
|
||||||
|
"--cache-dir",
|
||||||
|
dest="cache_dir",
|
||||||
|
default=USER_CACHE_DIR,
|
||||||
|
metavar="dir",
|
||||||
|
help="Store the cache data in <dir>."
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def no_cache_dir_callback(option, opt, value, parser):
|
||||||
|
"""
|
||||||
|
Process a value provided for the --no-cache-dir option.
|
||||||
|
|
||||||
|
This is an optparse.Option callback for the --no-cache-dir option.
|
||||||
|
"""
|
||||||
|
# The value argument will be None if --no-cache-dir is passed via the
|
||||||
|
# command-line, since the option doesn't accept arguments. However,
|
||||||
|
# the value can be non-None if the option is triggered e.g. by an
|
||||||
|
# environment variable, like PIP_NO_CACHE_DIR=true.
|
||||||
|
if value is not None:
|
||||||
|
# Then parse the string value to get argument error-checking.
|
||||||
|
try:
|
||||||
|
strtobool(value)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise_option_error(parser, option=option, msg=str(exc))
|
||||||
|
|
||||||
|
# Originally, setting PIP_NO_CACHE_DIR to a value that strtobool()
|
||||||
|
# converted to 0 (like "false" or "no") caused cache_dir to be disabled
|
||||||
|
# rather than enabled (logic would say the latter). Thus, we disable
|
||||||
|
# the cache directory not just on values that parse to True, but (for
|
||||||
|
# backwards compatibility reasons) also on values that parse to False.
|
||||||
|
# In other words, always set it to False if the option is provided in
|
||||||
|
# some (valid) form.
|
||||||
|
parser.values.cache_dir = False
|
||||||
|
|
||||||
|
|
||||||
|
no_cache = partial(
|
||||||
|
Option,
|
||||||
|
"--no-cache-dir",
|
||||||
|
dest="cache_dir",
|
||||||
|
action="callback",
|
||||||
|
callback=no_cache_dir_callback,
|
||||||
|
help="Disable the cache.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
no_deps = partial(
|
||||||
|
Option,
|
||||||
|
'--no-deps', '--no-dependencies',
|
||||||
|
dest='ignore_dependencies',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help="Don't install package dependencies.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
build_dir = partial(
|
||||||
|
Option,
|
||||||
|
'-b', '--build', '--build-dir', '--build-directory',
|
||||||
|
dest='build_dir',
|
||||||
|
metavar='dir',
|
||||||
|
help='Directory to unpack packages into and build in. Note that '
|
||||||
|
'an initial build still takes place in a temporary directory. '
|
||||||
|
'The location of temporary directories can be controlled by setting '
|
||||||
|
'the TMPDIR environment variable (TEMP on Windows) appropriately. '
|
||||||
|
'When passed, build directories are not cleaned in case of failures.'
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
ignore_requires_python = partial(
|
||||||
|
Option,
|
||||||
|
'--ignore-requires-python',
|
||||||
|
dest='ignore_requires_python',
|
||||||
|
action='store_true',
|
||||||
|
help='Ignore the Requires-Python information.'
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
no_build_isolation = partial(
|
||||||
|
Option,
|
||||||
|
'--no-build-isolation',
|
||||||
|
dest='build_isolation',
|
||||||
|
action='store_false',
|
||||||
|
default=True,
|
||||||
|
help='Disable isolation when building a modern source distribution. '
|
||||||
|
'Build dependencies specified by PEP 518 must be already installed '
|
||||||
|
'if this option is used.'
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def no_use_pep517_callback(option, opt, value, parser):
|
||||||
|
"""
|
||||||
|
Process a value provided for the --no-use-pep517 option.
|
||||||
|
|
||||||
|
This is an optparse.Option callback for the no_use_pep517 option.
|
||||||
|
"""
|
||||||
|
# Since --no-use-pep517 doesn't accept arguments, the value argument
|
||||||
|
# will be None if --no-use-pep517 is passed via the command-line.
|
||||||
|
# However, the value can be non-None if the option is triggered e.g.
|
||||||
|
# by an environment variable, for example "PIP_NO_USE_PEP517=true".
|
||||||
|
if value is not None:
|
||||||
|
msg = """A value was passed for --no-use-pep517,
|
||||||
|
probably using either the PIP_NO_USE_PEP517 environment variable
|
||||||
|
or the "no-use-pep517" config file option. Use an appropriate value
|
||||||
|
of the PIP_USE_PEP517 environment variable or the "use-pep517"
|
||||||
|
config file option instead.
|
||||||
|
"""
|
||||||
|
raise_option_error(parser, option=option, msg=msg)
|
||||||
|
|
||||||
|
# Otherwise, --no-use-pep517 was passed via the command-line.
|
||||||
|
parser.values.use_pep517 = False
|
||||||
|
|
||||||
|
|
||||||
|
use_pep517 = partial(
|
||||||
|
Option,
|
||||||
|
'--use-pep517',
|
||||||
|
dest='use_pep517',
|
||||||
|
action='store_true',
|
||||||
|
default=None,
|
||||||
|
help='Use PEP 517 for building source distributions '
|
||||||
|
'(use --no-use-pep517 to force legacy behaviour).'
|
||||||
|
) # type: Any
|
||||||
|
|
||||||
|
no_use_pep517 = partial(
|
||||||
|
Option,
|
||||||
|
'--no-use-pep517',
|
||||||
|
dest='use_pep517',
|
||||||
|
action='callback',
|
||||||
|
callback=no_use_pep517_callback,
|
||||||
|
default=None,
|
||||||
|
help=SUPPRESS_HELP
|
||||||
|
) # type: Any
|
||||||
|
|
||||||
|
install_options = partial(
|
||||||
|
Option,
|
||||||
|
'--install-option',
|
||||||
|
dest='install_options',
|
||||||
|
action='append',
|
||||||
|
metavar='options',
|
||||||
|
help="Extra arguments to be supplied to the setup.py install "
|
||||||
|
"command (use like --install-option=\"--install-scripts=/usr/local/"
|
||||||
|
"bin\"). Use multiple --install-option options to pass multiple "
|
||||||
|
"options to setup.py install. If you are using an option with a "
|
||||||
|
"directory path, be sure to use absolute path.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
global_options = partial(
|
||||||
|
Option,
|
||||||
|
'--global-option',
|
||||||
|
dest='global_options',
|
||||||
|
action='append',
|
||||||
|
metavar='options',
|
||||||
|
help="Extra global options to be supplied to the setup.py "
|
||||||
|
"call before the install command.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
no_clean = partial(
|
||||||
|
Option,
|
||||||
|
'--no-clean',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help="Don't clean up build directories."
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
pre = partial(
|
||||||
|
Option,
|
||||||
|
'--pre',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help="Include pre-release and development versions. By default, "
|
||||||
|
"pip only finds stable versions.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
disable_pip_version_check = partial(
|
||||||
|
Option,
|
||||||
|
"--disable-pip-version-check",
|
||||||
|
dest="disable_pip_version_check",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="Don't periodically check PyPI to determine whether a new version "
|
||||||
|
"of pip is available for download. Implied with --no-index.",
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
# Deprecated, Remove later
|
||||||
|
always_unzip = partial(
|
||||||
|
Option,
|
||||||
|
'-Z', '--always-unzip',
|
||||||
|
dest='always_unzip',
|
||||||
|
action='store_true',
|
||||||
|
help=SUPPRESS_HELP,
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
def _merge_hash(option, opt_str, value, parser):
|
||||||
|
# type: (Option, str, str, OptionParser) -> None
|
||||||
|
"""Given a value spelled "algo:digest", append the digest to a list
|
||||||
|
pointed to in a dict by the algo name."""
|
||||||
|
if not parser.values.hashes:
|
||||||
|
parser.values.hashes = {}
|
||||||
|
try:
|
||||||
|
algo, digest = value.split(':', 1)
|
||||||
|
except ValueError:
|
||||||
|
parser.error('Arguments to %s must be a hash name '
|
||||||
|
'followed by a value, like --hash=sha256:abcde...' %
|
||||||
|
opt_str)
|
||||||
|
if algo not in STRONG_HASHES:
|
||||||
|
parser.error('Allowed hash algorithms for %s are %s.' %
|
||||||
|
(opt_str, ', '.join(STRONG_HASHES)))
|
||||||
|
parser.values.hashes.setdefault(algo, []).append(digest)
|
||||||
|
|
||||||
|
|
||||||
|
hash = partial(
|
||||||
|
Option,
|
||||||
|
'--hash',
|
||||||
|
# Hash values eventually end up in InstallRequirement.hashes due to
|
||||||
|
# __dict__ copying in process_line().
|
||||||
|
dest='hashes',
|
||||||
|
action='callback',
|
||||||
|
callback=_merge_hash,
|
||||||
|
type='string',
|
||||||
|
help="Verify that the package's archive matches this "
|
||||||
|
'hash before installing. Example: --hash=sha256:abcdef...',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
require_hashes = partial(
|
||||||
|
Option,
|
||||||
|
'--require-hashes',
|
||||||
|
dest='require_hashes',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Require a hash to check each requirement against, for '
|
||||||
|
'repeatable installs. This option is implied when any package in a '
|
||||||
|
'requirements file has a --hash option.',
|
||||||
|
) # type: Callable[..., Option]
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# groups #
|
||||||
|
##########
|
||||||
|
|
||||||
|
general_group = {
|
||||||
|
'name': 'General Options',
|
||||||
|
'options': [
|
||||||
|
help_,
|
||||||
|
isolated_mode,
|
||||||
|
require_virtualenv,
|
||||||
|
verbose,
|
||||||
|
version,
|
||||||
|
quiet,
|
||||||
|
log,
|
||||||
|
no_input,
|
||||||
|
proxy,
|
||||||
|
retries,
|
||||||
|
timeout,
|
||||||
|
skip_requirements_regex,
|
||||||
|
exists_action,
|
||||||
|
trusted_host,
|
||||||
|
cert,
|
||||||
|
client_cert,
|
||||||
|
cache_dir,
|
||||||
|
no_cache,
|
||||||
|
disable_pip_version_check,
|
||||||
|
no_color,
|
||||||
|
]
|
||||||
|
} # type: Dict[str, Any]
|
||||||
|
|
||||||
|
index_group = {
|
||||||
|
'name': 'Package Index Options',
|
||||||
|
'options': [
|
||||||
|
index_url,
|
||||||
|
extra_index_url,
|
||||||
|
no_index,
|
||||||
|
find_links,
|
||||||
|
]
|
||||||
|
} # type: Dict[str, Any]
|
Binary file not shown.
|
@ -0,0 +1,104 @@
|
||||||
|
"""A single place for constructing and exposing the main parser
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip import __version__
|
||||||
|
from pip._internal.cli import cmdoptions
|
||||||
|
from pip._internal.cli.parser import (
|
||||||
|
ConfigOptionParser, UpdatingDefaultsHelpFormatter,
|
||||||
|
)
|
||||||
|
from pip._internal.commands import (
|
||||||
|
commands_dict, get_similar_commands, get_summaries,
|
||||||
|
)
|
||||||
|
from pip._internal.exceptions import CommandError
|
||||||
|
from pip._internal.utils.misc import get_prog
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import Tuple, List
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["create_main_parser", "parse_command"]
|
||||||
|
|
||||||
|
|
||||||
|
def create_main_parser():
|
||||||
|
# type: () -> ConfigOptionParser
|
||||||
|
"""Creates and returns the main parser for pip's CLI
|
||||||
|
"""
|
||||||
|
|
||||||
|
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.abspath(os.path.join(
|
||||||
|
os.path.dirname(__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)
|
||||||
|
|
||||||
|
# so the help formatter knows
|
||||||
|
parser.main = True # type: ignore
|
||||||
|
|
||||||
|
# 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 parse_command(args):
|
||||||
|
# type: (List[str]) -> Tuple[str, List[str]]
|
||||||
|
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) # type: ignore
|
||||||
|
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]
|
||||||
|
|
||||||
|
if cmd_name not in commands_dict:
|
||||||
|
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))
|
||||||
|
|
||||||
|
# all the args without the subcommand
|
||||||
|
cmd_args = args[:]
|
||||||
|
cmd_args.remove(cmd_name)
|
||||||
|
|
||||||
|
return cmd_name, cmd_args
|
Binary file not shown.
261
venv/lib/python2.7/site-packages/pip/_internal/cli/parser.py
Normal file
261
venv/lib/python2.7/site-packages/pip/_internal/cli/parser.py
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
"""Base option parser setup"""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import optparse
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
from distutils.util import strtobool
|
||||||
|
|
||||||
|
from pip._vendor.six import string_types
|
||||||
|
|
||||||
|
from pip._internal.cli.status_codes import UNKNOWN_ERROR
|
||||||
|
from pip._internal.configuration import Configuration, ConfigurationError
|
||||||
|
from pip._internal.utils.compat import get_terminal_size
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
|
"""A prettier/less verbose help formatter for optparse."""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
# help position must be aligned with __init__.parseopts.description
|
||||||
|
kwargs['max_help_position'] = 30
|
||||||
|
kwargs['indent_increment'] = 1
|
||||||
|
kwargs['width'] = get_terminal_size()[0] - 2
|
||||||
|
optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def format_option_strings(self, option):
|
||||||
|
return self._format_option_strings(option, ' <%s>', ', ')
|
||||||
|
|
||||||
|
def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '):
|
||||||
|
"""
|
||||||
|
Return a comma-separated list of option strings and metavars.
|
||||||
|
|
||||||
|
:param option: tuple of (short opt, long opt), e.g: ('-f', '--format')
|
||||||
|
:param mvarfmt: metavar format string - evaluated as mvarfmt % metavar
|
||||||
|
:param optsep: separator
|
||||||
|
"""
|
||||||
|
opts = []
|
||||||
|
|
||||||
|
if option._short_opts:
|
||||||
|
opts.append(option._short_opts[0])
|
||||||
|
if option._long_opts:
|
||||||
|
opts.append(option._long_opts[0])
|
||||||
|
if len(opts) > 1:
|
||||||
|
opts.insert(1, optsep)
|
||||||
|
|
||||||
|
if option.takes_value():
|
||||||
|
metavar = option.metavar or option.dest.lower()
|
||||||
|
opts.append(mvarfmt % metavar.lower())
|
||||||
|
|
||||||
|
return ''.join(opts)
|
||||||
|
|
||||||
|
def format_heading(self, heading):
|
||||||
|
if heading == 'Options':
|
||||||
|
return ''
|
||||||
|
return heading + ':\n'
|
||||||
|
|
||||||
|
def format_usage(self, usage):
|
||||||
|
"""
|
||||||
|
Ensure there is only one newline between usage and the first heading
|
||||||
|
if there is no description.
|
||||||
|
"""
|
||||||
|
msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ")
|
||||||
|
return msg
|
||||||
|
|
||||||
|
def format_description(self, description):
|
||||||
|
# leave full control over description to us
|
||||||
|
if description:
|
||||||
|
if hasattr(self.parser, 'main'):
|
||||||
|
label = 'Commands'
|
||||||
|
else:
|
||||||
|
label = 'Description'
|
||||||
|
# some doc strings have initial newlines, some don't
|
||||||
|
description = description.lstrip('\n')
|
||||||
|
# some doc strings have final newlines and spaces, some don't
|
||||||
|
description = description.rstrip()
|
||||||
|
# dedent, then reindent
|
||||||
|
description = self.indent_lines(textwrap.dedent(description), " ")
|
||||||
|
description = '%s:\n%s\n' % (label, description)
|
||||||
|
return description
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def format_epilog(self, epilog):
|
||||||
|
# leave full control over epilog to us
|
||||||
|
if epilog:
|
||||||
|
return epilog
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def indent_lines(self, text, indent):
|
||||||
|
new_lines = [indent + line for line in text.split('\n')]
|
||||||
|
return "\n".join(new_lines)
|
||||||
|
|
||||||
|
|
||||||
|
class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter):
|
||||||
|
"""Custom help formatter for use in ConfigOptionParser.
|
||||||
|
|
||||||
|
This is updates the defaults before expanding them, allowing
|
||||||
|
them to show up correctly in the help listing.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def expand_default(self, option):
|
||||||
|
if self.parser is not None:
|
||||||
|
self.parser._update_defaults(self.parser.defaults)
|
||||||
|
return optparse.IndentedHelpFormatter.expand_default(self, option)
|
||||||
|
|
||||||
|
|
||||||
|
class CustomOptionParser(optparse.OptionParser):
|
||||||
|
|
||||||
|
def insert_option_group(self, idx, *args, **kwargs):
|
||||||
|
"""Insert an OptionGroup at a given position."""
|
||||||
|
group = self.add_option_group(*args, **kwargs)
|
||||||
|
|
||||||
|
self.option_groups.pop()
|
||||||
|
self.option_groups.insert(idx, group)
|
||||||
|
|
||||||
|
return group
|
||||||
|
|
||||||
|
@property
|
||||||
|
def option_list_all(self):
|
||||||
|
"""Get a list of all options, including those in option groups."""
|
||||||
|
res = self.option_list[:]
|
||||||
|
for i in self.option_groups:
|
||||||
|
res.extend(i.option_list)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigOptionParser(CustomOptionParser):
|
||||||
|
"""Custom option parser which updates its defaults by checking the
|
||||||
|
configuration files and environmental variables"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.name = kwargs.pop('name')
|
||||||
|
|
||||||
|
isolated = kwargs.pop("isolated", False)
|
||||||
|
self.config = Configuration(isolated)
|
||||||
|
|
||||||
|
assert self.name
|
||||||
|
optparse.OptionParser.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def check_default(self, option, key, val):
|
||||||
|
try:
|
||||||
|
return option.check_value(key, val)
|
||||||
|
except optparse.OptionValueError as exc:
|
||||||
|
print("An error occurred during configuration: %s" % exc)
|
||||||
|
sys.exit(3)
|
||||||
|
|
||||||
|
def _get_ordered_configuration_items(self):
|
||||||
|
# Configuration gives keys in an unordered manner. Order them.
|
||||||
|
override_order = ["global", self.name, ":env:"]
|
||||||
|
|
||||||
|
# Pool the options into different groups
|
||||||
|
section_items = {name: [] for name in override_order}
|
||||||
|
for section_key, val in self.config.items():
|
||||||
|
# ignore empty values
|
||||||
|
if not val:
|
||||||
|
logger.debug(
|
||||||
|
"Ignoring configuration key '%s' as it's value is empty.",
|
||||||
|
section_key
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
|
section, key = section_key.split(".", 1)
|
||||||
|
if section in override_order:
|
||||||
|
section_items[section].append((key, val))
|
||||||
|
|
||||||
|
# Yield each group in their override order
|
||||||
|
for section in override_order:
|
||||||
|
for key, val in section_items[section]:
|
||||||
|
yield key, val
|
||||||
|
|
||||||
|
def _update_defaults(self, defaults):
|
||||||
|
"""Updates the given defaults with values from the config files and
|
||||||
|
the environ. Does a little special handling for certain types of
|
||||||
|
options (lists)."""
|
||||||
|
|
||||||
|
# Accumulate complex default state.
|
||||||
|
self.values = optparse.Values(self.defaults)
|
||||||
|
late_eval = set()
|
||||||
|
# Then set the options with those values
|
||||||
|
for key, val in self._get_ordered_configuration_items():
|
||||||
|
# '--' because configuration supports only long names
|
||||||
|
option = self.get_option('--' + key)
|
||||||
|
|
||||||
|
# Ignore options not present in this parser. E.g. non-globals put
|
||||||
|
# in [global] by users that want them to apply to all applicable
|
||||||
|
# commands.
|
||||||
|
if option is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if option.action in ('store_true', 'store_false', 'count'):
|
||||||
|
try:
|
||||||
|
val = strtobool(val)
|
||||||
|
except ValueError:
|
||||||
|
error_msg = invalid_config_error_message(
|
||||||
|
option.action, key, val
|
||||||
|
)
|
||||||
|
self.error(error_msg)
|
||||||
|
|
||||||
|
elif option.action == 'append':
|
||||||
|
val = val.split()
|
||||||
|
val = [self.check_default(option, key, v) for v in val]
|
||||||
|
elif option.action == 'callback':
|
||||||
|
late_eval.add(option.dest)
|
||||||
|
opt_str = option.get_opt_string()
|
||||||
|
val = option.convert_value(opt_str, val)
|
||||||
|
# From take_action
|
||||||
|
args = option.callback_args or ()
|
||||||
|
kwargs = option.callback_kwargs or {}
|
||||||
|
option.callback(option, opt_str, val, self, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
val = self.check_default(option, key, val)
|
||||||
|
|
||||||
|
defaults[option.dest] = val
|
||||||
|
|
||||||
|
for key in late_eval:
|
||||||
|
defaults[key] = getattr(self.values, key)
|
||||||
|
self.values = None
|
||||||
|
return defaults
|
||||||
|
|
||||||
|
def get_default_values(self):
|
||||||
|
"""Overriding to make updating the defaults after instantiation of
|
||||||
|
the option parser possible, _update_defaults() does the dirty work."""
|
||||||
|
if not self.process_default_values:
|
||||||
|
# Old, pre-Optik 1.5 behaviour.
|
||||||
|
return optparse.Values(self.defaults)
|
||||||
|
|
||||||
|
# Load the configuration, or error out in case of an error
|
||||||
|
try:
|
||||||
|
self.config.load()
|
||||||
|
except ConfigurationError as err:
|
||||||
|
self.exit(UNKNOWN_ERROR, str(err))
|
||||||
|
|
||||||
|
defaults = self._update_defaults(self.defaults.copy()) # ours
|
||||||
|
for option in self._get_all_options():
|
||||||
|
default = defaults.get(option.dest)
|
||||||
|
if isinstance(default, string_types):
|
||||||
|
opt_str = option.get_opt_string()
|
||||||
|
defaults[option.dest] = option.check_value(opt_str, default)
|
||||||
|
return optparse.Values(defaults)
|
||||||
|
|
||||||
|
def error(self, msg):
|
||||||
|
self.print_usage(sys.stderr)
|
||||||
|
self.exit(UNKNOWN_ERROR, "%s\n" % msg)
|
||||||
|
|
||||||
|
|
||||||
|
def invalid_config_error_message(action, key, val):
|
||||||
|
"""Returns a better error message when invalid configuration option
|
||||||
|
is provided."""
|
||||||
|
if action in ('store_true', 'store_false'):
|
||||||
|
return ("{0} is not a valid value for {1} option, "
|
||||||
|
"please specify a boolean value like yes/no, "
|
||||||
|
"true/false or 1/0 instead.").format(val, key)
|
||||||
|
|
||||||
|
return ("{0} is not a valid value for {1} option, "
|
||||||
|
"please specify a numerical value like 1/0 "
|
||||||
|
"instead.").format(val, key)
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/cli/parser.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/cli/parser.pyc
Normal file
Binary file not shown.
|
@ -0,0 +1,8 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
SUCCESS = 0
|
||||||
|
ERROR = 1
|
||||||
|
UNKNOWN_ERROR = 2
|
||||||
|
VIRTUALENV_NOT_FOUND = 3
|
||||||
|
PREVIOUS_BUILD_DIR_ERROR = 4
|
||||||
|
NO_MATCHES_FOUND = 23
|
Binary file not shown.
|
@ -0,0 +1,79 @@
|
||||||
|
"""
|
||||||
|
Package containing all pip commands
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from pip._internal.commands.completion import CompletionCommand
|
||||||
|
from pip._internal.commands.configuration import ConfigurationCommand
|
||||||
|
from pip._internal.commands.download import DownloadCommand
|
||||||
|
from pip._internal.commands.freeze import FreezeCommand
|
||||||
|
from pip._internal.commands.hash import HashCommand
|
||||||
|
from pip._internal.commands.help import HelpCommand
|
||||||
|
from pip._internal.commands.list import ListCommand
|
||||||
|
from pip._internal.commands.check import CheckCommand
|
||||||
|
from pip._internal.commands.search import SearchCommand
|
||||||
|
from pip._internal.commands.show import ShowCommand
|
||||||
|
from pip._internal.commands.install import InstallCommand
|
||||||
|
from pip._internal.commands.uninstall import UninstallCommand
|
||||||
|
from pip._internal.commands.wheel import WheelCommand
|
||||||
|
|
||||||
|
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
|
||||||
|
|
||||||
|
if MYPY_CHECK_RUNNING:
|
||||||
|
from typing import List, Type
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
|
||||||
|
commands_order = [
|
||||||
|
InstallCommand,
|
||||||
|
DownloadCommand,
|
||||||
|
UninstallCommand,
|
||||||
|
FreezeCommand,
|
||||||
|
ListCommand,
|
||||||
|
ShowCommand,
|
||||||
|
CheckCommand,
|
||||||
|
ConfigurationCommand,
|
||||||
|
SearchCommand,
|
||||||
|
WheelCommand,
|
||||||
|
HashCommand,
|
||||||
|
CompletionCommand,
|
||||||
|
HelpCommand,
|
||||||
|
] # type: List[Type[Command]]
|
||||||
|
|
||||||
|
commands_dict = {c.name: c for c in commands_order}
|
||||||
|
|
||||||
|
|
||||||
|
def get_summaries(ordered=True):
|
||||||
|
"""Yields sorted (command name, command summary) tuples."""
|
||||||
|
|
||||||
|
if ordered:
|
||||||
|
cmditems = _sort_commands(commands_dict, commands_order)
|
||||||
|
else:
|
||||||
|
cmditems = commands_dict.items()
|
||||||
|
|
||||||
|
for name, command_class in cmditems:
|
||||||
|
yield (name, command_class.summary)
|
||||||
|
|
||||||
|
|
||||||
|
def get_similar_commands(name):
|
||||||
|
"""Command name auto-correct."""
|
||||||
|
from difflib import get_close_matches
|
||||||
|
|
||||||
|
name = name.lower()
|
||||||
|
|
||||||
|
close_commands = get_close_matches(name, commands_dict.keys())
|
||||||
|
|
||||||
|
if close_commands:
|
||||||
|
return close_commands[0]
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _sort_commands(cmddict, order):
|
||||||
|
def keyfn(key):
|
||||||
|
try:
|
||||||
|
return order.index(key[1])
|
||||||
|
except ValueError:
|
||||||
|
# unordered items should come last
|
||||||
|
return 0xff
|
||||||
|
|
||||||
|
return sorted(cmddict.items(), key=keyfn)
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
from pip._internal.operations.check import (
|
||||||
|
check_package_set, create_package_set_from_installed,
|
||||||
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class CheckCommand(Command):
|
||||||
|
"""Verify installed packages have compatible dependencies."""
|
||||||
|
name = 'check'
|
||||||
|
usage = """
|
||||||
|
%prog [options]"""
|
||||||
|
summary = 'Verify installed packages have compatible dependencies.'
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
package_set, parsing_probs = create_package_set_from_installed()
|
||||||
|
missing, conflicting = check_package_set(package_set)
|
||||||
|
|
||||||
|
for project_name in missing:
|
||||||
|
version = package_set[project_name].version
|
||||||
|
for dependency in missing[project_name]:
|
||||||
|
logger.info(
|
||||||
|
"%s %s requires %s, which is not installed.",
|
||||||
|
project_name, version, dependency[0],
|
||||||
|
)
|
||||||
|
|
||||||
|
for project_name in conflicting:
|
||||||
|
version = package_set[project_name].version
|
||||||
|
for dep_name, dep_version, req in conflicting[project_name]:
|
||||||
|
logger.info(
|
||||||
|
"%s %s has requirement %s, but you have %s %s.",
|
||||||
|
project_name, version, req, dep_name, dep_version,
|
||||||
|
)
|
||||||
|
|
||||||
|
if missing or conflicting or parsing_probs:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
logger.info("No broken requirements found.")
|
Binary file not shown.
|
@ -0,0 +1,94 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
from pip._internal.utils.misc import get_prog
|
||||||
|
|
||||||
|
BASE_COMPLETION = """
|
||||||
|
# pip %(shell)s completion start%(script)s# pip %(shell)s completion end
|
||||||
|
"""
|
||||||
|
|
||||||
|
COMPLETION_SCRIPTS = {
|
||||||
|
'bash': """
|
||||||
|
_pip_completion()
|
||||||
|
{
|
||||||
|
COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\
|
||||||
|
COMP_CWORD=$COMP_CWORD \\
|
||||||
|
PIP_AUTO_COMPLETE=1 $1 ) )
|
||||||
|
}
|
||||||
|
complete -o default -F _pip_completion %(prog)s
|
||||||
|
""",
|
||||||
|
'zsh': """
|
||||||
|
function _pip_completion {
|
||||||
|
local words cword
|
||||||
|
read -Ac words
|
||||||
|
read -cn cword
|
||||||
|
reply=( $( COMP_WORDS="$words[*]" \\
|
||||||
|
COMP_CWORD=$(( cword-1 )) \\
|
||||||
|
PIP_AUTO_COMPLETE=1 $words[1] ) )
|
||||||
|
}
|
||||||
|
compctl -K _pip_completion %(prog)s
|
||||||
|
""",
|
||||||
|
'fish': """
|
||||||
|
function __fish_complete_pip
|
||||||
|
set -lx COMP_WORDS (commandline -o) ""
|
||||||
|
set -lx COMP_CWORD ( \\
|
||||||
|
math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\
|
||||||
|
)
|
||||||
|
set -lx PIP_AUTO_COMPLETE 1
|
||||||
|
string split \\ -- (eval $COMP_WORDS[1])
|
||||||
|
end
|
||||||
|
complete -fa "(__fish_complete_pip)" -c %(prog)s
|
||||||
|
""",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class CompletionCommand(Command):
|
||||||
|
"""A helper command to be used for command completion."""
|
||||||
|
name = 'completion'
|
||||||
|
summary = 'A helper command used for command completion.'
|
||||||
|
ignore_require_venv = True
|
||||||
|
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
super(CompletionCommand, self).__init__(*args, **kw)
|
||||||
|
|
||||||
|
cmd_opts = self.cmd_opts
|
||||||
|
|
||||||
|
cmd_opts.add_option(
|
||||||
|
'--bash', '-b',
|
||||||
|
action='store_const',
|
||||||
|
const='bash',
|
||||||
|
dest='shell',
|
||||||
|
help='Emit completion code for bash')
|
||||||
|
cmd_opts.add_option(
|
||||||
|
'--zsh', '-z',
|
||||||
|
action='store_const',
|
||||||
|
const='zsh',
|
||||||
|
dest='shell',
|
||||||
|
help='Emit completion code for zsh')
|
||||||
|
cmd_opts.add_option(
|
||||||
|
'--fish', '-f',
|
||||||
|
action='store_const',
|
||||||
|
const='fish',
|
||||||
|
dest='shell',
|
||||||
|
help='Emit completion code for fish')
|
||||||
|
|
||||||
|
self.parser.insert_option_group(0, cmd_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
"""Prints the completion code of the given shell"""
|
||||||
|
shells = COMPLETION_SCRIPTS.keys()
|
||||||
|
shell_options = ['--' + shell for shell in sorted(shells)]
|
||||||
|
if options.shell in shells:
|
||||||
|
script = textwrap.dedent(
|
||||||
|
COMPLETION_SCRIPTS.get(options.shell, '') % {
|
||||||
|
'prog': get_prog(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
print(BASE_COMPLETION % {'script': script, 'shell': options.shell})
|
||||||
|
else:
|
||||||
|
sys.stderr.write(
|
||||||
|
'ERROR: You must pass %s\n' % ' or '.join(shell_options)
|
||||||
|
)
|
Binary file not shown.
|
@ -0,0 +1,253 @@
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
from pip._internal.cli.status_codes import ERROR, SUCCESS
|
||||||
|
from pip._internal.configuration import Configuration, kinds
|
||||||
|
from pip._internal.exceptions import PipError
|
||||||
|
from pip._internal.locations import running_under_virtualenv, site_config_file
|
||||||
|
from pip._internal.utils.deprecation import deprecated
|
||||||
|
from pip._internal.utils.misc import get_prog
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigurationCommand(Command):
|
||||||
|
"""Manage local and global configuration.
|
||||||
|
|
||||||
|
Subcommands:
|
||||||
|
|
||||||
|
list: List the active configuration (or from the file specified)
|
||||||
|
edit: Edit the configuration file in an editor
|
||||||
|
get: Get the value associated with name
|
||||||
|
set: Set the name=value
|
||||||
|
unset: Unset the value associated with name
|
||||||
|
|
||||||
|
If none of --user, --global and --site are passed, a virtual
|
||||||
|
environment configuration file is used if one is active and the file
|
||||||
|
exists. Otherwise, all modifications happen on the to the user file by
|
||||||
|
default.
|
||||||
|
"""
|
||||||
|
|
||||||
|
name = 'config'
|
||||||
|
usage = """
|
||||||
|
%prog [<file-option>] list
|
||||||
|
%prog [<file-option>] [--editor <editor-path>] edit
|
||||||
|
|
||||||
|
%prog [<file-option>] get name
|
||||||
|
%prog [<file-option>] set name value
|
||||||
|
%prog [<file-option>] unset name
|
||||||
|
"""
|
||||||
|
|
||||||
|
summary = "Manage local and global configuration."
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(ConfigurationCommand, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
self.configuration = None
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--editor',
|
||||||
|
dest='editor',
|
||||||
|
action='store',
|
||||||
|
default=None,
|
||||||
|
help=(
|
||||||
|
'Editor to use to edit the file. Uses VISUAL or EDITOR '
|
||||||
|
'environment variables if not provided.'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--global',
|
||||||
|
dest='global_file',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Use the system-wide configuration file only'
|
||||||
|
)
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--user',
|
||||||
|
dest='user_file',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Use the user configuration file only'
|
||||||
|
)
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--site',
|
||||||
|
dest='site_file',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Use the current environment configuration file only'
|
||||||
|
)
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--venv',
|
||||||
|
dest='venv_file',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=(
|
||||||
|
'[Deprecated] Use the current environment configuration '
|
||||||
|
'file in a virtual environment only'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.parser.insert_option_group(0, self.cmd_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
handlers = {
|
||||||
|
"list": self.list_values,
|
||||||
|
"edit": self.open_in_editor,
|
||||||
|
"get": self.get_name,
|
||||||
|
"set": self.set_name_value,
|
||||||
|
"unset": self.unset_name
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine action
|
||||||
|
if not args or args[0] not in handlers:
|
||||||
|
logger.error("Need an action ({}) to perform.".format(
|
||||||
|
", ".join(sorted(handlers)))
|
||||||
|
)
|
||||||
|
return ERROR
|
||||||
|
|
||||||
|
action = args[0]
|
||||||
|
|
||||||
|
# Determine which configuration files are to be loaded
|
||||||
|
# Depends on whether the command is modifying.
|
||||||
|
try:
|
||||||
|
load_only = self._determine_file(
|
||||||
|
options, need_value=(action in ["get", "set", "unset", "edit"])
|
||||||
|
)
|
||||||
|
except PipError as e:
|
||||||
|
logger.error(e.args[0])
|
||||||
|
return ERROR
|
||||||
|
|
||||||
|
# Load a new configuration
|
||||||
|
self.configuration = Configuration(
|
||||||
|
isolated=options.isolated_mode, load_only=load_only
|
||||||
|
)
|
||||||
|
self.configuration.load()
|
||||||
|
|
||||||
|
# Error handling happens here, not in the action-handlers.
|
||||||
|
try:
|
||||||
|
handlers[action](options, args[1:])
|
||||||
|
except PipError as e:
|
||||||
|
logger.error(e.args[0])
|
||||||
|
return ERROR
|
||||||
|
|
||||||
|
return SUCCESS
|
||||||
|
|
||||||
|
def _determine_file(self, options, need_value):
|
||||||
|
# Convert legacy venv_file option to site_file or error
|
||||||
|
if options.venv_file and not options.site_file:
|
||||||
|
if running_under_virtualenv():
|
||||||
|
options.site_file = True
|
||||||
|
deprecated(
|
||||||
|
"The --venv option has been deprecated.",
|
||||||
|
replacement="--site",
|
||||||
|
gone_in="19.3",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise PipError(
|
||||||
|
"Legacy --venv option requires a virtual environment. "
|
||||||
|
"Use --site instead."
|
||||||
|
)
|
||||||
|
|
||||||
|
file_options = [key for key, value in (
|
||||||
|
(kinds.USER, options.user_file),
|
||||||
|
(kinds.GLOBAL, options.global_file),
|
||||||
|
(kinds.SITE, options.site_file),
|
||||||
|
) if value]
|
||||||
|
|
||||||
|
if not file_options:
|
||||||
|
if not need_value:
|
||||||
|
return None
|
||||||
|
# Default to user, unless there's a site file.
|
||||||
|
elif os.path.exists(site_config_file):
|
||||||
|
return kinds.SITE
|
||||||
|
else:
|
||||||
|
return kinds.USER
|
||||||
|
elif len(file_options) == 1:
|
||||||
|
return file_options[0]
|
||||||
|
|
||||||
|
raise PipError(
|
||||||
|
"Need exactly one file to operate upon "
|
||||||
|
"(--user, --site, --global) to perform."
|
||||||
|
)
|
||||||
|
|
||||||
|
def list_values(self, options, args):
|
||||||
|
self._get_n_args(args, "list", n=0)
|
||||||
|
|
||||||
|
for key, value in sorted(self.configuration.items()):
|
||||||
|
logger.info("%s=%r", key, value)
|
||||||
|
|
||||||
|
def get_name(self, options, args):
|
||||||
|
key = self._get_n_args(args, "get [name]", n=1)
|
||||||
|
value = self.configuration.get_value(key)
|
||||||
|
|
||||||
|
logger.info("%s", value)
|
||||||
|
|
||||||
|
def set_name_value(self, options, args):
|
||||||
|
key, value = self._get_n_args(args, "set [name] [value]", n=2)
|
||||||
|
self.configuration.set_value(key, value)
|
||||||
|
|
||||||
|
self._save_configuration()
|
||||||
|
|
||||||
|
def unset_name(self, options, args):
|
||||||
|
key = self._get_n_args(args, "unset [name]", n=1)
|
||||||
|
self.configuration.unset_value(key)
|
||||||
|
|
||||||
|
self._save_configuration()
|
||||||
|
|
||||||
|
def open_in_editor(self, options, args):
|
||||||
|
editor = self._determine_editor(options)
|
||||||
|
|
||||||
|
fname = self.configuration.get_file_to_edit()
|
||||||
|
if fname is None:
|
||||||
|
raise PipError("Could not determine appropriate file.")
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.check_call([editor, fname])
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
raise PipError(
|
||||||
|
"Editor Subprocess exited with exit code {}"
|
||||||
|
.format(e.returncode)
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_n_args(self, args, example, n):
|
||||||
|
"""Helper to make sure the command got the right number of arguments
|
||||||
|
"""
|
||||||
|
if len(args) != n:
|
||||||
|
msg = (
|
||||||
|
'Got unexpected number of arguments, expected {}. '
|
||||||
|
'(example: "{} config {}")'
|
||||||
|
).format(n, get_prog(), example)
|
||||||
|
raise PipError(msg)
|
||||||
|
|
||||||
|
if n == 1:
|
||||||
|
return args[0]
|
||||||
|
else:
|
||||||
|
return args
|
||||||
|
|
||||||
|
def _save_configuration(self):
|
||||||
|
# We successfully ran a modifying command. Need to save the
|
||||||
|
# configuration.
|
||||||
|
try:
|
||||||
|
self.configuration.save()
|
||||||
|
except Exception:
|
||||||
|
logger.error(
|
||||||
|
"Unable to save configuration. Please report this as a bug.",
|
||||||
|
exc_info=1
|
||||||
|
)
|
||||||
|
raise PipError("Internal Error.")
|
||||||
|
|
||||||
|
def _determine_editor(self, options):
|
||||||
|
if options.editor is not None:
|
||||||
|
return options.editor
|
||||||
|
elif "VISUAL" in os.environ:
|
||||||
|
return os.environ["VISUAL"]
|
||||||
|
elif "EDITOR" in os.environ:
|
||||||
|
return os.environ["EDITOR"]
|
||||||
|
else:
|
||||||
|
raise PipError("Could not determine editor to use.")
|
Binary file not shown.
|
@ -0,0 +1,176 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
from pip._internal.cli import cmdoptions
|
||||||
|
from pip._internal.cli.base_command import RequirementCommand
|
||||||
|
from pip._internal.operations.prepare import RequirementPreparer
|
||||||
|
from pip._internal.req import RequirementSet
|
||||||
|
from pip._internal.req.req_tracker import RequirementTracker
|
||||||
|
from pip._internal.resolve import Resolver
|
||||||
|
from pip._internal.utils.filesystem import check_path_owner
|
||||||
|
from pip._internal.utils.misc import ensure_dir, normalize_path
|
||||||
|
from pip._internal.utils.temp_dir import TempDirectory
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class DownloadCommand(RequirementCommand):
|
||||||
|
"""
|
||||||
|
Download packages from:
|
||||||
|
|
||||||
|
- PyPI (and other indexes) using requirement specifiers.
|
||||||
|
- VCS project urls.
|
||||||
|
- Local project directories.
|
||||||
|
- Local or remote source archives.
|
||||||
|
|
||||||
|
pip also supports downloading from "requirements files", which provide
|
||||||
|
an easy way to specify a whole environment to be downloaded.
|
||||||
|
"""
|
||||||
|
name = 'download'
|
||||||
|
|
||||||
|
usage = """
|
||||||
|
%prog [options] <requirement specifier> [package-index-options] ...
|
||||||
|
%prog [options] -r <requirements file> [package-index-options] ...
|
||||||
|
%prog [options] <vcs project url> ...
|
||||||
|
%prog [options] <local project path> ...
|
||||||
|
%prog [options] <archive url/path> ..."""
|
||||||
|
|
||||||
|
summary = 'Download packages.'
|
||||||
|
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
super(DownloadCommand, self).__init__(*args, **kw)
|
||||||
|
|
||||||
|
cmd_opts = self.cmd_opts
|
||||||
|
|
||||||
|
cmd_opts.add_option(cmdoptions.constraints())
|
||||||
|
cmd_opts.add_option(cmdoptions.requirements())
|
||||||
|
cmd_opts.add_option(cmdoptions.build_dir())
|
||||||
|
cmd_opts.add_option(cmdoptions.no_deps())
|
||||||
|
cmd_opts.add_option(cmdoptions.global_options())
|
||||||
|
cmd_opts.add_option(cmdoptions.no_binary())
|
||||||
|
cmd_opts.add_option(cmdoptions.only_binary())
|
||||||
|
cmd_opts.add_option(cmdoptions.prefer_binary())
|
||||||
|
cmd_opts.add_option(cmdoptions.src())
|
||||||
|
cmd_opts.add_option(cmdoptions.pre())
|
||||||
|
cmd_opts.add_option(cmdoptions.no_clean())
|
||||||
|
cmd_opts.add_option(cmdoptions.require_hashes())
|
||||||
|
cmd_opts.add_option(cmdoptions.progress_bar())
|
||||||
|
cmd_opts.add_option(cmdoptions.no_build_isolation())
|
||||||
|
cmd_opts.add_option(cmdoptions.use_pep517())
|
||||||
|
cmd_opts.add_option(cmdoptions.no_use_pep517())
|
||||||
|
|
||||||
|
cmd_opts.add_option(
|
||||||
|
'-d', '--dest', '--destination-dir', '--destination-directory',
|
||||||
|
dest='download_dir',
|
||||||
|
metavar='dir',
|
||||||
|
default=os.curdir,
|
||||||
|
help=("Download packages into <dir>."),
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd_opts.add_option(cmdoptions.platform())
|
||||||
|
cmd_opts.add_option(cmdoptions.python_version())
|
||||||
|
cmd_opts.add_option(cmdoptions.implementation())
|
||||||
|
cmd_opts.add_option(cmdoptions.abi())
|
||||||
|
|
||||||
|
index_opts = cmdoptions.make_option_group(
|
||||||
|
cmdoptions.index_group,
|
||||||
|
self.parser,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.parser.insert_option_group(0, index_opts)
|
||||||
|
self.parser.insert_option_group(0, cmd_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
options.ignore_installed = True
|
||||||
|
# editable doesn't really make sense for `pip download`, but the bowels
|
||||||
|
# of the RequirementSet code require that property.
|
||||||
|
options.editables = []
|
||||||
|
|
||||||
|
if options.python_version:
|
||||||
|
python_versions = [options.python_version]
|
||||||
|
else:
|
||||||
|
python_versions = None
|
||||||
|
|
||||||
|
cmdoptions.check_dist_restriction(options)
|
||||||
|
|
||||||
|
options.src_dir = os.path.abspath(options.src_dir)
|
||||||
|
options.download_dir = normalize_path(options.download_dir)
|
||||||
|
|
||||||
|
ensure_dir(options.download_dir)
|
||||||
|
|
||||||
|
with self._build_session(options) as session:
|
||||||
|
finder = self._build_package_finder(
|
||||||
|
options=options,
|
||||||
|
session=session,
|
||||||
|
platform=options.platform,
|
||||||
|
python_versions=python_versions,
|
||||||
|
abi=options.abi,
|
||||||
|
implementation=options.implementation,
|
||||||
|
)
|
||||||
|
build_delete = (not (options.no_clean or options.build_dir))
|
||||||
|
if options.cache_dir and not check_path_owner(options.cache_dir):
|
||||||
|
logger.warning(
|
||||||
|
"The directory '%s' or its parent directory is not owned "
|
||||||
|
"by the current user and caching wheels has been "
|
||||||
|
"disabled. check the permissions and owner of that "
|
||||||
|
"directory. If executing pip with sudo, you may want "
|
||||||
|
"sudo's -H flag.",
|
||||||
|
options.cache_dir,
|
||||||
|
)
|
||||||
|
options.cache_dir = None
|
||||||
|
|
||||||
|
with RequirementTracker() as req_tracker, TempDirectory(
|
||||||
|
options.build_dir, delete=build_delete, kind="download"
|
||||||
|
) as directory:
|
||||||
|
|
||||||
|
requirement_set = RequirementSet(
|
||||||
|
require_hashes=options.require_hashes,
|
||||||
|
)
|
||||||
|
self.populate_requirement_set(
|
||||||
|
requirement_set,
|
||||||
|
args,
|
||||||
|
options,
|
||||||
|
finder,
|
||||||
|
session,
|
||||||
|
self.name,
|
||||||
|
None
|
||||||
|
)
|
||||||
|
|
||||||
|
preparer = RequirementPreparer(
|
||||||
|
build_dir=directory.path,
|
||||||
|
src_dir=options.src_dir,
|
||||||
|
download_dir=options.download_dir,
|
||||||
|
wheel_download_dir=None,
|
||||||
|
progress_bar=options.progress_bar,
|
||||||
|
build_isolation=options.build_isolation,
|
||||||
|
req_tracker=req_tracker,
|
||||||
|
)
|
||||||
|
|
||||||
|
resolver = Resolver(
|
||||||
|
preparer=preparer,
|
||||||
|
finder=finder,
|
||||||
|
session=session,
|
||||||
|
wheel_cache=None,
|
||||||
|
use_user_site=False,
|
||||||
|
upgrade_strategy="to-satisfy-only",
|
||||||
|
force_reinstall=False,
|
||||||
|
ignore_dependencies=options.ignore_dependencies,
|
||||||
|
ignore_requires_python=False,
|
||||||
|
ignore_installed=True,
|
||||||
|
isolated=options.isolated_mode,
|
||||||
|
)
|
||||||
|
resolver.resolve(requirement_set)
|
||||||
|
|
||||||
|
downloaded = ' '.join([
|
||||||
|
req.name for req in requirement_set.successfully_downloaded
|
||||||
|
])
|
||||||
|
if downloaded:
|
||||||
|
logger.info('Successfully downloaded %s', downloaded)
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
if not options.no_clean:
|
||||||
|
requirement_set.cleanup_files()
|
||||||
|
|
||||||
|
return requirement_set
|
Binary file not shown.
|
@ -0,0 +1,96 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal.cache import WheelCache
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
from pip._internal.models.format_control import FormatControl
|
||||||
|
from pip._internal.operations.freeze import freeze
|
||||||
|
from pip._internal.utils.compat import stdlib_pkgs
|
||||||
|
|
||||||
|
DEV_PKGS = {'pip', 'setuptools', 'distribute', 'wheel'}
|
||||||
|
|
||||||
|
|
||||||
|
class FreezeCommand(Command):
|
||||||
|
"""
|
||||||
|
Output installed packages in requirements format.
|
||||||
|
|
||||||
|
packages are listed in a case-insensitive sorted order.
|
||||||
|
"""
|
||||||
|
name = 'freeze'
|
||||||
|
usage = """
|
||||||
|
%prog [options]"""
|
||||||
|
summary = 'Output installed packages in requirements format.'
|
||||||
|
log_streams = ("ext://sys.stderr", "ext://sys.stderr")
|
||||||
|
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
super(FreezeCommand, self).__init__(*args, **kw)
|
||||||
|
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'-r', '--requirement',
|
||||||
|
dest='requirements',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='file',
|
||||||
|
help="Use the order in the given requirements file and its "
|
||||||
|
"comments when generating output. This option can be "
|
||||||
|
"used multiple times.")
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'-f', '--find-links',
|
||||||
|
dest='find_links',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
metavar='URL',
|
||||||
|
help='URL for finding packages, which will be added to the '
|
||||||
|
'output.')
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'-l', '--local',
|
||||||
|
dest='local',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='If in a virtualenv that has global access, do not output '
|
||||||
|
'globally-installed packages.')
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--user',
|
||||||
|
dest='user',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Only output packages installed in user-site.')
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--all',
|
||||||
|
dest='freeze_all',
|
||||||
|
action='store_true',
|
||||||
|
help='Do not skip these packages in the output:'
|
||||||
|
' %s' % ', '.join(DEV_PKGS))
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'--exclude-editable',
|
||||||
|
dest='exclude_editable',
|
||||||
|
action='store_true',
|
||||||
|
help='Exclude editable package from output.')
|
||||||
|
|
||||||
|
self.parser.insert_option_group(0, self.cmd_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
format_control = FormatControl(set(), set())
|
||||||
|
wheel_cache = WheelCache(options.cache_dir, format_control)
|
||||||
|
skip = set(stdlib_pkgs)
|
||||||
|
if not options.freeze_all:
|
||||||
|
skip.update(DEV_PKGS)
|
||||||
|
|
||||||
|
freeze_kwargs = dict(
|
||||||
|
requirement=options.requirements,
|
||||||
|
find_links=options.find_links,
|
||||||
|
local_only=options.local,
|
||||||
|
user_only=options.user,
|
||||||
|
skip_regex=options.skip_requirements_regex,
|
||||||
|
isolated=options.isolated_mode,
|
||||||
|
wheel_cache=wheel_cache,
|
||||||
|
skip=skip,
|
||||||
|
exclude_editable=options.exclude_editable,
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for line in freeze(**freeze_kwargs):
|
||||||
|
sys.stdout.write(line + '\n')
|
||||||
|
finally:
|
||||||
|
wheel_cache.cleanup()
|
Binary file not shown.
|
@ -0,0 +1,57 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pip._internal.cli.base_command import Command
|
||||||
|
from pip._internal.cli.status_codes import ERROR
|
||||||
|
from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES
|
||||||
|
from pip._internal.utils.misc import read_chunks
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class HashCommand(Command):
|
||||||
|
"""
|
||||||
|
Compute a hash of a local package archive.
|
||||||
|
|
||||||
|
These can be used with --hash in a requirements file to do repeatable
|
||||||
|
installs.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = 'hash'
|
||||||
|
usage = '%prog [options] <file> ...'
|
||||||
|
summary = 'Compute hashes of package archives.'
|
||||||
|
ignore_require_venv = True
|
||||||
|
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
super(HashCommand, self).__init__(*args, **kw)
|
||||||
|
self.cmd_opts.add_option(
|
||||||
|
'-a', '--algorithm',
|
||||||
|
dest='algorithm',
|
||||||
|
choices=STRONG_HASHES,
|
||||||
|
action='store',
|
||||||
|
default=FAVORITE_HASH,
|
||||||
|
help='The hash algorithm to use: one of %s' %
|
||||||
|
', '.join(STRONG_HASHES))
|
||||||
|
self.parser.insert_option_group(0, self.cmd_opts)
|
||||||
|
|
||||||
|
def run(self, options, args):
|
||||||
|
if not args:
|
||||||
|
self.parser.print_usage(sys.stderr)
|
||||||
|
return ERROR
|
||||||
|
|
||||||
|
algorithm = options.algorithm
|
||||||
|
for path in args:
|
||||||
|
logger.info('%s:\n--hash=%s:%s',
|
||||||
|
path, algorithm, _hash_of_file(path, algorithm))
|
||||||
|
|
||||||
|
|
||||||
|
def _hash_of_file(path, algorithm):
|
||||||
|
"""Return the hash digest of a file."""
|
||||||
|
with open(path, 'rb') as archive:
|
||||||
|
hash = hashlib.new(algorithm)
|
||||||
|
for chunk in read_chunks(archive):
|
||||||
|
hash.update(chunk)
|
||||||
|
return hash.hexdigest()
|
BIN
venv/lib/python2.7/site-packages/pip/_internal/commands/hash.pyc
Normal file
BIN
venv/lib/python2.7/site-packages/pip/_internal/commands/hash.pyc
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue