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安装分为几个阶段:
确定基本要求。用户提供的参数在此处进行处理。
解决依赖关系。这里将确定要安装的内容。
建造轮子。可以内置的所有依赖项。
安装软件包(并卸载要升级/替换的所有内容)。
参数处理
在查看要安装的物品时,pip按以下顺序检查每种物品的类型:
项目或存档URL。
本地目录(必须包含
setup.py
或pip将报告错误)。本地文件(sdist或wheel格式存档,遵循这些格式的命名约定)。
要求,如 PEP 440。
标识的每个项目都会添加到安装要满足的一组要求中。
从逻辑上讲,需求文件只是放置在文件中的pip安装参数的列表。请注意,您不应依赖于pip以任何特定顺序安装的文件中的项目。
实际上,需求文件有4种常见用途:
需求文件用于保存pip冻结的结果,以实现可重复的安装。在这种情况下,您的需求文件包含运行时安装的所有内容的固定版本。
pip freeze
pip freeze > requirements.txt
pip install -r requirements.txt需求文件用于强制pip正确解决依赖关系。到目前为止,pip 没有真正的依赖关系解析,而只是使用它为项目找到的第一个规范。例如,如果
pkg1
requirepkg3>=1.0
和pkg2
requirepkg3>=1.0,<=2.0
,并且如果pkg1
先解决,则pip将仅使用pkg3>=1.0
,并且很容易最终安装pkg3
与的需求冲突的版本pkg2
。为了解决此问题,您可以将pkg3>=1.0,<=2.0
(即正确的规范)与其他顶级需求一起直接放置到需求文件中。像这样:pkg1
pkg2
pkg3>=1.0,<=2.0需求文件用于强制pip安装子依赖项的备用版本。例如,假设
ProjectA
您的需求文件中有requireProjectB
,但是最新版本(v1.3)有一个错误,您可以强制pip接受早期版本,如下所示:ProjectA
ProjectB<1.3需求文件用于使用版本控制中存在的本地补丁覆盖依赖性。例如,假设
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 427和PEP 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找到了多个配置文件,则按以下顺序组合它们:
读取站点范围的文件
读取每个用户的文件
读取特定于virtualenv的文件
每个读取的文件都会覆盖从先前文件读取的所有值,因此,如果在站点范围的文件和每个用户的文件中都指定了全局超时,则将使用后一个值。
设置的名称来自于long命令行选项,例如,如果您要使用其他程序包索引(--index-url
)并将HTTP超时(--default-timeout
)设置为60秒,则配置文件将如下所示:
[global]
timeout = 60
index-url = https://download.zope.org/ppix
每个子命令都可以在其自己的部分中进行配置,以便覆盖具有相同名称的每个全局设置。例如,timeout
可以使用以下命令10
将freeze
(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。请使用no
,false
或0
代替。
配置优先级
命令行选项优先于环境变量,环境变量优先于配置文件。
在配置文件中,特定于命令的部分优先于全局部分。
例子:
--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/
·你看多少博客,书籍。都没有官方文档写的清晰,详细~建议又时间还是自己试验一下的好~