Frage

Ich habe ein paar Munin Plugins, die Statistiken von einer Autonomie Datenbank melden. Sie alle nutzen eine kleine Bibliothek, die den XML-Statusausgang für die relevanten Zahlen schabt.

Ich versuche, die Bibliothek und Plugins in einem Puppen installierbare RPM zu bündeln. Die tatsächlichen RPM-Gebäude sollten einfach sein; sobald ich einen distutils produzierte distfile habe, kann ich es in ein RPM auf einer .spec Datei aus dem Dag oder EPEL repos gekniffen basierend machen [1]. Es ist die distutils Bit Ich bin nicht sicher - in der Tat Ich bin nicht einmal sicher, dass meine Bibliothek richtig für die Verpackung geschrieben wird. Hier ist, wie es funktioniert:

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']

Plugin-Code:

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

Ich glaube, ich möchte idol7stats.py in /usr/lib/python2.4/site-packages/idol7stats aufzuwickeln oder sonst etwas in Python-Suchpfad. Welche distutils Magie brauche ich? Dies:

from distutils.core import setup

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

fast funktioniert, mit Ausnahme der Code in /usr/lib/python2.4/site-packages/idol7stats.py geht, nicht ein Unterverzeichnis. Ich erwarte, dass dies bis zu meinem nicht verstehen den Unterschied zwischen den Modulen / packages / anderen Behältern in Python.

Also, was ist der Haken?

[1] Ja, ich konnte einfach die Bibliothek in /usr/lib/python2.4/site-packages mit RPM plonk, aber ich möchte wissen, wie Python-Code zu verpacken.

War es hilfreich?

Lösung

Sie benötigen ein Paket zu erstellen, um zu tun, was Sie wollen. Sie würden ein Verzeichnis namens idol7stats brauchen eine Datei namens __init__.py und alle anderen Bibliotheksmodule enthalten, zu verpacken. Auch wird dies Ihre Skripte Einfuhren beeinflussen; wenn Sie idol7stats.py in einem Paket namens idol7stats setzen, dann Ihre Skripte müssen „import idol7stats.idol7stats“.

Um das zu vermeiden, könnten Sie einfach idol7stats.py umbenennen idol7stats/__init__.py, oder Sie können diese Zeile in idol7stats/__init__.py setzen zu „Massage“ die Einfuhren in die Art und Weise man sie erwarten:

from idol7stats.idol7stats import *
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top