前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中的requirements.txt文件

Python中的requirements.txt文件

作者头像
云深无际
发布于 2021-04-14 04:42:15
发布于 2021-04-14 04:42:15
9.4K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号。这个文件有点类似与Rails的Gemfile。其作用是用来在另一台PC上重新构建项目所需要的运行环境依赖。第一步我觉得就是看一眼readme吧~而后看一眼requirements.txt。说了很多遍了,python从某种意义上来讲就是活的库。

第二步肯定要安装依赖

requirements.txt可以通过pip命令自动生成和安装

生成requirements.txt文件

pip freeze > requirements.txt

当前工作目录会生成成精确的库描述

安装requirements.txt依赖

pip install -r requirements.txt

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Step1:
install the dependencies(pip install -r requirements.txt)
Step2:
run as following command → python demo.py

具体就是这么个情况,接下来看看pip的一些用法:

运行PIP

pip是一个命令行程序。安装pip时,pip系统会添加一条命令,该命令可以从命令提示符处运行,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip <pip arguments>

如果您不能pip直接运行命令(可能是因为安装位置不在您的操作系统上PATH),则可以通过Python解释器运行pip:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python -m pip <pip arguments>

Windows上,py可以使用启动器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ py -m pip <pip arguments>

即使您可以从Python安装中将pip作为可导入模块使用,通过,也不支持以这种方式使用pip。import pip

pip作为包导入

如果在cmd里pip失败。考虑py -m pip

安装包

pip支持从PyPI,版本控制,本地项目以及直接从分发文件进行安装。

最常见的情况是使用需求说明符从PyPI安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install SomePackage            # latest version
$ pip install SomePackage==1.0.4     # specific version
$ pip install 'SomePackage>=1.0.4'     # minimum version

要求文件

“需求文件”是包含要使用pip install安装的项目列表的文件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -r requirements.txt

文件格式的详细信息在这里:需求文件格式(下文)。

概述

pip安装分为几个阶段:

  1. 确定基本要求。用户提供的参数在此处进行处理。
  2. 解决依赖关系。这里将确定要安装的内容。
  3. 建造轮子。可以内置的所有依赖项。
  4. 安装软件包(并卸载要升级/替换的所有内容)。

参数处理

在查看要安装的物品时,pip按以下顺序检查每种物品的类型:

  1. 项目或存档URL。
  2. 本地目录(必须包含setup.py或pip将报告错误)。
  3. 本地文件(sdist或wheel格式存档,遵循这些格式的命名约定)。
  4. 要求,如 PEP 440

标识的每个项目都会添加到安装要满足的一组要求中。

从逻辑上讲,需求文件只是放置在文件中的pip安装参数的列表。请注意,您不应依赖于pip以任何特定顺序安装的文件中的项目。

实际上,需求文件有4种常见用途:

  1. 需求文件用于保存pip冻结的结果,以实现可重复的安装。在这种情况下,您的需求文件包含运行时安装的所有内容的固定版本。pip freeze pip freeze > requirements.txt pip install -r requirements.txt
  2. 需求文件用于强制pip正确解决依赖关系。到目前为止,pip 没有真正的依赖关系解析,而只是使用它为项目找到的第一个规范。例如,如果pkg1require pkg3>=1.0pkg2require pkg3>=1.0,<=2.0,并且如果pkg1先解决,则pip将仅使用pkg3>=1.0,并且很容易最终安装pkg3与的需求冲突的版本pkg2。为了解决此问题,您可以将pkg3>=1.0,<=2.0(即正确的规范)与其他顶级需求一起直接放置到需求文件中。像这样: pkg1 pkg2 pkg3>=1.0,<=2.0
  3. 需求文件用于强制pip安装子依赖项的备用版本。例如,假设ProjectA您的需求文件中有require ProjectB,但是最新版本(v1.3)有一个错误,您可以强制pip接受早期版本,如下所示: ProjectA ProjectB<1.3
  4. 需求文件用于使用版本控制中存在的本地补丁覆盖依赖性。例如,假设SomeDependency来自PyPI 的依赖 项存在错误,并且您不能等待上游修复程序。您可以克隆/复制src,进行修复,然后使用标记将其放置在VCS中 sometag。您可以在需求文件中用如下一行引用它: git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency 如果SomeDependency以前是需求文件中的顶级需求,则新行替换该行。如果 SomeDependency是子依赖项,则添加新行。

重要的是要清楚一点,pip使用install_requires元数据而不是通过发现requirements.txt嵌入在项目中的文件来确定软件包的依赖关系 。

约束文件

约束文件是需求文件,它们仅控制安装需求的哪个版本,而不控制是否安装了需求的版本。它们的语法和内容几乎与需求文件相同。主要区别在于:在约束文件中包含软件包不会触发该软件包的安装。

使用约束文件,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -c constraints.txt

当您不确定要安装的东西时,使用约束文件的原因与需求文件的原因完全相同。例如,假设“ helloworld”软件包在您的环境中不起作用,因此您具有本地修补版本。您安装的某些东西取决于“ helloworld”,而有些则不是。

确保补丁版本得到一致使用的一种方法是手动审核安装的所有内容的依赖性,如果存在“ helloworld”,请编写一个需求文件以在安装该东西时使用。

约束文件提供了一种更好的方法:为您的组织编写一个约束文件,并在各处使用。如果要安装的东西需要安装“ helloworld”,那么将使用约束文件中指定的固定版本。

约束文件支持已在pip 7.1中添加。

从Wheels安装

“车轮”是一种内置的存档格式,与从源存档构建和安装相比,可以大大加快安装速度。有关更多信息,请参见 Wheel文档,PEP 427PEP 425

pip倾向于有轮子的地方。要禁用此功能,请对pip install使用 --no-binary标志。

如果找不到满意的轮子,则pip将默认为查找源档案。

要直接从车轮档案中安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install SomePackage-1.0-py2.py3-none-any.whl

对于无法使用轮子的情况,pip提供了pip wheel作为一种便利,可根据您的所有要求和依赖性来构建轮子。

pip wheel需要安装 wheel软件包,该软件包提供了它使用的“ bdist_wheel” setuptools扩展。

要构建满足您的需求及其所有依赖项的本地目录,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install wheel
pip wheel --wheel-dir=/local/wheels -r requirements.txt

随后只用车轮的本地目录(而不是从PyPI中)安装了这些要求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --no-index --find-links=/local/wheels -r requirements.txt

卸载包

pip可以卸载大多数软件包,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip uninstall SomePackage

pip还会在升级到新版本之前自动卸载软件包的旧版本。

列出已安装的软件包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip list

要列出过时的软件包并显示可用的最新版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip list --outdated

显示有关已安装软件包的详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip show sphinx

pip可以使用以下 命令在PyPI中搜索软件包:pip search

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip search "query"

该查询将用于搜索所有软件包的名称和摘要。

配置

配置文件

pip允许您在标准ini样式配置文件中设置所有命令行选项默认值。

在不同平台上,配置文件的名称和位置略有不同。您可能具有按用户,按虚拟环境或站点范围(在所有用户之间共享)的配置:

每位使用者

  • Unix上,默认配置文件是:$HOME/.config/pip/pip.conf 尊重XDG_CONFIG_HOME环境变量。
  • 在macOS上,配置文件是否为 else 目录。HOME/Library/Application Support/pip/pip.confHOME/Library/Application Support/pip
  • 在Windows上,配置文件为%APPDATA%\pip\pip.ini

还有一个旧的每用户配置文件,该文件也受尊重,位于:

  • 在Unix和macOS上,配置文件为: $HOME/.pip/pip.conf
  • 在Windows上,配置文件为: %HOME%\pip\pip.ini

您可以使用环境变量为此配置文件设置自定义路径位置PIP_CONFIG_FILE

在virtualenv内部

  • 在Unix和macOS上,文件为 $VIRTUAL_ENV/pip.conf
  • 在Windows上,文件为: %VIRTUAL_ENV%\pip.ini

整个网站

  • 在Unix上,该文件可能位于中/etc/pip.conf。或者,它可以位于环境变量XDG_CONFIG_DIRS(如果存在)中 设置的任何路径的“ pip”子目录中/etc/xdg/pip/pip.conf
  • 在macOS上,文件为: /Library/Application Support/pip/pip.conf
  • 在Windows XP上,文件为: C:\Documents and Settings\All Users\Application Data\pip\pip.ini
  • 在Windows 7及更高版本上,该文件是隐藏的,但可在以下位置写入 C:\ProgramData\pip\pip.ini
  • Windows Vista不支持站点范围的配置

如果通过pip找到了多个配置文件,则按以下顺序组合它们:

  1. 读取站点范围的文件
  2. 读取每个用户的文件
  3. 读取特定于virtualenv的文件

每个读取的文件都会覆盖从先前文件读取的所有值,因此,如果在站点范围的文件和每个用户的文件中都指定了全局超时,则将使用后一个值。

设置的名称来自于long命令行选项,例如,如果您要使用其他程序包索引(--index-url)并将HTTP超时(--default-timeout)设置为60秒,则配置文件将如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[global]
timeout = 60
index-url = https://download.zope.org/ppix

每个子命令都可以在其自己的部分中进行配置,以便覆盖具有相同名称的每个全局设置。例如,timeout可以使用以下命令10freeze (pip Frozen)命令运行时的秒数减少 到60其他所有命令所用的 秒数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[global]
timeout = 60

[freeze]
timeout = 10

布尔选项,例如--ignore-installed--no-dependencies可以这样设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[install]
ignore-installed = true
no-dependencies = yes

要启用布尔选项--no-compile--no-warn-script-location--no-cache-dir,必须使用falsy值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[global]
no-cache-dir = false

[install]
no-compile = no
no-warn-script-location = false

可以将值附加到配置文件(例如pip.ini文件)中的部分。这适用于附加选项,如--find-links--trusted-host,可以在多行中编写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[global]
find-links =
    http://download.example.com

[install]
find-links =
    http://mirror1.example.com
    http://mirror2.example.com

[install]
trusted-host =
    http://mirror1.example.com
    http://mirror2.example.com

这使用户可以按此类命令行参数的输入顺序添加其他值。

环境变量

可以使用format使用环境变量设置pip的命令行选项PIP_<UPPER_LONG_NAME>。短划线(-)必须替换为下划线(_)。

例如,设置默认超时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export PIP_DEFAULT_TIMEOUT=60

这与将选项直接传递给pip相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip --default-timeout=60 [...]

对于可以重复的命令行选项,请使用空格分隔多个值。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com"

与调用相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --find-links=http://mirror1.example.com --find-links=http://mirror2.example.com

注意

设置为空字符串的环境变量不会被视为false。请使用nofalse0代替。

配置优先级

命令行选项优先于环境变量,环境变量优先于配置文件。

在配置文件中,特定于命令的部分优先于全局部分。

例子:

  • --host=foo 覆写 PIP_HOST=foo
  • PIP_HOST=foo 覆盖配置文件 [global] host = foo
  • 在配置文件中的指令中的规定部分 覆盖在具有相同名称的选项配置文件节[<command>] host = bar[global]

命令完成

pip支持bash,zsh和fish中的命令行完成。

要设置bash:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip completion --bash >> ~/.profile

要设置zsh:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip completion --zsh >> ~/.zprofile

设置鱼:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip completion --fish > ~/.config/fish/completions/pip.fish

或者,您可以将completion命令的结果直接与外壳的eval函数一起使用,例如,通过将以下内容添加到启动文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eval "`pip completion --bash`"

从本地安装包

在某些情况下,您可能只想从本地软件包安装,而没有到PyPI的流量。

首先,下载符合您要求的档案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip download --destination-directory DIR -r requirements.txt

请注意,在尝试从PyPI下载之前,它将首先在您的Wheel缓存中查找。如果您以前从未安装过需求,那么这些物品将没有滚轮缓存。在这种情况下,如果您的某些要求不是来自PyPI的轮子,而您想要轮子,那么请运行以下命令:pip download

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip wheel --wheel-dir DIR -r requirements.txt

然后,要仅从本地安装,将使用--find-links和--no-index,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install --no-index --find-links=DIR -r requirements.txt

“仅在需要时”递归升级

pip install --upgrade现在有一个--upgrade-strategy选项,可以控制pip如何处理依赖项的升级。支持两种升级策略:

  • eager:升级所有依赖项,无论它们是否仍然满足新的父级要求
  • only-if-needed:仅在不满足新的父项要求时才升级依赖项

默认策略是only-if-needed。由于eager升级冲突依赖项时的中断特性,在pip 10.0中对此进行了更改。

作为历史记录,获得该only-if-needed 行为的早期“解决方案” 是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade --no-deps SomePackage
pip install SomePackage

关于upgrade-all命令的提议被认为是急于升级的行为的更安全的选择。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://pip.pypa.io/en/stable/user_guide/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
CodeBuddy跨界篇 | 产品经理写代码?不,你错了,我只是想画原型图
今天在上班期间,无意间听到了产品经理正在发愁,说最近工作比较忙,活比较多,有了新需求要花费大量时间思考方案,还要写需求文档,写完需求文档还要出开发原型给开发讲,愁死人了。听到这我突然就想到,上次我在我本机的VSCode 装了CodeBuddy 插件之后,利用 Craft 几句话就做出来一个数独游戏的事。那么我就想,我是不是也可以用VSCode 来直接出开发原型图呢?如果真的能出,明天就可以给产品经理指一条明路了,哈哈。
六月的雨在Tencent
2025/05/15
6191
bootstrap模态框之加载页面至modal-boby
思路:使用$("#reserveForm").html(result); result为Ajax请求controller所返回的页面
week
2018/08/27
4.6K0
bootstrap模态框之加载页面至modal-boby
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
摘要总结:本文介绍了如何使用AngularJS04进行图书信息管理系统开发。主要包括了图书信息录入、查询、修改和删除等功能。同时,还提供了编辑图书和删除图书的接口。通过使用AngularJS04的指令和指令模块,可以方便地实现图书信息管理系统。
张果
2018/01/04
2.5K0
前端MVC学习总结(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
Html 收银页面设计
一、效果图 image.png image.png image.png 二、前端页面 1、商品列表: reserveCommodityOnShelfList.jsp <%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/WEB-INF/views/include/taglib.jsp" %> <html> <head> <title>商品管理</title> <meta name="decorat
week
2018/08/27
13.9K0
Html 收银页面设计
HC小区管理系统项目前端页面开发流程梳理
在我之前写的文章你一定没见过这样高度适配的接口,HC小区管理系统后端项目源码难点梳理 中我们一起梳理了后端项目MicroCommunity的开发流程和难点,当时前端项目MicroCommunityWeb尚未梳理,而前端项目MicroCommunityWeb对于
用户3587585
2024/06/13
5400
HC小区管理系统项目前端页面开发流程梳理
EngineerCMS核心代码
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/53367020
hotqin888
2018/09/11
1.4K0
golang-fullcalendar,engineercms完善日历事件-支持拖曳drop,改变时间resize
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/54023362
hotqin888
2018/09/11
2.1K0
golang-fullcalendar,engineercms完善日历事件-支持拖曳drop,改变时间resize
前端基础:Boostrap
Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。
RendaZhang
2020/09/08
7.7K0
前端基础:Boostrap
VFP+VUE碰撞出火花来了,我入门猫框后开始摸索开发自己的系统
大家好,我们前段时间跟着加菲猫老师学习了VFP+VUE入门课程。通过这门课程我们了解了VUE在网页开发的应用情况,也学会了利用axios组件从网页前端获取后台数据。
加菲猫的VFP
2022/01/05
7740
VFP+VUE碰撞出火花来了,我入门猫框后开始摸索开发自己的系统
python测试开发django-121.bootstrap-table弹出模态框修表格数据提交
整个body内容如下,模态框设置id属性id=”myModal” 修改按钮的id属性id=”btn_edit”
上海-悠悠
2021/09/14
1.4K0
PHP实现用户登录注册功能
初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果:
用户8099761
2023/05/11
2.1K0
PHP实现用户登录注册功能
【云+社区年度征文】PHP实现登录注册-LMAP示例
最近事情越来越多了,比赛、实验、大作业、项目、考试,已经很难挤出时间写博客了,十一月产量也不高,但是我会更的(咕咕咕)。
唔仄lo咚锵
2020/12/02
2.3K1
【云+社区年度征文】PHP实现登录注册-LMAP示例
html --- bootstrap 框架 (栅格系统布局)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no,minimal-ui"/> <title>标题</title> <!-- ****** 必须引入 .css 文件 --> <link rel="stylesheet" h
小蔚
2019/09/11
4.9K0
ztree实现左边动态生成树,右边为具体信息功能
页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="stylesheet" type
王小婷
2018/06/04
3.4K0
电子规范管理系统(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/78008917
hotqin888
2018/09/11
1.1K0
电子规范管理系统(2)
基于html+css+jquery+bootstrap响应式网页制作模板——红色中国文化主题:大美中国
家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有运用,CSS的代码量也很足、很细致,使用hover来完成过渡效果、鼠标滑过效果等,使用表格、表单补充模块,为方便新手学习页面中没有使用js有需要的可以自行添加。 <font color='#b44846' size='4px'> ❤</font> 【作者主页——🔥获取更多优质
IT司马青衫
2022/08/16
8250
基于html+css+jquery+bootstrap响应式网页制作模板——红色中国文化主题:大美中国
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
我们昨天完成了第一部分的开发,即项目搭建和登录、注册功能实现。今天本文将与读者一起实现用户列表的显示、部门模块的显示和头像上传功能。
易兮科技
2020/09/27
1.2K0
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
Web开发---单页面应用(签到日报--技术实现)
疫情前期,员工分布在各个地区,需要上报个人的健康状态和位置信息,于是做了一个单页面应用(当时钉钉和微信上的健康上报模板还没出现)
MiaoGIS
2020/03/16
8580
Web开发---单页面应用(签到日报--技术实现)
PHP 基于 Cookie + Session 实现用户认证功能
接下来,我们通过 Cookie + Session 来完成博客管理后台的用户认证功能。
学院君
2020/10/19
2.6K0
PHP 基于 Cookie + Session 实现用户认证功能
【Java Web_06】Bootstrap
一、CSS全局样式 1. 文本对其方式 ① text-left : 左对齐 ② text-center : 居中 ③ text-right : 右对齐 2. 文本大小写转换 ① text-lowercase : 转小写 ② text-uppercase : 转大写 ③ text-capitalize : 首字母大写 3. 列表样式 ① list-unstyled : 取消前置图标,将左边距设置为0 ② lis
用户8250147
2021/02/04
6.1K0
推荐阅读
相关推荐
CodeBuddy跨界篇 | 产品经理写代码?不,你错了,我只是想画原型图
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档