Python项目部署设计
这是一个情况:我现在工作的公司让我可以自由选择用Java或Python来开发应用程序。公司主要是用Java的经验。
我决定用Python,所以他们很高兴让我负责维护所有与数据库维护相关的Python项目和脚本。
处理这些事情并不算太糟糕,看到我比Java程序员有更多的空闲时间,感觉还挺有趣的。不过,有一个问题,项目的结构很乱。
公司里有很多脚本,分散在各个虚拟机上。有些脚本的功能很复杂,分布在几个模块里(最多4个)。
在考虑这些问题的时候,我意识到我不知道该怎么处理,所以我有三个问题。
- 我该把独立的脚本放在哪里?我们用git作为版本控制系统。
- 如何组织项目的结构,让用户不需要深入文件夹就能运行程序(在Java中,我创建了一个jar文件或一个jar和一个shell脚本来处理一些启动操作)?
- 创建模块的标准方式是什么,以便于重复使用(比如mycompany.myapp.mymodule?)
2 个回答
一个包是用来创建模块层次结构的一种方式:如果你在一个文件夹里创建一个叫做 __init__.py
的文件,Python就会把这个文件夹当作一个包,这样你就可以通过点号导入来引入它里面的内容。
spam \
__init__.py
ham.py
eggs.py
import spam.ham
包里面的模块可以相互引用——具体可以查看文档。
如果这些都是数据库维护的脚本,我会创建一个叫做 DB 的包,把它们都放在里面。对于更复杂的脚本,你还可以创建子包。所以如果你有一个脚本是用来清理交易日志的,你可以把它放在 ourDB.clean
里,然后这样做:
import ourDB.clean
ourDB.clean.transaction_logs( )
我该把独立的脚本放在哪里?
你可以根据脚本的功能来组织它们,也就是根据它们的用途和人们使用它们的原因。
使用的编程语言(比如Python或Java)并不重要。
你需要把脚本看作是针对某个需求的小应用程序,并为这个应用程序创建合适的文件夹结构。
我们通常会使用 /opt/thisapp
和 /opt/thatapp
。如果你想要一个共享的挂载点,可能会使用不同的路径。
如何组织项目的布局,让用户不需要深入文件夹就能运行程序?
同样是根据功能来组织,也就是根据它们的用途和人们使用它们的原因。在 /opt/thisapp
目录的最上层,你可能会有一个 __init__.py
文件(因为这是一个包),还有一个 main.py
脚本,用来启动实际的工作。
在Python 2.7和Python 3中,你可以使用 runpy
模块。这样你可以把顶层的主脚本命名为 __main__.py
。
http://docs.python.org/library/runpy.html#module-runpy
创建模块的标准方法是什么,以便于重用(比如mycompany.myapp.mymodule)?
可以了解一下 packages
。http://docs.python.org/tutorial/modules.html#packages