質問

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

ライブラリとプラグインをPuppetでインストール可能なRPMにバンドルしようとしています。実際のRPM構築は簡単です。 distutils で生成されたdistfileを取得したら、DagまたはEPELリポジトリ[1]からピンチされた.specファイルに基づいてRPMにすることができます。私が確信していない 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]ええ、RPMを使用して /usr/lib/python2.4/site-packages のライブラリを突っ込むだけでいいのですが、Pythonコードをパッケージ化する方法を知りたいです。

役に立ちましたか?

解決

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

これを回避するには、 idol7stats.py の名前を idol7stats / __ init __。py に変更するか、この行を idol7stats / __ init__.pyに追加します。 から" massage"へ期待どおりの方法でインポート:

from idol7stats.idol7stats import *
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top