我一直在考虑我的项目组织,并希望分享我的想法,看看是否有更好的建议。 我最初将其分为数据库逻辑包,“业务”逻辑和Web界面。
通过这样做,我遇到了需要从兄弟数据库包导入业务包的问题,这带来了查找兄弟包的问题。我将展示它的外观示例:
business/
|
|-config/
| |_config1.yaml
| |_config2.yaml
| |-common/
| |_decorators.py
| |_environment.py
| |_logger.py
|
|-handlers/
| |_somehandler.py
| |_otherhandler.py
|
|-nlp/
| |-validators/
| | |_validator1.py
| | |_validator2.py
| |
| |-analysis/
| |_someanalyzer.py
| |_otheranalysis.py
|
|_script1.py
|_script2.py
database/
|_mongowrap.py
|_entities.py
|_mongoquery.py
webui/ (typical flask structure)
|
|-templates/
|-static/
|-css/
|-js/
|-img/
因此,为了能够从业务中找到数据库包,我有这个common / environment.py
import sys
import os
from os.path import dirname
PROJECT_ROOT = os.environ['PROJECT_PATH']
PROJECT_CONFIGS = PROJECT_ROOT + '/business/config'
PROJECT_LOGS = PROJECT_ROOT + '/business/logs'
sys.path.append(PROJECT_ROOT)
我在business / script1.py或script2.py上导入了这个东西,以便能够找到兄弟项目,这样脚本中使用的模块就可以找到它们并使用它们。
这对于使用其他模块/包的script1.py或script2.py等每个脚本/模块的开始都是必须的
#!/usr/bin/python
# -*- coding: utf-8 -*-
from common.environment import *
if not PROJECT_ROOT:
print "Error, PROJECT_PATH is not set!"
exit()
....
....
您如何看待这个?我喜欢单独项目的想法,因此单独的github repos,独立地处理它们。数据库与业务包无关,它提供的只是访问,连接,对数据库引擎和模型实体的查询。
我认为我可以将environment.py逻辑移动到业务/ init .py。如果这有助于我跳过每个脚本的导入调用。
另一个选择是只有一个repo,以及其中的所有内容,所以没有兄弟包问题。但随着代码库的增长,这可能会在不久的将来成为一个巨大的回购。
提前感谢任何建议或想法!