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

Python中的requirements.txt文件

作者头像
云深无际
发布2021-04-14 12:42:15
8.8K0
发布2021-04-14 12:42:15
举报
文章被收录于专栏:云深之无迹云深之无迹

在查看别人的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
复制
Step1:
install the dependencies(pip install -r requirements.txt)
Step2:
run as following command → python demo.py

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

运行PIP

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

代码语言:javascript
复制
$ pip <pip arguments>

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

代码语言:javascript
复制
$ python -m pip <pip arguments>

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

代码语言:javascript
复制
$ py -m pip <pip arguments>

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

pip作为包导入

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

安装包

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

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

代码语言:javascript
复制
$ pip install SomePackage            # latest version
$ pip install SomePackage==1.0.4     # specific version
$ pip install 'SomePackage>=1.0.4'     # minimum version

要求文件

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

代码语言:javascript
复制
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
复制
pip install -c constraints.txt

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

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

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

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

从Wheels安装

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

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

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

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

代码语言:javascript
复制
pip install SomePackage-1.0-py2.py3-none-any.whl

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

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

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

代码语言:javascript
复制
pip install wheel
pip wheel --wheel-dir=/local/wheels -r requirements.txt

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

代码语言:javascript
复制
pip install --no-index --find-links=/local/wheels -r requirements.txt

卸载包

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

代码语言:javascript
复制
$ pip uninstall SomePackage

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

列出已安装的软件包:

代码语言:javascript
复制
$ pip list

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

代码语言:javascript
复制
$ pip list --outdated

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

代码语言:javascript
复制
$ pip show sphinx

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

代码语言:javascript
复制
$ 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
复制
[global]
timeout = 60
index-url = https://download.zope.org/ppix

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

代码语言:javascript
复制
[global]
timeout = 60

[freeze]
timeout = 10

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

代码语言:javascript
复制
[install]
ignore-installed = true
no-dependencies = yes

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

代码语言:javascript
复制
[global]
no-cache-dir = false

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

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

代码语言:javascript
复制
[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
复制
export PIP_DEFAULT_TIMEOUT=60

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

代码语言:javascript
复制
pip --default-timeout=60 [...]

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

代码语言:javascript
复制
export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com"

与调用相同:

代码语言:javascript
复制
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
复制
$ pip completion --bash >> ~/.profile

要设置zsh:

代码语言:javascript
复制
$ pip completion --zsh >> ~/.zprofile

设置鱼:

代码语言:javascript
复制
$ pip completion --fish > ~/.config/fish/completions/pip.fish

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

代码语言:javascript
复制
eval "`pip completion --bash`"

从本地安装包

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

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

代码语言:javascript
复制
$ pip download --destination-directory DIR -r requirements.txt

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

代码语言:javascript
复制
$ pip wheel --wheel-dir DIR -r requirements.txt

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

代码语言:javascript
复制
$ 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
复制
pip install --upgrade --no-deps SomePackage
pip install SomePackage

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成requirements.txt文件
  • 安装requirements.txt依赖
  • 运行PIP
  • 安装包
  • 要求文件
    • 概述
      • 参数处理
      • 约束文件
      • 从Wheels安装
      • 卸载包
      • 配置
        • 配置文件
          • 环境变量
            • 配置优先级
            • 命令完成
            • 从本地安装包
            • “仅在需要时”递归升级
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com