组织一个Python应用程序

时间:2012-06-30 23:27:03

标签: python

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

假设应用程序包含一个包,并且暂时假设我不一定要将它作为distutils包(虽然我可以被劝阻。)

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

进一步假设代理以或多或少的规范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)

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

将软件包放在site-packages中的某个位置,并在PATH中有一个顶级程序,如

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

将包目录放在某处并使用

运行它
/path/to/directory/agent/main.py

(使用bumpo版本将代理目录放在某个路径中,这样您就可以运行main.py

或者是第三种,更多Pythonic和酷的方法,它允许我安装代码并将某些东西直接放入我不知道的路径中。

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

2 个答案:

答案 0 :(得分:1)

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

#!/bin/sh
exec python /usr/share/myapp/main.py "$@"

答案 1 :(得分:1)

您列出的第一个选项是通常的“Pythonic和cool”方法。您还可以使用Distribute进行管理,以便更方便地开发它。然后在完成后打包或安装。 Distribute系统可用于管理您的开发以及用作打包工具。它还为您生成启动器脚本。您在setup.py中定义了entry points,它将为您创建顶级启动器脚本。

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