我尝试用equivs创建一个虚拟包,为apt提供python-oauthlib包。问题是,除了一个具有版本要求的包之外,大多数依赖项问题都得到了解决。我的问题是:如何在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),但都不起作用。取而代之的是,返回所有原始的未满足的依赖项,以及来自apt的附加W: Ignoring Provides line with DepCompareOp for package python-oauthlib。
我知道虚拟包的版本号本身并不相关,我只是选择了相同的版本号来澄清它是一个提供此版本的虚拟包。
背景:apt在某个时候安装了python-oauthlib-0.6.1。我想使用pip安装python-twitter。这需要OAuthlib 1.0.3。Pip无法升级oauthlib,因为它为操作系统所有。因此,我想在apt中使用apt-get remove python-oauthlib卸载oauthlib。这不起作用,因为许多包通过一系列其他依赖项依赖于oauthlib,包括software-center和其他我不想卸载的包。因此,我使用dpkg -r --force-depends删除了这个包。这确实允许我在pip中成功安装oauthlib和python-twitter,但由于缺少依赖项,导致apt无法使用。为了解决这个问题,我现在正在尝试安装虚拟包。
发布于 2016-12-30 17:05:46
Provides字段现在可以携带版本号:
Provides: gnome-shell-extensions (= 3.14.2-1)这是从dpkg 1.17.11开始支持的,所以从Debian 8 (Jessie)开始。
https://stackoverflow.com/questions/36796614
复制相似问题