我有一个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和酷的方法,它允许我安装代码并将某些东西直接放入我不知道的路径中。
谷歌搜索没有多大帮助,我怀疑这是“太愚蠢无法回答”问题之一。不幸的是,我太傻了,不知道。
答案 0 :(得分:1)
“将包目录放在某个地方”就是其中的大部分内容。剩下的就是编写一个shell脚本,在python解释器上使用exec
和main.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安装程序。