installation

[!NOTE|label:references:]

install pip

from source code

$ curl https://bootstrap.pypa.io/get-pip.py | python [--no-setuptools] [--no-wheel]
# or
$ curl https://bootstrap.pypa.io/get-pip.py | python3.2
# or
$ curl https://bootstrap.pypa.io/get-pip.py | python - 'pip==8.0.0'
  • python3.6

    $ python3 < <(curl -s https://bootstrap.pypa.io/pip/3.6/get-pip.py)
    
  • example

    $ python get-pip.py --no-index --find-links=/local/copies
    $ python get-pip.py --user
    $ python get-pip.py --proxy="http://[user:passwd@]proxy.server:port"
    $ python get-pip.py pip==9.0.2 wheel==0.30.0 setuptools==28.8.0
    

upgrade pip

  • linux
    $ [sudo [-H]] pip install --upgrade pip
    
  • windows
    > python -m pip install --upgrade pip
    

from easy_install

$ cd <PythonInstallHome>\Scripts
$ easy_install pip
  • or
    $ curl -fsSL https://files.pythonhosted.org/packages/ba/2c/743df41bd6b3298706dfe91b0c7ecdc47f2dc1a3104abeb6e9aa4a45fa5d/ez_setup-0.9.tar.gz | tar xzf - -C .
    $ python ez_setup-0.9/ez_setup.py pip
    

cache dir and clean caches

  • clean cache ([pip cache](https://pip.pypa.io/en/stable/reference/pip_cache/))
    $ pip cache purge
    $ pip cache remove matplotlib
    
  • set no cache ([pip config](https://pip.pypa.io/en/stable/reference/pip_config/))

    $ pip install --no-cache-dir <pkg-name>
    
    # or
    $ pip config set global.cache-dir false
    

for global user (or non user)

[!NOTE]

export PYTHONPATH="/usr/local/lib/python3.9/site-packages:$PYTHONPATH"
# load the user's $HOME/.pip/pip.conf
$ sudo python -m pip install <package-name>

# or
# CANNOT load the user's $HOME/.pip/pip.conf
$ sudo -H pip install <pacakge-name>

re-install package in site.USER_BASE

[!NOTE]

$ python -c 'import site; print(site.USER_BASE)'
/Users/marslo/Library/Python/3.9
$ export PYTHONUSERBASE="$(python -c 'import site; print(site.USER_BASE)')"
$ pip install --upgrade --force-reinstall --user <package-name>

setup default python version

# temporary
$ export VERSIONER_PYTHON_VERSION=3.9

$ defaults write com.apple.versioner.python Version 3.9

index-url & extra-index-url

[!NOTE] reference:

$ pip config list
global.extra-index-url='https://private.artifactory.com/artifactory/api/pypi/pypi-dev/simple'
global.index-url='https://private.artifactory.com/artifactory/api/pypi/tools/simple'

list pip package with url

[!NOTE]

$ sudo yum install util-linux -y
$ pip list --format=freeze |
      cut -d= -f1 |
      xargs pip show |
      awk '/^Name/{printf $2} /^Home-page/{print ": "$2}' |
      column -t
beautifulsoup4:     http://www.crummy.com/software/BeautifulSoup/bs4/
certifi:            https://certifiio.readthedocs.io/en/latest/
cffi:               http://cffi.readthedocs.org
chardet:            https://github.com/chardet/chardet
click:              https://palletsprojects.com/p/click/
click-config-file:  http://github.com/phha/click_config_file
colorama:           https://github.com/tartley/colorama
commonmark:         https://github.com/rtfd/commonmark.py
compressed-rtf:     https://github.com/delimitry/compressed_rtf
configobj:          https://github.com/DiffSK/configobj
docker:             https://github.com/docker/docker-py
extract-msg:        https://github.com/mattgwwalker/msg-extractor
git-review:         http://docs.openstack.org/infra/git-review/
idna:               https://github.com/kjd/idna
IMAPClient:         https://github.com/mjs/imapclient/
Markdown:           https://Python-Markdown.github.io/
mdv:                http://github.com/axiros/terminal_markdown_viewer
meson:              https://mesonbuild.com
olefile:            https://www.decalage.info/python/olefileio
pip:                https://pip.pypa.io/
pprintpp:           https://github.com/wolever/pprintpp
psutil:             https://github.com/giampaolo/psutil
pycparser:          https://github.com/eliben/pycparser
Pygments:           https://pygments.org/
pytz:               http://pythonhosted.org/pytz
PyUserInput:        https://github.com/SavinaRoja/PyUserInput
requests:           https://requests.readthedocs.io
rich:               https://github.com/willmcgugan/rich
setuptools:         https://github.com/pypa/setuptools
six:                https://github.com/benjaminp/six
soupsieve:          https://github.com/facelessuser/soupsieve
ssdfw-scripts:      https://gerrit.sample.com/a/storage/ssdfw/devops/scripts/devkit
tabulate:           https://github.com/astanin/python-tabulate
typing-extensions:  https://github.com/python/typing/blob/master/typing_extensions/README.rst
tzlocal:            https://github.com/regebro/tzlocal
urllib3:            https://urllib3.readthedocs.io/
websocket-client:   https://github.com/websocket-client/websocket-client.git
wheel:              https://github.com/pypa/wheel
xattr:              http://github.com/xattr/xattr

installing from local packages

  • osx/unix

    $ python -m pip download --destination-directory DIR -r requirements.txt
    
    # --no-index && --find-links
    $ python -m pip install --no-index --find-links=DIR -r requirements.txt
    
  • windows

    $ py -m pip download --destination-directory DIR -r requirements.txt
    
    # --no-index && --find-links
    $ py -m pip install --no-index --find-links=DIR -r requirements.txt
    

remove

remove package and dependencies

$ pip install pip-autoremove
# or
$ python3 -m pip install pip-autoremove

# remove package and dependencies
$ pip-autoremove <package-name> -y
  • another solution

    # pip-uninstall-with-dependencies.py
    
    #
    # usage: python pip-uninstall-with-dependencies.py pkg1 [pkg2 ...]
    #
    
    from sys import argv
    from pip._internal.commands.show import search_packages_info
    from pip._internal.cli.main import main
    from typing import List, Dict
    
    if len(argv) < 2:
        print(f"Usage: {argv[0]} pkg1 [pkg2 ...]")
        exit(1)
    
    def get_dependency_tree(packages: List[str], candidates: Dict[str, List[str]] = dict()) -> Dict[str, List[str]]:
        for package in packages:
            if not candidates.get(package):
                pkg_info = next(search_packages_info([package]))
                candidates[package] = pkg_info.required_by
                for package in pkg_info.requires:
                    get_dependency_tree([package])
    
        return candidates
    
    candidates = get_dependency_tree(argv[1:])
    
    # eliminate required
    for package in list(candidates):
        diff = set(candidates[package]).difference(list(candidates))
        if diff:
            print(f"Package {package} cannot be removed, it is required by {diff}")
            del candidates[package]
    
    print("Uninstalling packages and dependencies:", *candidates)
    for package in candidates:
        main(['uninstall', '-y', package])
    

download

[!NOTE|label:references:]

config

list all configs

[!NOTE]

# to check where config comes from
$ python -m pip config debug
env_var:
env:
global:
  /etc/xdg/pip/pip.conf, exists: False
  /etc/pip.conf, exists: True
    global.index-url: https://private.artifactory.com/artifactory/api/pypi/tools/simple
site:
  /usr/pip.conf, exists: False
user:
  /home/marslo/.pip/pip.conf, exists: False
  /home/marslo/.config/pip/pip.conf, exists: False
  • or
    $ pip config -v list
    For variant 'global', will try loading '/Library/Application Support/pip/pip.conf'
    For variant 'user', will try loading '/Users/marslo/.pip/pip.conf'
    For variant 'user', will try loading '/Users/marslo/.config/pip/pip.conf'
    For variant 'site', will try loading '/usr/local/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/pip.conf'
    

tricky

get size of installed pip package

$ pip list |
      tail -n +3 |
      awk '{print $1}' |
      xargs pip show |
      grep --color=never -E 'Location:|Name:' |
      cut -d ' ' -f 2 |
      paste -d ' ' - - |
      awk '{print $2 "/" tolower($1)}' |
      xargs du -sh 2> /dev/null |
      sort -hr
124M  /Users/marslo/Library/Python/3.12/lib/python/site-packages/cmake
28M   /usr/local/lib/python3.12/site-packages/kubernetes
16M   /usr/local/lib/python3.12/site-packages/pip
13M   /usr/local/lib/python3.12/site-packages/ansible
9.9M  /usr/local/lib/python3.12/site-packages/cryptography
8.8M  /usr/local/lib/python3.12/site-packages/pygments
5.1M  /usr/local/lib/python3.12/site-packages/setuptools
1.5M  /usr/local/lib/python3.12/site-packages/msgpack
1.5M  /usr/local/lib/python3.12/site-packages/greenlet
1.3M  /usr/local/lib/python3.12/site-packages/pycparser
1.3M  /usr/local/lib/python3.12/site-packages/oauthlib
1.2M  /usr/local/lib/python3.12/site-packages/jinja2
948K  /usr/local/lib/python3.12/site-packages/pyasn1
848K  /usr/local/lib/python3.12/site-packages/cffi
824K  /Users/marslo/Library/Python/3.12/lib/python/site-packages/fortls
820K  /usr/local/lib/python3.12/site-packages/click
784K  /usr/local/lib/python3.12/site-packages/urllib3
556K  /usr/local/lib/python3.12/site-packages/wheel
556K  /Users/marslo/Library/Python/3.12/lib/python/site-packages/pynvim
520K  /usr/local/lib/python3.12/site-packages/tqdm
520K  /usr/local/lib/python3.12/site-packages/pipx
520K  /usr/local/lib/python3.12/site-packages/idna
456K  /usr/local/lib/python3.12/site-packages/requests
360K  /usr/local/lib/python3.12/site-packages/packaging
348K  /usr/local/lib/python3.12/site-packages/asciidoc
312K  /usr/local/lib/python3.12/site-packages/certifi
244K  /usr/local/lib/python3.12/site-packages/rsa
204K  /usr/local/lib/python3.12/site-packages/argcomplete
204K  /Users/marslo/Library/Python/3.12/lib/python/site-packages/json5
196K  /usr/local/lib/python3.12/site-packages/tabulate
156K  /usr/local/lib/python3.12/site-packages/distlib
140K  /usr/local/lib/python3.12/site-packages/resolvelib
96K   /usr/local/lib/python3.12/site-packages/argopt
88K   /usr/local/lib/python3.12/site-packages/cachetools
84K   /usr/local/lib/python3.12/site-packages/userpath
44K   /usr/local/lib/python3.12/site-packages/platformdirs
32K   /usr/local/lib/python3.12/site-packages/bashate
28K   /usr/local/lib/python3.12/site-packages/pbr
20K   /usr/local/lib/python3.12/site-packages/markupsafe
0     /usr/local/lib/python3.12/site-packages/virtualenv
0     /usr/local/lib/python3.12/site-packages/tbb
0     /usr/local/lib/python3.12/site-packages/openvino
0     /usr/local/lib/python3.12/site-packages/numpy
0     /usr/local/lib/python3.12/site-packages/filelock
0     /usr/local/lib/python3.12/site-packages/docutils

troubleshooting

  • error: externally-managed-environment

    [!NOTE|label:references:]

    • issue

      $ pip install pipx
      error: externally-managed-environment
      
      × This environment is externally managed
      ╰─> To install Python packages system-wide, try brew install
          xyz, where xyz is the package you are trying to
          install.
      
          If you wish to install a non-brew-packaged Python package,
          create a virtual environment using python3 -m venv path/to/venv.
          Then use path/to/venv/bin/python and path/to/venv/bin/pip.
      
          If you wish to install a non-brew packaged Python application,
          it may be easiest to use pipx install xyz, which will manage a
          virtual environment for you. Make sure you have pipx installed.
      
      note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
      hint: See PEP 668 for the detailed specification.
      
    • solution
      $ mv $(brew --prefix python@3.12)/Frameworks/Python.framework/Versions/3.12/lib/python3.12/EXTERNALLY-MANAGED{,.bak}
      
  • Skipping ... due to invalid metadata entry 'name'

    [!NOTE|label:info]

    • changelog : 23.2 (2023-07-15) Deprecate support for eggs for Python 3.11 or later, when the new importlib.metadata backend is used to load distribution metadata. This only affects the egg distribution format (with the .egg extension); distributions using the .egg-info metadata format (but are not actually eggs) are not affected. For more information about eggs, see relevant section in the setuptools documentation
    • solution

      $ pip list
      WARNING: Skipping /usr/local/lib/python3.12/site-packages/six-1.16.0-py3.12.egg-info due to invalid metadata entry 'name'
      
      $ pip unisntall six
      $ rm -rf /usr/local/lib/python3.12/site-packages/six-1.16.0-py3.12.egg-info
      # if necessary
      $ rm -rf /usr/local/lib/python3.12/site-packages/six-1.16.0-py3.12.dist-info
      $ pip install six
      
  • has inconsistent version

    [!NOTE|label:references:]

    • solution
      $ python -m pip install --upgrade --no-cache-dir --use-deprecated=legacy-resolver <your_package>
      
Copyright © marslo 2020-2023 all right reserved,powered by GitbookLast Modified: 2024-05-16 01:41:37

results matching ""

    No results matching ""