2008-11-28 63 views
4

我有几个Munin插件可以从Autonomy数据库报告统计信息。它们都使用一个小型库,为相关数字擦除XML状态输出。打包Python库

我试图将库和插件捆绑到Puppet可安装的RPM中。实际的RPM建设应该是直截了当的;一旦我有一个distutils生产的distfile文件,我可以根据Dag或EPEL repos [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 = '[email protected]', 
    version = '0.1', 
    py_modules = ['idol7stats']) 

几乎工程,除代码放在/usr/lib/python2.4/site-packages/idol7stats.py,而不是一个子目录。我认为这是由于我不了解Python中modules/packages /其他容器的区别。

那么,这是什么问题?

[1]是的,我可以使用RPM在/usr/lib/python2.4/site-packages中找到库,但我想知道如何打包Python代码。

回答

2

您需要创建一个来做你想做的。您需要一个名为idol7stats的目录,其中包含一个名为__init__.py的文件和任何其他库模块进行打包。此外,这将影响您的脚本的导入;如果您将idol7stats.py放在名为idol7stats的包中,那么您的脚本需要“import idol7stats.idol7stats”。

为了避免这种情况,你可以只重命名idol7stats.pyidol7stats/__init__.py,或者你可以把这个行成idol7stats/__init__.py为“按摩”的进口的方式,你希望他们:

from idol7stats.idol7stats import * 
+0

啊哈!将代码放入__init__.py中,看起来完全一样。谢谢! – markdrayton 2008-11-29 08:22:58