Python项目部署设计

1 投票
2 回答
617 浏览
提问于 2025-04-16 02:42

这是一个情况:我现在工作的公司让我可以自由选择用Java或Python来开发应用程序。公司主要是用Java的经验。

我决定用Python,所以他们很高兴让我负责维护所有与数据库维护相关的Python项目和脚本。

处理这些事情并不算太糟糕,看到我比Java程序员有更多的空闲时间,感觉还挺有趣的。不过,有一个问题,项目的结构很乱。

公司里有很多脚本,分散在各个虚拟机上。有些脚本的功能很复杂,分布在几个模块里(最多4个)。

在考虑这些问题的时候,我意识到我不知道该怎么处理,所以我有三个问题。

  • 我该把独立的脚本放在哪里?我们用git作为版本控制系统。
  • 如何组织项目的结构,让用户不需要深入文件夹就能运行程序(在Java中,我创建了一个jar文件或一个jar和一个shell脚本来处理一些启动操作)?
  • 创建模块的标准方式是什么,以便于重复使用(比如mycompany.myapp.mymodule?)

2 个回答

2

一个是用来创建模块层次结构的一种方式:如果你在一个文件夹里创建一个叫做 __init__.py 的文件,Python就会把这个文件夹当作一个包,这样你就可以通过点号导入来引入它里面的内容。

spam \
       __init__.py
       ham.py
       eggs.py

import spam.ham

包里面的模块可以相互引用——具体可以查看文档。

如果这些都是数据库维护的脚本,我会创建一个叫做 DB 的包,把它们都放在里面。对于更复杂的脚本,你还可以创建子包。所以如果你有一个脚本是用来清理交易日志的,你可以把它放在 ourDB.clean 里,然后这样做:

import ourDB.clean
ourDB.clean.transaction_logs( )
2

我该把独立的脚本放在哪里?

你可以根据脚本的功能来组织它们,也就是根据它们的用途和人们使用它们的原因。

使用的编程语言(比如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)?

可以了解一下 packageshttp://docs.python.org/tutorial/modules.html#packages

撰写回答