当在命令行输入"pip install xxx"
当输入"pip install xxx"时发生了什么
不知道你在下载一些包的时候有没有什么疑惑,输入了"pip install xxx" ,系统是如何找到对应的包的呢?
python的版本从2.7 到现在的3.11 它是如何解决程序包的兼容性问题的
pip 网页:https://pypi.org/simple/<somepackage>
https://pypi.org/simple/<somepackage>类似于一个导航页面
PEP440
PEP
要选择一个发行版,pip首先要确定哪些发行版与您的系统和 python 实现兼容。对于二进制轮子,它根据 PEP 425 解析文件名,提取python 实现、应用程序二进制接口和平台。python 实现可以是广泛的东西py2.py3(意思是“python 2.X 或 3.X 的任何实现”),或者它可以指定一个 python 解释器和主要版本,例如pp35(意思是 PyPy 版本 3.5)。应用程序二进制接口本质上是 C 扩展代码兼容的 CPython 的 C-API 版本(如果有的话)。解释兼容性标签的平台部分更加困难。它可以相对明显,例如win32对于 32 位 Windows,但我通常安装manylinux1轮子。与哪些 Linux 发行版兼容是邮件列表manylinux1中激烈争论的主题。distutils幸运的是,源代码分发的过程更简单——所有的源代码分发都被假定为兼容的,至少在流程的这个步骤中是这样
一旦pip有了兼容发行版的列表,它就会按版本对其进行排序,选择最新版本,然后为该版本选择“最佳”发行版。如果有的话,它更喜欢二进制轮子,如果它们是多个,它会选择最适合安装环境的一个。不过,这些只是pip的默认首选项——它们可以使用--no-binary或之类的选项进行配置--prefer-binary。“最佳”发行版是从本地缓存下载或安装的,在 Linux 上,本地缓存通常位于~/.cache/pip.
确定此发行版的依赖关系也不简单。理论上,可以只使用requires_dist来自 的值https://pypi.org/pypi///json。但是,这依赖于包作者上传正确的元数据,而旧的打包客户端不这样做。所以在实践中pip(以及其他任何想知道包依赖关系的人)都必须下载并检查它。
对于二进制轮子,依赖项列在一个名为METADATA. 但是对于源代码分发,当您使用命令执行其setup.py脚本时,依赖项实际上就是安装的任何内容install。除非您尝试,否则无法知道,这是什么pip!具体来说,它利用setuptools运行install直到它知道要安装哪些依赖项。然而,这可能会因为运行本身install可能需要依赖关系而变得更加复杂。在 Python 包中指定它的标准方法是将参数传递给. 顺便说一句,将运行足以发现,安装这些依赖项,然后返回并执行setup_requiressetuptools.setupsetuptoolspipsetup.pysetup_requiressetup.py再次。当然,这是疯狂的,setup_requires永远不应该使用。
一旦pip有了需求列表,它就会为每个所需的包重新开始整个过程,同时考虑到对其版本的任何限制。它以这种方式构建一个完整的包树,直到它找到的每个分发的每个依赖项都已经在树中。如果存在依赖循环,这个过程当然会中断,但它总是会终止——毕竟,python 包的数量是有限的!
但是,如果其中一个发行版pip发现违反了另一个发行版的要求,例如,如果它pip首先找到idna版本2.5,然后发现一个发行版需要,会发生idna<=2.4什么?好吧,它忽略了要求并安装idna!有一个长期存在的问题要添加一个真正的依赖解析器,pip有很多错误的开始和部分实现,但没有一个完全成功。这当然在很大程度上是由于确定 python 的依赖关系的复杂性包——在确定单个的依赖关系时,构建一个有效的依赖解析器是非常困难的候选人需要下载和执行潜在的兆字节代码!
接下来pip必须实际构建和安装包。如果它下载了一个源代码分发wheel包并安装了该软件包,它将首先从源代码中专门为您的机器构建一个二进制轮。然后它需要确定安装包的库目录——系统的、用户的还是虚拟环境的?这是由 控制的sys.prefix,而后者又由pip的可执行路径PYTHONPATH和PYTHONHOME环境变量控制。最后,它将wheel文件移动到适当的库目录中,并将python源文件编译为字节码以加快执行速度。
当在命令行输入"pip install xxx"的更多相关文章
- 安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
		
简介 在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示‘pip’不是内部或外部命令..如图: 解决办法 1.在python安装目录 ...
 - Windows命令行中pip install jieba,但没有安装到anaconda3中
		
系统混淆了python3环境下的pip和anaconda3环境下的pip. 找到Anaconda3的Scripts目录,我这里是C:\Users\Diane\Anaconda3\Scripts 将该目 ...
 - 在命令行已经pip install flask-script,但是导包时出错
		
问题:(已经安装好了flask-script,但是导入不成功) 然后在代码中导入相应的包:(报红) 后来发现是在自己创建项目的时候勾选的是创建的是在虚拟环境下的项目,所以环境有问题 所以我应该在虚拟环 ...
 - 使用python pip安装工具组件包:出现 requests File “<stdin>",line 1 pip install xxx ^  SyntaxError:invalid syntax
		
最近想要试试python ,软件安装完成了,但是,import 组件包时,出了问题,一直不得解:安装pycharm 工具感觉麻烦,不想安装那些,只想单纯使用python . 问题复现: 1.Windo ...
 - Java命令行输入求和的简单学习
		
思想:命令行输入的参数,必须先转换为数字才能进行加法计算,这就需要引用java.util.Scanner; 流程框图: 源代码: //实现几个整数相加的程序 //高开拓,2015.9.26 packa ...
 - PyCharm命令行输入
		
PyCharm命令行输入 写作原因 网上资料比较杂,版本较老,与现在的版本有区别,所以根据网上资料和自己亲手实验撰写此文. 设置方法 在菜单中按此路径设置: Run->Edit Configur ...
 - Linux 命令行输入
		
这几天刚刚接触到Linux,在windows上安装的VMWare虚拟机,Centos7.安装什么都是贾爷和办公室的同事帮忙搞定的. 在虚拟机界面,按快捷键Ctrl+Alt+Enter,可以全屏显示Li ...
 - 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
		
[现象] 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment h ...
 - TensorFlow 1.2.0新版本完美支持Python3.6,windows在cmd中输入pip install tensorflow就能下载应用最新tensorflow
		
TensorFlow 1.2.0新版本完美支持Python3.6,windows在cmd中输入pip install tensorflow就能下载应用最新tensorflow 只需在cmd中输入pip ...
 
随机推荐
- Oracle 存储过程使用总结
			
参考 https://blog.csdn.net/weixin_41968788/article/details/83659164/ 创建 注意:一定不要漏掉了语句末尾的分号 DBMS_OUTPUT. ...
 - 字节跳动构建Data Catalog数据目录系统的实践(上)
			
作为数据目录产品,Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业务场景,并服务于数据开发和数据治理的产品体系.本文介绍了字节跳动 Data ...
 - [AcWing 822] 走方格
			
点击查看代码 #include<iostream> using namespace std; int n, m, ans = 0; void dfs(int x, int y) { if ...
 - JAVA 基础(1)开发环境的搭建以及开发工具的选择
			
 我们现在还是在学习阶段因此我们不用配置那么多的jdk,配置一个jdk8就够应付日常的学习了.前面的文章我尽量写详细一些照顾刚入坑的朋友.后文还有教大家怎么使用企业版的idea. 一.开发环境的搭 ...
 - 团队Beta3
			
队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 接下来的计划 完成短租车,页面美化 **还 ...
 - 一起看 I/O | Flutter 3 正式发布!
			
作者 / Tim Sneath, Google Flutter 和 Dart 产品组产品经理 Flutter 3 实现了 Flutter 以移动端为中心扩展到多平台的产品规划,并在今年 I/O 大会的 ...
 - python之数据类型的内置方法(str, list)
			
目录 字符串的内置方法 移除首尾指定字符 字母大小写相关操作 判断字符串的开头或结尾是否是指定字符 字符串特殊的输出方法 拼接字符串 替换指定字符 判断是否是纯数字 查找指定字符对应的索引值 文本位置 ...
 - 协议层安全相关《http请求走私与CTF利用》
			
0x00 前言 最近刷题的时候多次遇到HTTP请求走私相关的题目,但之前都没怎么接触到相关的知识点,只是在GKCTF2021--hackme中使用到了 CVE-2019-20372(Nginx< ...
 - 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
			
目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...
 - 【原创】项目二Lampiao
			
实战流程 1,nmap扫描C段 ┌──(root㉿heiyu)-[/home/whoami] └─# nmap -sP 192.168.186.0/24 Starting Nmap 7.92 ( ht ...