Last Updated: 2024-05-13 01:40:47 Monday
-- TOC --
pip是Python标准包(package)管理工具,Linux下有时采用pip3这个名称,表示对应python3,因为有些Linux发行版中的python和pip对应的是python2。本文统一使用pip,对应python3。建议通过venv模块创建一个Python的虚拟环境来测试本文的内容。
pip is the
P
ackageI
nstaller forP
ython
安装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源来创建临时打包环境。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
- Faster installation for pure Python and native C extension packages.
- Avoids arbitrary code execution for installation. (Avoids setup.py)
- Installation of a C extension does not require a compiler on Linux, Windows or MacOS.
- Allows better caching for testing and continuous integration.
- Creates .pyc files as part of installation to ensure they match the Python interpreter used.
- More consistent installs across platforms and machines.
requirements.txt文件
pip freeze > requirements.txt
pip install -r requirements.txt
安装pytorch出现space不够
其实不是真的space不够,而是默认的/tmp
的空间被Linux限制的小了一些,pytorch有比较大而已。解决方法,就是临时修改/tmp
的位置并不做容量限制:
$ export TMPDIR=/path/to/somewhere
帮助信息
$ 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 --