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

Python Wheel包构建后无法读取生成的index.html文件求助

问题分析与解决步骤

核心问题

你的setup.py中package_data使用了绝对路径,导致Wheel构建时文件被复制到错误位置,运行时无法找到文件;同时代码中访问文件的方式也未匹配正确的包内路径。

具体修正步骤

1. 调整setup.py的资源配置

绝对路径会破坏Wheel的跨环境兼容性,必须改用相对于包目录的相对路径,分两种场景处理:

场景1:将docs目录移入包内

先调整文件结构,把docs放到内层my_package包目录下(带__init__.py的那个文件夹):

.
├── my_package
│   ├── my_package
│   │   ├── handlers
│   │   |   ├── docs.py
│   │   ├── __init__.py
│   │   ├── main.py
│   │   ├── docs  # 移至内层包目录
│   │   |   ├── index.html
│   ├── README.md
│   ├── setup.py
|   ├── Dockerfile
|   ├── Makefile

然后修改setup.py:

setup(
   package_data={
      # 使用相对于my_package包的相对路径
      'my_package': ['docs/index.html'],
   },
   entry_points={
        'console_scripts': (
            'my_package=my_package.main:main',
        ),
    },
)

场景2:保留docs在原位置

若不想移动docs目录,改用data_files替代package_data:

setup(
   data_files=[
      ('my_package/docs', ['my_package/docs/index.html']),
   ],
   entry_points={
        'console_scripts': (
            'my_package=my_package.main:main',
        ),
    },
)

2. 修正Dockerfile的文档构建路径

确保make build_docs生成的index.html路径与上述配置匹配:

FROM ...
ADD . /vol/app
WORKDIR /vol/app

# 对应场景1:创建内层包的docs目录
RUN mkdir -p /vol/app/my_package/my_package/docs
RUN make build_docs  # 确保此命令将index.html生成到/my_package/my_package/docs下

RUN pip install .

3. 修正代码中文件访问方式

对应场景1(包内资源)

使用Python 3.7+内置的importlib.resources模块(更安全现代):

from importlib.resources import read_binary

class DocsHandler(Handler):
    ...
    def get(self):
        data = read_binary('my_package', 'docs/index.html')
        self.write(data)

对应场景2(全局数据文件)

通过系统安装路径定位文件:

import os
import sys

class DocsHandler(Handler):
    ...
    def get(self):
        doc_path = os.path.join(sys.prefix, 'my_package/docs/index.html')
        with open(doc_path, 'rb') as f:
            data = f.read()
        self.write(data)

4. 验证构建结果

重新构建后,检查Jenkins日志,正常情况下会看到文件被复制到正确路径,比如场景1的日志应为:

copying my_package/docs/index.html -> my_package-1.99999/my_package/docs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:33