python - 使用多个 Python 应用程序构建存储库

标签 python structure pythonpath

导入共享相同代码资源的应用程序的最佳实践是什么?

<小时/>

假设我有一个自动股票交易程序,其中包含两个独立运行的服务(不同的机器)。 这两项服务是:

  • collection_service - 每分钟收集股票价格并将其存储到 SQL 数据库
  • decision_making - 每十分钟(根据收集的数据)做出是否购买股票的决定。

怀着维护SSOT的愿望它们都使用相同的 SQL 表模型(例如 SQLalchemy 模型),但是它们各自具有不同的依赖关系。 我补充说,他们都使用我公司在不同项目中编写的代码。

我的存储库如下所示:

─my_companies_repo
    ├───auto_trader
    │   ├───collection
    │   │       main_collection.py
    │   │       requirements.txt
    │   │
    │   ├───db_manage
    │   │       sql_models.py
    │   │
    │   └───decision_making
    │           main_decision.py
    │           requirements.txt
    │
    └───common

导入语句会是什么样子,我应该在运行应用程序时传递多个 PYTHONPATH 还是只有一个根目录?

例如:

main_decision.py

from auto_trader.db_manage.sql_models
# or pass two PYTHONPATH's (one for common and one for auto_trader) and do this:
from db_manage.sql_models

最佳答案

保持简单:尽可能使用绝对导入,即使不是到处使用。

要正确执行此操作,您需要弄清楚您的顶级包(和模块)是什么。两种情况:

  • 正确打包并安装项目,在这种情况下,您可以从站点包导入;
  • 或者您不安装项目并从当前工作目录导入。

看起来您处于第二种情况,并且您希望您的顶级软件包是auto_tradercommon。因此,您的导入如下所示:

from auto_trader.db_manage import sql_models
from common import foo

然后确保当前工作目录是my_companies_repo,然后像这样调用您的主模块:

python3 -m auto_trader.collection.main_collection
python3 -m auto_trader.decision_making.main_decision

最后,切勿修改 PYTHONPATH 环境变量。如果您觉得有必要,那么您很可能应该花一些时间将 Python 代码正确打包到可安装项目中,并使用 pip 将其安装在站点包中>.

关于python - 使用多个 Python 应用程序构建存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59766506/

相关文章:

python - 如何在现有对象上显式加载关系?

python - 写入 COIN-OR CBC 日志文件

python - 如何使用groupby方法组合多个(使用切片?)列或行?

mysql - tt_content 中图像的 TYPO3 数据库关系

python --path=/path/to/my/module/?

python - 为尝试安装 OpenCV 的 Mac 编辑 bash_profile 后 Python 路径不正确

python - Azure函数不执行其他Python函数

c - 在两个文件之间共享全局结构(C 语言)

c - 到达迷宫中任意一点的最短路径

Cygwin 相当于 Linux/dev/sda、/dev/sdb 等