安装debian / control文件的依赖项

时间:2015-07-14 14:58:19

标签: python linux debian

我正在将构建系统中使用的Ruby文件移植到Python。该文件在我们的存储库中的Depends文件中查找debian/control行,检查每个依赖项,并apt-get install未安装的所有内容。我正在尝试重现此功能。

作为将其移植到Python的一部分,我查看了deb_pkg_tools模块。我pip install编辑了它并创建了一个简单的脚本install-dep2.py

#!/usr/bin/python
import deb_pkg_tools

controlDict = deb_pkg_tools.control.load_control_file('debian/control')

但是,当我运行此脚本时,我收到以下错误:

$ build/bin/install-dep2.py
Traceback (most recent call last):
  File "build/bin/install-dep2.py", line 4, in <module>
    controlDict = deb_pkg_tools.control.load_control_file('debian/control')
AttributeError: 'module' object has no attribute 'control'

debian/control文件存在:

$ ls -l debian/control
-rw-rw-r-- 1 stephen stephen 2532 Jul 13 14:28 debian/control

如何处理此debian/control文件?如果有更好的方法,我不需要使用deb_pkg_tools

2 个答案:

答案 0 :(得分:2)

你遇到的问题不是Python认为debian/control不存在,而是看起来deb_pkg_tools.control似乎不存在。

如果我是你,我会使用Debian的python-debian包来解析控制文件。下面是解析控制文件以获取依赖关系的代码。它甚至可以用于具有多个二进制包的包。

import deb822

for paragraph in deb822.Deb822.iter_paragraphs(open('debian/control')):
    for item in paragraph.items():
        if item[0] == 'Depends':
            print item[1]

上面示例中的每个项目都是将“键”与“值”对齐的元组,因此item[0]为我们提供了“键”,item[1]为我们提供了“值”。< / p>

显然,上面的示例只是打印出控制文件中的依赖项,因此依赖项的格式不适合直接插入apt-get install。此外,通过解析控制文件,除了实际的包名之外,我还有${python:Depends}之类的东西,所以这是你必须考虑的事情。以下是我从上例中得到的输出示例:

joseph@crunchbang:~$ python test.py 

 bittornado,
 ${python:Depends},
 python-psutil,
 python-qt4,
 python-qt4reactor,
 python-twisted,
 xdg-utils,
 ${misc:Depends},
 ${shlibs:Depends}

我在回答您的问题时发现this bug reportpython-debian source code是非常有用的资源。

答案 1 :(得分:2)

您可能希望查看mk-build-deps(来自devscripts包),这是一个已经完成您想要实现的标准脚本。

$ mk-build-deps -i -s sudo