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

如何将zipapp打包的Python归档包以模块方式运行?

解决zipapp打包后相对导入失败的问题

问题场景

目录结构:

app_builder/
    __init__.py
    __main__.py
    server.py

__main__.py中使用了相对导入:

from .server import app

用zipapp打包命令:

python -m zipapp app_builder

直接运行打包后的文件时报错:

python app_builder.pyz

ImportError: attempted relative import with no known parent package

但以模块方式运行则正常:

python -m app_builder

解决方案

方法1:打包时指定模块入口(推荐)

打包时通过-m参数指定包的__main__模块作为入口,让Python以包模式加载归档内的代码,和python -m的运行逻辑完全一致:

python -m zipapp app_builder -m "app_builder.__main__"

之后直接运行python app_builder.pyz即可正常执行,相对导入不再报错。

方法2:修改__main__.py兼容两种运行方式

如果无法调整打包命令,可以修改__main__.py的导入逻辑,同时支持脚本模式和模块模式:

import sys
from pathlib import Path

if __package__ is None:
    # 作为独立脚本运行时,将当前目录加入模块搜索路径
    sys.path.insert(0, str(Path(__file__).parent))
    from server import app
else:
    # 作为包模块运行时,使用相对导入
    from .server import app

# 这里添加业务执行代码,比如启动服务
# app.run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:55:57