Python子模块引入
背景,项目A为主项目,项目B为封装的通用逻辑(可被多个项目使用)。项目A和项目B都是独立更新的,两者互不影响只有引用关系
项目A子模块设置
设置子模块信息
创建.gitmodules文件,写入子模块信息
python
[submodule "xxxx_submodule"]
path = xxxx_submodule
url = https://github.com/xxxxx.git
设置子模块搜索路径
项目A的启动文件中增加如下代码
python
project_root_path = os.path.dirname(os.path.abspath(__file__)) # 根据具体文件定位项目A根目录
directory_path = os.path.join(project_root_path, 'xxxx_submodule') # 获取子模块代码目录
if directory_path not in sys.path:
sys.path.insert(0, directory_path)
直接引用import子模块文件
例如文件目录如下
project/
│
│ ├──function/
│ ├── __init__.py
│ └── function.py
│ │
│ └──xxxx_submodule/
│ │
│ ├── submodule1/
│ │ ├── __init__.py
│ │ └── module1.py
│ │
│ └── submodule2/
│ ├── __init__.py
│ └── module2.py
│
└── main.py
function.py文件可以直接引用submodule1、submodule2(编辑器静态代码检测可能会报错无引用,实际执行可以引用)
import submodule1
import submodule2
子模块的更新
新下载主工程,需要使用如下命令,下载主工程同时会自动下载子模块
git clone --recurse-submodules <repository_url>
子模块作为主工程的submodule,下载更新主工程代码不会主动更新子模块,需要通过执行
git submodule update --init --recursive
更新最新子模块工程代码。如果以上命令无法更新到最新代码,尝试以下命令
cd UIAIdriver_submodule
git status #确保在master分支
git checkout master #不在master分支要切换到master分支
git pull #更新最新代码