我有一个Python应用程序,我有一个关于打包的问题,这个问题实际上不是distutils的问题,而是一个如何组织和设置应用程序以便从命令行轻松使用的问题。
假设应用程序包含一个包,并且暂时假设我不一定想让它成为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- package中的某个位置,并在路径中放置一个顶级程序,如下所示
#!/usr/bin/env python
from agent import main
main(sys.argv)
将包目录放在某个位置并使用以下命令运行它
/path/to/directory/agent/main.py
( bumpo版本是将代理目录放在某个路径中,这样您就可以运行main.py
)
或者是第三种,更有Pythonic风格和更酷的方法,它允许我安装代码,并将一些我不知道的东西直接放到路径中。
谷歌搜索并没有多大帮助,我怀疑这是那些“太愚蠢而无法回答”的问题之一。不幸的是,我太傻了,不知道这一点。
发布于 2012-07-01 01:06:10
“将包目录放在某个地方”是最重要的。剩下的工作就是通过main.py
脚本在python解释器上编写一个使用exec
的shell脚本。
#!/bin/sh
exec python /usr/share/myapp/main.py "$@"
发布于 2012-07-01 02:26:12
您列出的第一个选项是通常的"Pythonic and cool“方法。您还可以使用Distribute对其进行管理,以便更方便地进行开发。完成后打包或安装。分布式系统可用于管理您的开发,也可用作打包工具。它还会为您生成启动器脚本。您可以在setup.py
中定义entry points,它将为您创建顶级启动器脚本。
在开发时,您可以设置Development Mode来设置Python环境,以便在您的工作区中查找您的包。因此,任何更改在下次运行时都会立即可见。然后,在开发它之后,您可以将其打包为一个鸡蛋,甚至可以从相同的源代码构建一个RPM或Windows安装程序。
https://stackoverflow.com/questions/11278449
复制相似问题