导入共享相同代码资源的应用程序的最佳实践是什么?
<小时/>假设我有一个自动股票交易程序,其中包含两个独立运行的服务(不同的机器)。 这两项服务是:
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_trader
和common
。因此,您的导入如下所示:
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/