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

Docker容器中Python无法读取同目录JSON文件的解决咨询

问题分析

报错的核心原因是:通过pip install .安装dataset_generator包时,默认打包规则不会将oddsgenie-firebase.json这类非Python文件纳入安装后的包目录,导致容器内/usr/local/lib/python3.11/site-packages/dataset_generator/firebase/路径下缺失该文件。

解决方案

1. 添加打包配置文件MANIFEST.in

在comp702根目录下创建MANIFEST.in文件,写入以下内容:

include dataset_generator/firebase/oddsgenie-firebase.json

该文件用于告知Python打包工具(setuptools),在打包时必须包含指定的JSON文件。

2. 配置项目打包规则

根据项目使用的配置文件类型,补充对应设置:

若使用setup.py

确保setup.py中包含include_package_data=True配置:

from setuptools import setup, find_packages

setup(
    name="dataset_generator",
    version="0.1",
    packages=find_packages(),
    include_package_data=True,  # 开启自动包含MANIFEST.in指定的文件
)

若使用pyproject.toml(现代Python项目推荐)

在pyproject.toml中添加以下配置:

[tool.setuptools]
include-package-data = true

3. 优化Docker构建(可选)

调整Dockerfile的文件复制顺序,利用Docker缓存提升构建速度:

FROM python:3.11
COPY requirements.txt .
RUN pip install -r requirements.txt
# 先复制打包相关文件,避免代码修改触发重复安装
COPY MANIFEST.in .
COPY dataset_generator/ ./dataset_generator/
COPY setup.py .  # 若用pyproject.toml则替换为该文件
RUN pip install .
# 最后复制业务代码
COPY application/ ./application/
CMD ["python3", "application/scheduler.py"]
验证逻辑

修改完成后,执行pip install .时,oddsgenie-firebase.json会被打包并同步安装到容器内的包目录中,你的代码通过os.path.dirname(os.path.abspath(__file__))获取的路径就能正确定位到该JSON文件,解决文件找不到的问题。

内容的提问来源于stack exchange,提问作者James O'Neill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:23:10