Python中的requirements.txt文件

在查看别人的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

Step1:install the dependencies(pip install -r requirements.txt)Step2:run as following command → python demo.py

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

运行PIP

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

$ pip <pip arguments>

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

$ python -m pip <pip arguments>

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

$ py -m pip <pip arguments>

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

pip作为包导入

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

安装包

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

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

$ pip install SomePackage # latest version
$ pip install SomePackage==1.0.4 # specific version
$ pip install 'SomePackage>=1.0.4' # minimum version

要求文件

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

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嵌入在项目中的文件来确定软件包的依赖关系 。

约束文件

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

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

pip install -c constraints.txt

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

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

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

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

从Wheels安装

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

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

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

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

pip install SomePackage-1.0-py2.py3-none-any.whl

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

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

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

pip install wheel
pip wheel --wheel-dir=/local/wheels -r requirements.txt

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

pip install --no-index --find-links=/local/wheels -r requirements.txt

卸载包

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

$ pip uninstall SomePackage

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

列出已安装的软件包:

$ pip list

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

$ pip list --outdated

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

$ pip show sphinx

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

$ pip search "query"

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

配置

配置文件

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

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

每位使用者

  • 在Unix上,默认配置文件是:$HOME/.config/pip/pip.conf 尊重XDG_CONFIG_HOME环境变量。

  • 在macOS上,配置文件是否为 else 目录。$HOME/Library/Application Support/pip/pip.conf$HOME/Library/Application Support/pip$HOME/.config/pip/pip.conf

  • 在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秒,则配置文件将如下所示:

[global]
timeout = 60
index-url = https://download.zope.org/ppix

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

[global]
timeout = 60

[freeze]
timeout = 10

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

[install]
ignore-installed = true
no-dependencies = yes

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

[global]
no-cache-dir = false

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

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

[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>。短划线(-)必须替换为下划线(_)。

例如,设置默认超时:

export PIP_DEFAULT_TIMEOUT=60

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

pip --default-timeout=60 [...]

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

export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com"

与调用相同:

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:

$ pip completion --bash >> ~/.profile

要设置zsh:

$ pip completion --zsh >> ~/.zprofile

设置鱼:

$ pip completion --fish > ~/.config/fish/completions/pip.fish

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

eval "`pip completion --bash`"

从本地安装包

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

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

$ pip download --destination-directory DIR -r requirements.txt

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

$ pip wheel --wheel-dir DIR -r requirements.txt

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

$ 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 行为的早期“解决方案” 是:

pip install --upgrade --no-deps SomePackage
pip install SomePackage

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

https://pip.pypa.io/en/stable/user_guide/

·你看多少博客,书籍。都没有官方文档写的清晰,详细~建议又时间还是自己试验一下的好~

(0)

相关推荐

  • Windows下python和pip命令无法使用的问题

    一. python命令找不到 安装python之后经常会出现下面的问题 , python命令找不到, 这是因为Windows的环境变量中没有定义python的安装路径 这个时候我们先找到python的 ...

  • 技术|在 Ubuntu Linux 上安装 Deb 文件的 3 种方法

    这篇初学者文章解释了如何在 Ubuntu 中安装 deb 软件包.它稍后也向你展示如何移除这些 deb 软件包. 这是 Ubuntu 初学者系列的另一篇文章.如果你对 Ubuntu 很陌生,你可能会想 ...

  • (实验三) Hadoop之Zookeeper安装

    Hadoop之Zookeeper安装 实验目的要求 1.完成Zookeeper的完全分布模式的安装 2.Zookeeper服务能够正常启动和连接 3.Zookeeper控制台能够正常进入 4.Zook ...

  • Python项目如何生成requirements.txt文件

    Pyhon项目中,一般都会有一个 requirements.txt 文件,这个文件主要是用于记录当前项目下的所有依赖包及其精确的版本号,以方便在一个新环境下更快的进行部署. 使用 pip freeze ...

  • Python项目生成依赖包清单requirements.txt方法总结

    一.背景 工作中跨环境运行相同项目时,总会出现缺少各种包的问题,还需要一个个安装,相当的蛋疼,这里推荐一个工具叫pipreqs,可以通过一条命令直接生成项目所有依赖包清单requirements.tx ...

  • python笔记40-环境迁移freeze生成requirements.txt

    前言 我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目. 需要部署到另外一台电脑或者服务器上的时候,需要导入python相关的依赖包,可以用fre ...

  • 面试题-python 如何读取一个大于 10G 的txt文件?

    前言 用python 读取一个大于10G 的文件,自己电脑只有8G内存,一运行就报内存溢出:MemoryError python 如何用open函数读取大文件呢? 读取大文件 首先可以自己先制作一个大 ...

  • Python中.npz文件的读取

    有时候从网上下载的数据集扩展名(后缀名)是npz,我们需要对数据进行加载(读取): 例如:识别猫狗图片的二分类,下的数据集分别为cat.npz和dog.npz import numpy as np c ...

  • (38条消息) python读取txt文件(多种方法)

    原始数据:唐诗一百首.txt 方法1: f=open('唐诗一百首.txt', encoding='gbk')txt=[]for line in f: txt.append(line.strip()) ...

  • ## python对txt文件进行处理(详细教程)

    # -*- coding : utf-8 -*-# coding: utf-8from __future__ import divisionimport shutilimport pandas as ...

  • Python中的文件处理–为初学者学习Python文件处理

    Python文件处理操作 Python文件处理操作(也称为Python I / O)处理两种类型的文件.他们是: 文字档 二进制文件 即使两种文件类型在表面上看起来相同,它们对数据的编码也不同. 文本 ...

  • 如何在python中执行另一个py文件

      更新时间:2020年04月30日 10:24:22   作者:杰鑫哥   这篇文章主要介绍了如何在python中执行另一个py文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参 ...