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

Python是否支持嵌入相对路径内容 有无Rust include宏等效方案

Python实现文件内容嵌入的等效方案

Python 没有内置和 Rust include_str!、include_bytes! 完全对等的编译期宏语法,但可以通过简单的构建期预处理,实现完全一致的效果:资源内容直接写入程序常量,运行时无需访问文件系统、无额外IO开销。

  • 原理说明
    Rust的文件嵌入宏本质是编译阶段读取目标文件,将内容直接写入二进制文件的常量段,程序运行时直接从内存读取常量即可。Python作为解释型语言没有内置的编译期宏展开流程,只需要在代码运行、打包前增加一步预处理,把目标文件内容转成Python原生的字符串、bytes字面量写入代码文件,就能达到完全相同的效果。

  • 零依赖实现方式
    写一个简单的预处理脚本,每次运行、打包程序前先执行,自动生成存储嵌入资源的Python模块:

# build_embed.py 预处理脚本
from pathlib import Path

# 读取目标资源文件
text_content = Path("./data.txt").read_text(encoding="utf-8")
bin_content = Path("./data.bin").read_bytes()

# 生成资源模块代码
embed_module_code = f'''
# 自动生成的嵌入资源模块,请勿手动编辑
SOME_TEXT = {repr(text_content)}
SOME_BYTES = {repr(bin_content)}
'''

Path("./embedded.py").write_text(embed_module_code, encoding="utf-8")

业务代码直接导入生成模块里的常量即可使用:

from embedded import SOME_TEXT, SOME_BYTES

# 直接使用,无运行时文件读取操作
print(len(SOME_TEXT), len(SOME_BYTES))

这种方案和Rust宏的最终效果完全一致:分发程序时不需要附带原始的data.txt、data.bin文件,运行时不会触发文件系统访问,资源内容直接作为Python常量加载。

  • 轻量替代方案
    如果不需要严格的零运行时IO,只是想规避相对路径问题、保证打包后资源可正常读取,可以使用Python标准库的importlib.resources模块读取包内绑定的资源。注意这种方式本质是运行时从包归档中读取文件内容,不属于硬嵌入,和Rust宏的实现逻辑存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:51:21