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
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
|
import os
from setuptools import setup, find_packages,find_namespace_packages
setup(
name='traj_module',
version='0.2',
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 .
|