使用apt_pkg在程序中安装Debian软件包时出现错误。

10

我已经构建了一些Debian软件包并将它们放在我的主机上。我想在Python脚本中安装这些软件包。因此,我使用apt_pkg编写了以下安装函数:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import apt 
import apt_pkg
import sys

class my_pkg_manager:

    def __init__(self):

        apt_pkg.init()
        self.cache = apt_pkg.Cache()
        self.sources = apt_pkg.SourceList()
        self.pkg_records = apt_pkg.PackageRecords(self.cache)
        self.depcache = apt_pkg.DepCache(self.cache)
        self.pkg_manager = apt_pkg.PackageManager(self.depcache)
        self.fetcher = apt_pkg.Acquire()


    def find_my_package(self):

        for pkg in self.cache.packages:
            if len(pkg.version_list)>0:
                package_site = pkg.version_list[0].file_list[0][0].site
                if package_site == 'my_host_address.com':
            if pkg.name == 'my_pkg_name':
            return pkg
        return None


    def install_package(self, pkg):

        self.depcache.mark_install(pkg)
        self.sources.read_main_list()
        self.pkg_manager.get_archives(self.fetcher, self.sources,
                                      self.pkg_records)
        log_file = open('install_log','w')
        res = self.pkg_manager.do_install(log_file.fileno())

        if res == self.pkg_manager.RESULT_COMPLETED:
            print('result completed!')
        elif res == self.pkg_manager.RESULT_INCOMPLETE:
            print('result incomplete!')
        else:
            print('result failed!')


    def run(self):
        my_pkg = self.find_my_package()
        if my_pkg != None:
            self.install_package(my_pkg)
        else:
            print('Can't find package!') 


if __name__ == '__main__':

    my_package_manager =  my_pkg_manager()
    my_package_manager.run()

如果我使用apt-get install,软件包将无任何问题地安装,但是使用此脚本会出现以下错误:
res = self.pkg_manager.do_install(log_file.fileno()) apt_pkg.Error: E:Internal Error, Pathname to install is not absolute 'myPackage_1.0.0_all.deb'
我已经将.deb文件和Packages.gz放在名为“debian”的目录中,并将以下行添加到我的sources.list中:
deb http://my_host_address.com debian/
我不知道我的脚本有什么问题?

你使用的apt和Python版本是什么? - Ghasem Naddaf
据我所记,您的URL中缺少尾随的/,这可能是sources.list中添加问题的原因。 - ares777
你能发布一下你的主机URL吗?这样我们就可以自己尝试找出问题在哪里了。 - Brent Thierens
@GhasemNaddaf 我使用过1.6和最新的开发版本。 - payman
@user3344236 我已经添加了那个“/”,但没有任何变化。 - payman
1个回答

5

我尝试了你的解决方案,但对我无效。 - payman
@payman 抱歉,可以看看这个链接吗?(https://askubuntu.com/questions/458748/is-it-possible-to-add-a-location-folder-on-my-hard-disk-to-sources-list)看起来你编辑了sources.list的内容,或者我有什么误解。 - Jack Strosahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接