理解和使用pip命令

Last Updated: 2023-10-28 02:56:47 Saturday

-- TOC --

pip是Python标准包(package)管理工具,Linux下有时采用pip3这个名称,表示对应python3,因为有些Linux发行版中的python和pip对应的是python2。本文统一使用pip,对应python3。建议通过venv模块创建一个Python的虚拟环境来测试本文的内容。

pip is the Package Installer for Python

安装package

$ pip install <package_name>
$ pip install <package_1> <package_2> <package_3>

版本约束安装

$ pip install SomePackage              # latest version
$ pip install SomePackage==1.0.4       # specific version
$ pip install 'SomePackage>=1.0.4'     # minimum version

升级

$ pip install --upgrade <package_name>
$ pip install -U <package_name>

指定pypi源

因为网络问题,有些size较大的包在安装时常常timeout失败,可以用-i临时指定一个源,比如清华的源:

$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple <some_package>
$ pip install <some_package> -i https://pypi.tuna.tsinghua.edu.cn/simple

或者设置为永久:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

不仅仅是安装和升级,用python3 -m build打包的时候,也会访问pypi创建临时打包环境。这是国内科学用Python的最佳实践!

--editable安装

如果你是开发人员,正在开发一个Python项目,此项目在你的本地有一个path路径,此时,你可以采用--editable安装的方式:

$ pip install -e <path/to/project>

你安装了这个package,对此package的引用指向你的项目路径,你对此项目的任何修改,都将直接反应到系统或Python虚拟环境。这就是--editable的含义。

卸载

$ pip uninstall <package_name>

卸载的时候,需要用户输出y确认。

pip自身本就是Python的一个package,因此可以模块的形式运行pip

$ python -m pip install/uninstall ...

强制重新安装

默认pip不会重复安装相同版本号的package,可以使用--force-reinstall强制重装,此时pip会先自动卸载,再安装:

$ pip install --force-reinstall <some_package>

升级pip自己

$ pip install --upgrade pip
$ python -m pip install --upgrade pip

以上命令示例都没有使用sudo,此时pip会将package安装到用户的home目录里面,也可以指定安装到user目录

$ pip3 install --user ...

列出/查找所有已安装的package

$ pip list  # list all
$ pip list | grep <filter_name>

列出有新版本的package

$ pip list --outdated

显示package的信息

$ pip show [-f] <package>

pip list 和 pip show都可以很方便的查看package的version。

pip本质上就是将.whl文件下载到本地,然后执行解压和一系列文件copy,当然我们也可以直接用pip安装本地已经存在的.whl文件

$ pip install <passname.whl>

下载distribution

$ pip download [-d <folder>] <package_name>

默认是下载wheel包(如果package有wheel的话),用pip help download查看更多选项。

pip安装的模块都会在系统中留下缓存文件,重复安装的时候,pip会首先check缓存。不使用缓存安装的方法

$ pip install --no-cache-dir ...

下载whl文件,也会先尝试从缓存中copy到指定的目录。

Wheel和Egg都是python的打包格式,目的是支持不需要编译的安装过程,这种package被称为binary distribution,还有一种叫source distribution。whl文件实际上也是一个zip压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容。按照官网说法,wheel是Python的新标准并且要取代.egg。Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义。Wheel现在被认为是Python的二进制包的标准格式。

Advantages of wheels

requirements.txt文件

pip freeze > requirements.txt
pip install -r requirements.txt

帮助信息

$ pip -h

命令行参数记不清楚的时候,用-h随时查看。

更多示例

强制用sdist重新安装cryptography,跳过cache,即强行重新下载,Including :all: makes the rule apply to cryptography and all of its dependencies:

$ python -m pip install \
      --no-cache-dir \
      --force-reinstall \
      --no-binary=:all: \  # --only-binary=cryptography
      cryptography

下载wheel,如果使用--no-birany选项,就是现在.tar.gz源码包:

$ pushd "$(mktemp -d)"
$ python -m pip download --only-binary :all: --dest . --no-cache six
Collecting six
  Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
  Saved ./six-1.14.0-py2.py3-none-any.whl
Successfully downloaded six

wheel就是一个有自己命名规则的zip格式的包:

$ unzip -l six*.whl
Archive:  six-1.14.0-py2.py3-none-any.whl
  Length      Date    Time    Name
---------  ---------- -----   ----
    34074  01-15-2020 18:10   six.py
     1066  01-15-2020 18:10   six-1.14.0.dist-info/LICENSE
     1795  01-15-2020 18:10   six-1.14.0.dist-info/METADATA
      110  01-15-2020 18:10   six-1.14.0.dist-info/WHEEL
        4  01-15-2020 18:10   six-1.14.0.dist-info/top_level.txt
      435  01-15-2020 18:10   six-1.14.0.dist-info/RECORD
---------                     -------
    37484                     6 files

本文链接:https://cs.pynote.net/sf/python/202202222/

-- EOF --

-- MORE --