Python:Pip包的安装与原理(Windows系统)
相关内容Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482pip是Python的包管理工具用于安装、升级和卸载Python包和依赖。它的全称是“Pip Installs Packages”是Python生态系统中的标准包管理器。pip从Python Package Index (PyPI)中下载和安装Python软件包使得开发者可以轻松地管理项目的依赖项。pip的安装1、自Python 3.4和Python 2.7.9开始Python的安装包中默认包含了pip如图1所示。因此从Python 3.4及更高版本pip会自动随Python安装除非在安装过程中选择不安装pip如图2所示。图1 默认安装pip图2 可选的不安装pip2、使用下面的命令获得安装脚本并用Python解释器执行但这要求Python解释器的版本最小为3.8需要连接互联网。curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py实际上get-pip.py中有一个用Base85编码嵌入的pip包执行该脚本会在系统中创建一个临时目录随后将Base85编码的pip包解码成一个zip文件并在其中解压接着临时目录被加入Python解释器的搜索路径sys.path后最后运行嵌入的pip来从互联网安装最新版本的pip。3、自Python 3.4和Python 2.7.9开始ensurepip模块加入了Python标准库执行下面的命令以安装pip这无需连接互联网因为pip包的.whl文件已被包含在库中。python -m ensurepip4、使用conda安装Python它会强制安装包括pip在内的一些包如图3所示。图3 conda会强制安装pip包在pip包安装完成后可以在Python的包文件夹中找到...\Lib\site-packages中如图4所示图4 pip已安装在pip安装后还会发现在Scripts文件夹下多出了pip.exe、pip3.exe之类的可执行文件如图5所示它们其实入口点(entry point)程序这将在之后说明。图5 pip的入口点程序pip的使用pip有两种使用方法一种是通过之前介绍的可执行文件pip.exe另一种是通过python -m命令。可执行文件pip.exe在Python环境中入口点程序是一种机制用于定义一个可以从命令行直接调用函数的方式。以下是关于入口点的详细解释1. 入口点的概念入口点是指应用程序、模块或脚本在运行时的起点也就是“入口”。在Python的上下文中入口点允许你以一种便捷的方式在命令行中调用Python脚本而不需要显式地使用Python解释器来执行。2. 入口点在Python中的应用在Python中入口点程序通常通过工具如setuptools来定义。其工作方式通常是为一个函数创建一个可以在命令行中执行的“快捷方式”。3. 如何查看入口点以pip.exe文件为例它实际上就是一个通过入口点生成的可执行文件。当运行pip.exe文件时它引导Python去找到pip包然后调用这个包的主函数可以通过图4中的pip-24.0.dist-info文件夹下的entry_points.txt查看入口点信息如下所示。# 文件entry_points.txt [console_scripts] pip pip._internal.cli.main:main pip3 pip._internal.cli.main:main目前的pip包使用配置文件pyproject.toml可在github中pip包的根目录找到其中与生成pip.exe有关的部分如下所示。# 文件pyproject.toml ***** [project.scripts] pip pip._internal.cli.main:main pip3 pip._internal.cli.main:main *****这意味着其实执行pip.exe就相当于执行了pip._internal.cli.main.py文件下的main函数。如果使用旧的配置文件setup.cfg应该如下所示。# 文件setup.cfg ***** [options.entry_points] console_scripts pip pip._internal.cli.main:main pip3 pip._internal.cli.main:main *****如果使用更早的配置文件setup.py应该如下所示。# 文件setup.py ***** entry_points{ console_scripts: [ pip pip._internal.cli.main:main, pip3 pip._internal.cli.main:main, ], } *****pip.exe会记录构建其的Python解释器的路径所以不能移动Python文件夹的位置pip.exe可以移动但不要这么做同时需要保证pip包在Python的搜索路径sys.path中这一般能保证因为其一般位于...\Lib\site-packages中。使用下面的命令可以查看pip.exe绑定到的Python解释器。pip --version pip 24.0 from C:\Users\12078\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)下面用pip.exe安装了tqdm包可以发现它也在Scripts文件夹下创建了tqdm.exe文件如图6所示。pip install tqdm图6 tqdm的入口点程序python -m命令python -m用于将一个模块或包当作脚本运行顺带一提如果使用python -m命令则sys.path[0]就变成当前工作目录就像交互式Python中那样。如果用python -m去运行一个包则会运行其中的__main__.py文件pip包的__main__.py如下所示。# 文件__main__.py import os import sys # Remove and current working directory from the first entry # of sys.path, if present to avoid using current directory # in pip commands check, freeze, install, list and show, # when invoked as python -m pip command if sys.path[0] in (, os.getcwd()): sys.path.pop(0) # If we are running from a wheel, add the wheel to sys.path # This allows the usage python pip-*.whl/pip install pip-*.whl if __package__ : # __file__ is pip-*.whl/pip/__main__.py # first dirname call strips of /__main__.py, second strips off /pip # Resulting path is the name of the wheel itself # Add that to sys.path so we can import pip path os.path.dirname(os.path.dirname(__file__)) sys.path.insert(0, path) if __name__ __main__: from pip._internal.cli.main import main as _main sys.exit(_main())可以看出这其实还是相当于和可执行文件pip.exe一样执行了同一个main函数。但使用它的好处在于更加便捷。虚拟环境不论是通过可执行文件pip.exe还是通过python -m命令都需要确保绑定到目标Python的pip.exe或目标Python在PATH路径下。如果一个系统中存在多个版本的Python则无可避免地需要使用绝对/相对路径名。使用虚拟环境可以解决这个问题例如Anaconda它会自动调整环境变量。