0X01 背景
以前自己安装python的包依赖时,习惯使用pip install 或者pip3 install,但是最近看见很多工具的安装脚本都使用了python进行安装,如下图所示
我就寻思,这样写有什么好处呢?
0X02 研究
1.python3 后的-m参数是什么作用呢?
在Python中,-m参数用于运行指定模块作为脚本。它允许直接从命令行运行Python模块,而不需要显式地编写一个完整的脚本文件。
当在命令行中执行python3 -m <module>时,Python解释器会搜索并执行指定的模块。它会查找模块并运行模块中的__main__函数。
2.python3 -m执行脚本和直接python3 XXXXXXX.py的好处是?
使用-m参数的好处是,无需在命令行中提供完整的脚本路径或在模块文件中编写繁琐的启动代码。只需要提供模块名称,Python解释器将自动找到并执行它。
3.python3 -m pip的执行过程是什么样的呢?
a.首先,我们查看python3的环境变量
b.在环境变量的依赖库中,发现了pip目录,并且该路径下存在__main__.py,也就是说python3 -m pip的作用就是执行这里__main__.py文件
4.pip3 install的执行过程是什么样子的呢?
如下所示,pip3的调用其实是把py文件的pip3转换成了二进制文件的pip3,并添加到了系统的环境变量里
5.python3 -m pip和pip3安装的安装的好处?
这里牵扯到一个python环境的问题,如果一个系统里存在python3.7和python3.8,如果我们使用pip3安装包,那么最终的依赖是安装在3.7里还是3.8里呢?
但是使用python安装就不会遇到这个问题,我们可以使用python3.8 -m pip install,这样就规避了python环境的冲突问题。
如果是我们的系统,我们很清楚自己电脑的python环境,pip3 install就极为简单。但是工具的开发者在撰写创建脚本时,他需要考虑到安装者系统的python的环境部署问题,这里再次看下开发人员写的脚本逻辑:
a.安装python3,因为使用者的linux系统中可能并不具备python3环境,如果具备,那就再重新安装覆盖下
b.安装python3中pip模块,用于python的包管理,--fix-missing表示自动修复依赖缺失,-y表示默认都是yes
c.安装python3的setuptools,该工具可以打包python项目并生成可执行文件,这里并没有什么作用
d.安装tmux,为了命令行更炫酷,没什么作用
e.这里并不清楚pip3二进制文件是否存在,以及是否具备环境变量的问题,所以选择python3指定版本和包更新
f.后续就是利用python执行pip进行安装包的一个过程