LINUX.ORG.RU

Yum api python 2.7 получить список пакетов из групп листов.

 , , ,


1

1

Задача получить список пакетов входящих в опеределённую группу из определённого репозитория. Делаю это всё на 2.7 питоне. Код:

import yum
yb = yum.YumBase()
yb.disablePlugins()
yb.setCacheDir()
repos = yb.repos.listEnabled()
destdir="/tmp/repo"
arch = "x86_64"
repoid="Myrepo"
baseurl="http://mirror.yandex.ru/centos/6.6/os/%s" % (arch)
imgurl="%s/images/install.img" % (baseurl)
repopath="Myrepo"
cachedir = "/tmp"     #yum.misc.getCacheDir()
yb.repos.setCacheDir(cachedir)
newrepo = yum.yumRepo.YumRepository(repoid)
newrepo.name = repopath
newrepo.baseurl = baseurl
newrepo.mirrorlist = None
newrepo.basecachedir = cachedir
newrepo.metadata_expire = 0
newrepo.timestamp_check = False
yb.repos.add(newrepo)
yb.repos.enableRepo(newrepo.id)
for name in repoid:
    yb.repos.enableRepo(name + ',')
yb.repos.doSetup()
yb.cleanRpmDB()
XM = yb.selectGroup(grpid='base')
for line in XM:
    print line

При этом базовая система установлена, соотвественно пакеты из группы тоже установлены. В качестве вывода вижу:

Загружены модули: langpacks
Warning: Group base does not have any packages to install.
Process finished with exit code 0

Если запускать из консоли как python myscript.py то в консоль сыпятся сообщения что пакет уже установлен и в конце строка с Варнингом. При этом если изменить группу к примеру на «gnome» или любое другое что не установлено, выводится список пакетов. Может кто в курсе как обратиься к объекту групп листа и получить от него все пакеты с типом mandatory и default?


Возможно, вам нужен такой код (нагуглил) :

#!/usr/bin/python
import yum
my = yum.YumBase()
my.setCacheDir()

core = my.comps.return_group('core')
for pkg in core.packages:
    print pkg

mky ★★★★★ ()
Ответ на: комментарий от mky

В таком виде работает. Но как только я пытаюсь отключить репозитории определённый.

import yum
yb = yum.YumBase()
yb.disablePlugins()
yb.setCacheDir()
for name in ('epel','fedora'):
   yb.repos.disableRepo(name + ',')
yb.cleanRpmDB()
repos = yb.repos.listEnabled()
for repo in repos:
    print repo
group = 'base'
core = yb.comps.return_group(group)
print dir(core)
for pkg in core.packages:
    print pkg
Вижу ошибку что у core нет packages
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

 line 13, in <module>
    for pkg in core.packages:
AttributeError: 'NoneType' object has no attribute 'packages'

Hravn ()
Ответ на: комментарий от Hravn

У меня ваш код работает. Может у вас дейстивтельно нет пакетов в ″Base″ с отключенными репозитариями epel и fedora. Команда

yum --disablerepo=epel --disablerepo=fedora groupinfo base
выводит список пакетов?

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.