联网安装应该是最简单,网上的段子是如果你可以一直pip install,那么你的项目离成功已经不远了。下面就简单介绍下如何能让你一直pip install。
pip install 包名;默认安装的是最新版本的包。例如:pip install requests
pip install 包名==版本号;安装指定版本的包。例如:pip install Django==3.2
pip install 包名1 包名2;安装多个包。例如:pip install numpy pandas
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名;指定源安装。pip的默认源是pypi的,国内下载会比较慢,可以在安装包时指定源,也可以直接修改下载源的配置文件。
pip install -r requirements.txt;从requirements文件安装。该安装方法适合于具备联网环境的项目部署场景,可以先把项目依赖的文件全部导出到requirements文件中,然后在新设备上一次性的全部部署完成。
有些环境是没有网络环境的,需要自己下载包自己进行离线安装。离线安装的命令如下pip install ./路径/包名.whl。命令很简单,但难在如何解决安装依赖。
该章节不讲解如何查看依赖,只讲如何识别对应的python包,本文以pypi官网为准。样例是下载一个jpype1库。
登陆https://pypi.org/网站,在搜索栏中搜索jpype1库

包名不会重复,但可能会有许多类型的,请细心查看

选择包名,点击download,默认是最新版本,如果需要安装历史版本可以点击Release history

在选择安装包时有两个类型的包可以选择,一个是源码包,一个是编译包。提议选择编译包,这种包是别人按照的python版本,操作系统版本,系统架构做过编译的安装包,安装速度快(没有编译的步骤了)。

如何区分编译包,包名-版本-python版本-操作系统类型-系统架构.whl,根据实际环境下载即可

举另外一个例子,有些库兼容性是超级强的,它不挑python版本,操作系统版本,像下图

下载好的whl文件使用pip install ./路径/包名.whl安装即可。
上面的例子是手动下载安装包,隐性的逻辑就是人工处理包依赖。常见的就是找个干净环境安装一个核心包最后pip list一下看下总共哪些包安装了,都是哪些版本。但这种方式很容易出错,所以推荐大家用如下的方式进行处理。
先找一台能够上网的设备,这个设备的电脑操作系统,python版本最好要和目标环境一摸一样
然后使用pip download 包名==版本 -d ./offline_deps命令,使用pip命令联网下载所需的包依赖,例如:pip download -d ./offline_deps your_package.tar.gz
这里扩展一下命令,pip download的对象可以是whl文件,tar.gz包,通知也支持-i指定下载的源

还有一个逻辑是忽略安装依赖,pip install your_package.tar.gz --no-deps,这种方式慎用,除非你明确知道有些包是弱依赖(可有可无)
以上步骤完成后把下载好的安装包复制到目前环境,依次(按照依赖关系)pip install安装即可
编译安装在pip中并不常见,主要pip太方便了,只要能联网就能pip安装。pip安装很爽,一直pip安装一直爽。但也无法排除极小的概率需要我们pip install 源码包。而且一旦我们碰到这种环境,多数是即不能联网而且pip环境干净的比我们兜还干净的环境,这种场景下第一需要做的就是下载源码包,第二就是下载构建编译环境的依赖库(大部分依赖库兼容性都很强,不需要再折腾它们)。
第一步下载我们的源码包,这里还以jpype1为例,源码包是jpype1-1.5.2.tar.gz
为什么会触发我安装源码包,这里也需要说明下,我把所有编译好的linux包全试了都报错,没办法了才思考编译安装
第二步是准备编译所需的依赖库(编译标准是PEP 517,编译安装时日志里会明确提示),常见的有setuptools,wheel以上两个是我根据报错提示补出来的,还有一个是网上提议的cython
另外就是再使用pip install 源码时pip 会默认创建一个临时的隔离环境(build isolation)来构建这些包,这个隔离环境包含了构建包所需的最小依赖集合。为了最大限度的只使用当前的环境构建包,可以使用--no-build-isolation 参数,它的作用是禁用这种隔离构建机制,让包在当前环境中直接进行构建。也就是说,它会跳过创建临时隔离环境这一步,直接使用当前 Python 环境中的依赖来构建和安装包。
以上资源都准备完毕后,pip install 源码即可,pip会先将源码编译成本地可以运行的执行,然后再进行安装
补充说明一点,有些包中配置信息不全,可能会出现包安装完毕了,但是包名unknown,版本0.0.0的情况。这种情况是由于源码包中的setup.py文件中缺少名称字段和版本字段,补全全两个字段即可。

完整的离线安装命令如下,包含编译安装的情况
pip download your_package==version -d ./offline_deps
pip install ./offline_deps/* --no-index --find-links=./offline_deps
pip install your_package.tar.gz --no-deps --no-build-isolation
其他的一些比较常用的pip命令。
pip install --upgrade 包名;升级包
pip uninstall 包名;卸载包
pip list;查看安装的包
pip show 包名;查看某个包的详情
pip freeze > requirements.txt;将当前python环境中安装的包导出成requirements.txt文件
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple;永久设置下载源
pip --help;查看pip有那些命令
pip install some_package --no-deps;安装时不查找依赖
pip install some_package --no-cache-dir;有时候缓存导致找不到版本,用这个参数可以重新强制拉取版本
pip install 'some_package>=1.0.0,<2.0.0';安装指定区间的版本