Python 安装debian/control文件的依赖项

Python 安装debian/control文件的依赖项,python,linux,debian,Python,Linux,Debian,我正在将构建系统中使用的Ruby文件移植到Python。该文件在存储库中的debian/control文件中查找dependens行,检查每个依赖项,并apt get installs所有未安装的内容。我正在尝试复制这个功能 作为将其移植到Python的一部分,我查看了deb_pkg_tools模块。我pip-install编辑了它并创建了一个简单的脚本,install-dep2.py #!/usr/bin/python import deb_pkg_tools controlDict = d

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

作为将其移植到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
文件?如果有更好的方法,我不需要使用
deb\u pkg\u工具。

问题不在于Python认为
debian/control
不存在,而在于它看起来像
deb\u pkg\u工具。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]
为我们提供“值”

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

joseph@crunchbang:~$ python test.py 

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

在回答您的问题时,我发现和是非常有用的资源。

您可能需要查看
mk build deps
(来自
devscripts
包),这是一个已经实现了您想要实现的功能的标准脚本

$ mk-build-deps -i -s sudo

python debian包的问题在于似乎没有任何文档(除了非常不完整的docstring)。如果有人知道它在哪里,请在这里发表评论。
$ mk-build-deps -i -s sudo