pip可识别的requirements.txt的写法

requirements.txt的作用

用于记录所有依赖包及其精确的版本号。以便新环境部署。

使用pip生成
pip freeze >requirements.txt
当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令

pip install -r requirements.txt

注:pip:https://pip.pypa.io/en/stable/reference/pip_install/

# pip –help
Usage:   
  pip [options]

Commands:
  install                       安装包.
  uninstall                   卸载包.
  freeze                      按着一定格式输出已安装包列表
  list                            列出已安装包.
  show                        显示包详细信息.
  search                      搜索包,类似yum里的search.
  wheel                       Build wheels from your requirements.
  zip                           不推荐. Zip individual packages.
  unzip                       不推荐. Unzip individual packages.
  bundle                      不推荐. Create pybundles.
  help                        当前帮助.

General Options:
  -h, –help                  显示帮助.
  -v, –verbose               更多的输出,最多可以使用3次
  -V, –version               现实版本信息然后退出.
  -q, –quiet                   最少的输出.
  –log-file            覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
  –log                 不覆盖记录verbose输出的日志.
  –proxy              Specify a proxy in the form [user:passwd@]proxy.server:port.
  –timeout              连接超时时间 (默认15秒).
  –exists-action     Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  –cert                  证书.

当安装软件的时候,尤其是python软件,通常你需要安装很多软件是一件很正常的事情,你只需要输入命令 easy_install MyPackage 你就可以获得十几个包并且每个包都有其对应的版本..

需求文件为您提供了一种创建环境的方法:一组工作在一起的包。

如果你曾经试图在一个新的系统上安装一个应用程序,或者稍微更新了一部分,并且失败了,pip的requirements非常适合来做这个工作。如果你还没有遇到这个问题,那么最终你也会这样做,pip的requirements非常适合来做这个工作

需求文件:要安装的软件包列表;而不是运行像pip MyApp和获得任何library,你可以创建一个这样需求文件:

若果你把他保存在 requirements.txt, 你就可以输入 pip install -r requirements.txt. 不考虑setup.py里面列举的MyAPP, 你会得到一个特定版本的框架(0.9.4)和至少0.2的版本库。 (你也许会考虑在MyApp’s setup.py 中列举这些特定的版本 –但是如果你想要尝试新的版本或者释放MyApp的一个新的版本,如果0.3的库不能在你的应用中使用,你必须要修改你的MyApp, 您还可以添加MyApp不严格要求的可选的库和支持工具,给人提供一种套推荐的库。

你也可以include “editable” 包(从子版本中获得), Git, Mercurial 和Bazaar. 这些就相当于运行 -e命令来pip. 如下:

你必须以 svn+ (git+hg+ or bzr+)开头,并且必须包含 #egg=Package 那样pip知道你想从哪个URL中获取到什么. 你也可以在URL中包含 @rev 比如, @275 来获得275版本.

需求文件大多是扁平的。也许MyApp需要框架,框架需要库。建议在一个单一的需求文件中列出所有这些;它是Python程序的性质,隐式地将MyApp和库直接绑定。例如,框架可能暴露一个库的对象,所以如果库更新了,MyApp可能直接被打破。如果发生这种情况,你可以不必通过重新发布MyApp,而是更新要求文件较早版本的库来解决这个问题,。

Freezing Requirements

在工作环境中创建一个新的需求文件:

这个命令会在stable-req.txt中写入一个所有安装库的列表以及对应的版本的列。你也许想在生成后修改文件 (e.g:比如释放不必要的包),但是这会给你一个稳定的开始指针来重建你的需求文件.

你也可以把它给一个已经存在的需求文件,他将会吧这个需求文件当做一种新的文件的模板 ,所以如果你运行:

将会在 devel-req.txt中有顺序的的列出包并保存注释

需求文件格式

需求文件是一种让PIP安装特定包来构成环境的方法。 

需求文件的每一行指示要安装的东西。例如:

也可以需求文件中请求额外部分:如:

包也可以以“editable”的形式安装. 这会将源代码放到src/distname (小写字母) 下并且在包上运行 python setup.py develop . 显示编辑, 用-e, 比如:

 #egg=MyProject 部分非常重要,因为当你可以安装简单的SVN的位置,项目名称在其他地方是有用的。

你也可以为不可编辑的URL指定名字的egg name。这对于指向本地文件系统上的头位置是有用的。

file:///path/to/your/lib/project#egg=MyProject

或者相对路径:

file:../../lib/project#egg=MyProject

给pip暗示,应该去哪里寻找文件的命令 -f (--find-links)如:

#链接是 MyPackage-3.0.tar.gz的形式.

如果想直接从一个链接获取tarball或zip文件 ,不需要用 -f 命令,只需要写绝对路径就可以,如:

版本控制

Subversion

Pip 支持URL 体系 svnsvn+svnsvn+httpsvn+httpssvn+ssh. 你也可以具体的修改一个SVN的URL,比如:

该命令检查revision 2019. @{20080101} 也会检查从2008-01-01以来的revision. 你也可以使用 -esvn+....来检查revision

Git

Pip 支持从 git上克隆文件git+http 和git+ssh:

传递branch names, a commit hash 或者 a tag name 都是可能的:

Mercurial

支持的体系: hg+httphg+httpshg+static-http and hg+ssh:

你也可以制定一个revision number, a revision hash, a tag name 或者a local branch name:

Bazaar

Pip 支持Bazaar 体系: bzr+httpbzr+httpsbzr+sshbzr+sftpbzr+ftp and bzr+lp :

Tags 和 revisions 安装如下:

Recursive Requirements

参考其他的需求文件,如:

这给了你一种抽象出需求集的方法。但是,这对 frozen requirements非常的不友好因为Pylons-requirements.txt 的一切信息豆浆显示在frozen file中.

Indexes, find-links

也可以在需求文件中为 --index-url 和 --find-links 选项提供值,如:

注:

 --index-url 移除了 PyPI, 

--extra-index-url 添加额外的索引

--find-links 更 ad-hoc; instead of a complete “index”,你只需要一个HTML页面链接到可用的包。简单的通过将所有的私有包放在一个目录并且使用 Apache auto-index, 你就可以发布你自己的包,这样pip也可以找到它; --find-links 通常是附加的; 

用法:

注意:

所有的这些选项必须在自己的一行

来源:女王の专属领地

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年3月17日
下一篇 2018年3月18日

相关推荐