1

我有一个 Python 应用程序,我有一个关于打包的问题,​​这实际上不是一个 distutils 问题,而是一个关于如何组织和设置应用程序以便从命令行轻松使用它的问题。

假设应用程序包含一个包,并暂时假设我不一定想将其设为 distutils 包(尽管我可能会被劝阻。)

程序本身作为 SNMP 子代理,由 Net-SNMP 使用 pass_persist 运行。这对于这个问题并不是特别重要,它只是意味着整个程序是 exec'd,并读取 stdin 并在 stdout 上做出响应。

进一步假设代理以或多或少的规范 Python 方式构建

  agent
      __init__.py
      main.py
      <other modules at the same level>

main.py是一个简单的程序,比如

#!/usr/bin/env python
import sys
def main(argv):
    <initialize the environment, input output, logging and so on>
    while <not done>:
         <process an input>
    <clean up and terminate>

if __name__ == '__main__':
    main(sys.argv)

似乎只有几种方法可以组织它来运行:

将包放在站点包中的某个位置,并在 PATH 中有一个顶级程序,例如

#!/usr/bin/env python
from agent import main
main(sys.argv)

将包目录放在某处并使用运行它

/path/to/directory/agent/main.py

(凹凸版本是将代理目录放在路径中的某个位置,以便您可以运行main.py

或者第三种,更 Pythonic 和更酷的方法,让我可以安装代码并将一些我不知道的东西直接放入路径中。

谷歌搜索没有太大帮助,我怀疑这是那些“太愚蠢而无法回答”的问题之一。不幸的是,我太笨了,不知道这一点。

4

2 回答 2

1

您列出的第一个选项是执行此操作的常用“Pythonic 和酷”方法。您也可以使用Distribute来管理它,这样可以更方便地开发它。完成后打包或安装。Distribute 系统可用于管理您的开发以及用作打包工具。它还为您生成启动器脚本。您在您的中定义入口点setup.py,它将为您创建顶级启动器脚本。

开发时,您可以设置开发模式来设置 Python 环境以在工作区中查找您的包。因此,下次运行时,任何更改都会立即可见。然后,在它开发完成后,您可以将其打包为一个鸡蛋,甚至可以从同一源构建一个 RPM 或 Windows 安装程序。

于 2012-07-01T02:26:11.883 回答
1

“将包目录放在某处”是其中的大部分内容。剩下的就是编写一个exec在 python 解释器上使用的 shellmain.py脚本。

#!/bin/sh
exec python /usr/share/myapp/main.py "$@"
于 2012-07-01T01:06:10.087 回答