python github/项目组织

python github/项目组织,python,github,python-import,Python,Github,Python Import,我一直在考虑我的项目组织,想与大家分享我的想法,看看是否有更好的建议。 我最初将它划分为数据库逻辑、“业务”逻辑和web界面的包 通过这样做,我面临着需要从同级数据库包导入业务包的问题,这带来了查找同级包的问题。我将举例说明它的外观: business/ | |-config/ | |_config1.yaml | |_config2.yaml | |-common/ | |_decorators.py | |_environment.py | |_logger.

我一直在考虑我的项目组织,想与大家分享我的想法,看看是否有更好的建议。 我最初将它划分为数据库逻辑、“业务”逻辑和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/   
因此,为了能够从business中找到数据库包,我有一个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回购协议,以独立完成这些项目。数据库和业务包无关,它提供的只是对db引擎和模型实体的访问、连接和查询

我想我可以把environment.py逻辑移到business/init.py。如果这有助于我跳过对每个脚本的导入调用

另一个选择是只有一个回购协议,以及其中的所有内容,因此没有兄弟协议问题。但在不久的将来,这可能成为一个巨大的回购协议,因为代码库正在增长


提前感谢您的任何建议或想法

>“这可能在不久的将来成为一个巨大的回购”有多大?那又怎样?相比之下,Linux(内核代码)git repo包含超过1600万行代码,这不是问题。除非你是一个数量级以上的代码,否则你是在过早地优化。我在某个地方读到,它可能会变慢,但你说得很好。不管怎样,我仍然喜欢有不同的项目,可以相互独立的想法。我最关心的是路径和导入问题的解决方案。而且,如果有单独的回购协议组成一个大项目的想法是好的,或者不是那么普遍/理想。谢谢你分享你的想法!