4

Autonomyデータベースからの統計を報告するMuninプラグインがいくつかあります。それらはすべて、関連する番号のXMLステータス出力をスクレイプする小さなライブラリを使用します。

ライブラリとプラグインをPuppetでインストール可能なRPMにバンドルしようとしています。実際のRPM構築は簡単である必要があります。生成されたdistutilsdistfileを取得したら、DagまたはEPELリポジトリからピンチされた.specファイルに基づいてRPMにすることができます[1]。それはdistutils私が確信していないビットです-実際、私のライブラリがパッケージング用に正しく記述されているかどうかさえわかりません。仕組みは次のとおりです。

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

プラグインコード:

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

idol7stats.pyを/usr/lib/python2.4/site-packages/idol7stats、またはPythonの検索パスにある他の何かに終わらせたいと思います。どんなdistutils魔法が必要ですか?これ:

from distutils.core import setup

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

コードがサブディレクトリではなく、に入る以外は、ほとんど機能します/usr/lib/python2.4/site-packages/idol7stats.py。これは、Pythonのモジュール/パッケージ/その他のコンテナーの違いを理解していないことが原因だと思います。

それで、摩擦は何ですか?

[1]ええ、/usr/lib/python2.4/site-packagesRPMを使用してライブラリを操作することもできますが、Pythonコードをパッケージ化する方法を知りたいです。

4

1 に答える 1

2

必要なことを行うには、パッケージを作成する必要があります。idol7statsという名前のファイルと__init__.py、パッケージ化するその他のライブラリ モジュールを含むディレクトリが必要です。また、これはスクリプトのインポートにも影響します。idol7stats.pyというパッケージを入れる場合idol7stats、スクリプトは " import idol7stats.idol7stats" にする必要があります。

これを避けるには、名前を に変更idol7stats.pyするidol7stats/__init__.pyか、この行を に挿入idol7stats/__init__.pyして、インポートを期待どおりに「マッサージ」することができます。

from idol7stats.idol7stats import *
于 2008-11-28T17:30:40.620 に答える