组织python项目结构和分发的正确方法

时间:2015-03-20 17:33:03

标签: python repository structure packages

我有一个Python客户端服务项目。逻辑依赖关系如下所示: logical dependencies

用语言说,我有一些服务(srv1srv2,...,srvX)和service.py中的公共代码,这些服务的一些客户端( srv1_cl.pysrv2_cl.py,...,srvX_cl.pyclient.py中的公共代码以及common.py中服务和客户的公共代码。

现在我遇到了构建我的git存储库以进行开发并将我的项目部署到用户的问题。

首先,我尝试将客户端和服务存储在单独的文件夹中。而且,对于每个服务我创建了一个文件夹,因为每个服务都可以包含很多文件。

/myrepo.git
    common.py
    /clients
        client.py
        srv1_cl.py
        srv2_cl.py
    /services
        service.py
        /srv1
            conf.py
            srv1.py
            start.bat
        /srv2
            conf.py
            srv2.py

当我存储我的文件时遇到了问题 - Python脚本如何从上层目录导出文件?因为我需要测试我的客户端脚本,进行一些更改并执行。

我找到了一些基于添加PATH上层文件夹(sys.path.insert(0, parentdir)的解决方案,但我确定这不是一个好方法)和relative imports。但对于相对导入,我必须将我的脚本包装到一个包中。

好的,我想我会这样做,但这是另一个问题。我想将“客户”与“服务”分开部署,因为我不想与我的用户共享服务代码。我该如何处理这个问题?

我项目的最佳结构是什么?当我将代码打包到包中时,如何开发和调试我的项目?因为测试我想从我的子文件夹启动客户端。

1 个答案:

答案 0 :(得分:0)

好问题。我在目录树和部署中的不同级别导入模块时遇到了类似的问题。我最终将项目树重新组织为非常平坦(所有文件都在一个目录中),只是命名文件informativeley,并且为了获得所需的功能而重新编译代码。为了部署,我将主要的pyc文件复制到子项目文件夹中。 我很想知道更好的方法。