Question

J'ai quelques plugins Munin qui rapportent les statistiques d'une base de données Autonomy. Ils utilisent tous une petite bibliothèque qui récupère la sortie d’état XML pour les nombres correspondants.

J'essaie de regrouper la bibliothèque et les plug-ins dans un RPM pouvant être installé par Puppet. La construction du RPM devrait être simple. une fois que j'ai un fichier distf produit par distutils , je peux en faire un RPM basé sur un fichier .spec extrait des repo Dag ou EPEL [1]. Je ne suis pas sûr du bit distutils - en fait, je ne suis même pas sûr que ma bibliothèque est correctement écrite pour l'emballage. Voici comment cela fonctionne:

idol7stats.py:

import datetime
import os
import stat
import sys
import time
import urllib
import xml.sax

class IDOL7Stats:
  cache_dir = '/tmp'

  def __init__(self, host, port):
    self.host = host
    self.port = port

  # ...

  def collect(self):
    self.data = self.__parseXML(self.__getXML())

  def total_slots(self):
    return self.data['Service:Documents:TotalSlots']

Code du plugin:

from idol7stats import IDOL7Stats
a = IDOL7Stats('db.example.com', 23113)
a.collect()
print a.total_slots()

Je suppose que je veux que idol7stats.py se termine dans /usr/lib/python2.4/site-packages/idol7stats , ou quelque chose d'autre dans le chemin de recherche de Python. De quelle magie distutils ai-je besoin? Ceci:

from distutils.core import setup

setup(name = 'idol7stats',
  author = 'Me',
  author_email = 'me@example.com',
  version = '0.1',
  py_modules = ['idol7stats'])

fonctionne presque, sauf que le code est placé dans /usr/lib/python2.4/site-packages/idol7stats.py , pas un sous-répertoire. J'imagine que c'est parce que je ne comprends pas la différence entre les modules / packages / autres conteneurs en Python.

Alors, quel est le problème?

[1] Oui, je pourrais simplement copier la bibliothèque dans /usr/lib/python2.4/site-packages à l'aide de RPM, mais je veux savoir comment empaqueter le code Python.

Était-ce utile?

La solution

Vous devez créer un package pour faire ce que vous voulez. Vous aurez besoin d’un répertoire nommé idol7stats contenant un fichier nommé __ init __. Py et de tout autre module de bibliothèque à mettre en package. En outre, cela affectera les importations de vos scripts. Si vous insérez idol7stats.py dans un package appelé idol7stats , vos scripts doivent alors importer idol7stats.idol7stats ,

.

Pour éviter cela, vous pouvez renommer idol7stats.py en idol7stats / __ init __. py ou insérer cette ligne en idol7stats / __ init__.py. pour "masser" les importations dans la façon dont vous les attendez:

from idol7stats.idol7stats import *
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top