You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单仓库下两个Python应用共享模型的导入问题求助

解决单仓库多Python应用共享代码的导入问题

1. 规范目录结构

先把仓库结构调整为Python包识别的标准格式,必须给shared目录添加__init__.py(空文件即可),示例结构如下:

your-repo/
├── api/
│   ├── main.py       # REST API入口文件
│   └── requirements.txt
├── worker/
│   ├── worker.py     # Worker入口文件
│   └── requirements.txt
├── shared/
│   ├── __init__.py
│   ├── models.py     # 包含ProvisioningRequest模型
│   └── utils.py      # 共享工具函数
└── setup.py          # 包配置文件

2. 编写setup.py配置

在仓库根目录创建setup.py,将shared注册为可安装的Python包:

from setuptools import setup, find_packages

setup(
    name="shared",
    version="0.1.0",
    packages=find_packages(),
    include_package_data=True,
)

3. 本地运行配置

本地开发时,用可编辑安装模式把shared包安装到Python环境,修改共享代码后无需重新安装即可生效:

  • 打开终端进入仓库根目录
  • 执行命令:pip install -e .
    之后在api/main.py或worker/worker.py里直接写:
from shared.models import ProvisioningRequest

即可正常导入,不会再触发相对导入错误。

4. Docker/ECR部署配置

每个应用的Dockerfile中,先安装shared包,再安装自身依赖:

API的Dockerfile示例(api/Dockerfile):

FROM python:3.11-slim

WORKDIR /app

# 复制根目录的setup.py和shared目录到容器
COPY ../setup.py .
COPY ../shared ./shared

# 安装shared包
RUN pip install .

# 复制API代码和依赖文件
COPY . .
RUN pip install -r requirements.txt

# 启动API服务
CMD ["python", "main.py"]

Worker的Dockerfile示例(worker/Dockerfile):

FROM python:3.11-slim

WORKDIR /app

COPY ../setup.py .
COPY ../shared ./shared

RUN pip install .

COPY . .
RUN pip install -r requirements.txt

# 启动Worker进程
CMD ["python", "worker.py"]

构建镜像时,必须从仓库根目录执行命令,比如构建API镜像:docker build -t api-image -f api/Dockerfile .,确保setup.py和shared目录能被正确复制。

5. 常见问题排查

  • 检查Python环境:执行pip list确认shared包已安装
  • 确认shared/__init__.py存在,无此文件Python无法识别该目录为包
  • 不要手动修改sys.path,这种方式易导致环境不一致,优先用setup.py的标准化方案

内容的提问来源于stack exchange,提问作者ajrice6713

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:07:18