gpt4 book ai didi

python - 打包 Python 库

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:30 25 4
gpt4 key购买 nike

我有几个 Munin 插件,它们报告来自 Autonomy 数据库的统计数据。他们都使用一个小型库来抓取相关数字的 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 代码。

最佳答案

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

为避免这种情况,您可以将 idol7stats.py 重命名为 idol7stats/__init__.py,或者您可以将此行放入 idol7stats/__init__.py 以您期望的方式“按摩”导入:

from idol7stats.idol7stats import *

关于python - 打包 Python 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com