equivs虚拟包版本号语法

时间:2016-04-22 14:33:51

标签: dependencies version virtual apt dpkg

我尝试使用equivs创建一个虚拟包,为python-oauthlib提供apt包。问题是除了一个具有版本要求的包之外,大多数依赖性问题都得到了解决。我的问题是:如何在Provides字段中指定版本号?

我做了以下事情:

使用

创建控制文件
equivs-control python-oauthlib

按如下方式编辑控制文件:

Section: misc
Priority: optional
Standards-Version: 3.9.2

Package: python-oauthlib-dummy
Version: 0.6.1
Provides: python-oauthlib
Architecture: all
Description: Dummy Python OAuthlib package

构建包:

equivs-build python-oauthlib

安装包:

sudo dpkg -i python-oauthlib-dummy_0.6.1_all.deb

在安装软件包之前,apt-get导致以下错误:

The following packages have unmet dependencies:
 oneconf-common : Depends: python-oauthlib but it is not installed
 python-oneconf : Depends: python-oauthlib but it is not installed
 python-piston-mini-client : Depends: python-oauthlib but it is not installed
 python-ubuntu-sso-client : Depends: python-oauthlib (>= 0.3.5) but it is not installed

安装软件包后,所有依赖项错误都会消失,除了最后一个:

The following packages have unmet dependencies:
 python-ubuntu-sso-client : Depends: python-oauthlib (>= 0.3.5)

这是有道理的,因为我没有在控制文件中指定Provides的版本号。这样做的正确语法是什么?我尝试了各种各样的事情,例如Provides: python-oauthlib-0.6.1Provides: python-oauthlib-0.6-1Provides: python-oauthlib-0.6Provides: python-oauthlib (= 0.6.1),但没有任何效果。而是返回了所有原始未满足的依赖项,并从W: Ignoring Provides line with DepCompareOp for package python-oauthlib添加了apt

我知道虚拟包本身的版本号没有关系,我只是选择了相同的数字来澄清它是一个提供此版本的假人。

背景:python-oauthlib-0.6.1在某个时刻安装了apt。我想使用python-twitter安装pip。这需要OAuthlib 1.0.3。 Pip无法升级oauthlib,因为它“归OS所有”。因此,我想使用apt-get remove python-oauthlib在apt中卸载oauthlib。这不起作用,因为许多软件包依赖oauthlib通过一系列其他依赖项,包括software-center和其他我不想卸载的软件包。因此,我使用dpkg -r --force-depends删除了该包。这确实允许我在pip中成功安装oauthlibpython-twitter,但由于缺少依赖项,它使apt无法使用。为了解决这个问题,我现在正在尝试安装虚拟包。

1 个答案:

答案 0 :(得分:1)

Provides字段现在可能带有版本号:

 Provides: gnome-shell-extensions (= 3.14.2-1)

这是自dpkg 1.17.11以来支持的,所以自从Debian 8(Jessie)。

从这里回答:https://unix.stackexchange.com/questions/333603/debian-control-file-provides-does-not-satisfy-dependency