我尝试使用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.1
,Provides: python-oauthlib-0.6-1
,Provides: python-oauthlib-0.6
,Provides: 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中成功安装oauthlib
和python-twitter
,但由于缺少依赖项,它使apt
无法使用。为了解决这个问题,我现在正在尝试安装虚拟包。
答案 0 :(得分:1)
Provides
字段现在可能带有版本号:
Provides: gnome-shell-extensions (= 3.14.2-1)
这是自dpkg 1.17.11以来支持的,所以自从Debian 8(Jessie)。