少女祈祷中...

Python跨模块依赖处理

总会有些特殊原因导致我们的项目需要跨模块依赖,就拿我这次的项目结构来说

1
2
3
4
5
6
- pyproject
- app #后端模块
- batch #大数据、批处理模块
- script #脚本
- test #测试
- ……

在项目编写的过程中,app与batch需要频繁地使用某些自定义的算法或程序,且这类算法或程序高度重复,我这里倾向于再写一个模块封装这类算法。
但这样处理,会导致在app或batch内import包时,需要使用sys.path.append(“..”)这样的方法导包。不利于解耦。
我更倾向于类似maven的处理方式,将子模块打包成jar包跨模块引用。
万幸的是,python虽然可以用setuptools+pip将项目打包,虽然没有maven那样的toml文件处理依赖,但requirements.txt这种写法也能大致满足需求,自动构建的部分,写个build脚本也能接受。
这里说下具体做法:

python包构建

1.pip安装setuptools

1
pip install setuptools

2.在通用模块的根目录下新建setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# setup.py

import os

from setuptools import setup, find_packages,find_namespace_packages



setup(

    name='traj_module',

    version='0.2',
    # pacakges也可以使用find_packages,find_namespace_packages自动查找,不用像我下面代码一样写死

    packages=[

    'traj_module',

    'traj_module.entity',

    'traj_module.utils',

    ],

    package_dir={

        'traj_module': 'traj_module',

        'traj_module.entity': 'traj_module/entity',

        'traj_module.utils': 'traj_module/utils',

    },

    author_email='',

    description='Common utils for Py Trajectory project',

    long_description=

    'Common utils used across multiple applications in Py Trajectory project.',

)

3.pip打包

1
2
cd ${子模块根目录}
pip3 install .