2016-04-22 20 views
2

我尝试创建一个虚拟软件包equivs,它为apt提供python-oauthlib软件包。问题是大多数依赖性问题都解决了,除了一个包含版本要求的包。我的问题是:如何在Provides字段中指定版本号?equivs虚拟软件包版本号语法

我做了以下内容:

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)但没有任何工作。相反,所有原始未满足的依赖关系都会返回,并从apt开始增加W: Ignoring Provides line with DepCompareOp for package python-oauthlib

我知道虚拟包本身的版本号是不相关的,我只是选择了相同的数字来说明它是提供此版本的虚拟机。

背景:python-oauthlib-0.6.1在某个点被安装了apt。我想用pip安装python-twitter。这需要OAuthlib 1.0.3。 Pip无法升级oauthlib,因为它“由操作系统所拥有”。因此我想在apt中使用apt-get remove python-oauthlib来卸载oauthlib。这是行不通的,因为许多软件包依赖于oauthlib通过其他依赖关系链,包括software-center和其他我不想卸载的依赖项。因此,我使用dpkg -r --force-depends删除了该软件包。这确实使我能够成功地将oauthlibpython-twitter安装在pip中,但由于缺少依赖关系,它使apt不可用。为了解决这个问题,我正在尝试安装虚拟包。

+0

按照https://www.debian.org/doc/debian-policy/ch-controlfields.html的'Provides'场不携带一个版本号。这就是说,我有同样的问题... – Jan

回答