PyInstaller添加--paths参数仍报ModuleNotFoundError问题求助
根因说明
你遇到的导入错误核心是两点:
- PyInstaller打包时仅能自动识别显式导入的模块,
cameratraps和ai4eutils属于本地非安装的第三方脚本目录,其内部的相对导入路径无法被自动识别。 - 你之前配置的本地绝对路径、环境变量PYTHONPATH仅在开发环境生效,
--onefile模式打包后的可执行文件运行时会解压到系统临时目录,运行环境不存在你本地的目录结构,自然无法找到对应模块。
具体解决步骤
- 修改ImSep_GUI.py开头的路径配置,替换你之前写死的绝对路径,用动态相对路径添加模块搜索目录,确保打包后运行时也能正确找到依赖目录:
import sys import os # 获取当前脚本的绝对路径 current_script_path = os.path.abspath(__file__) # 定位到ImSep_files根目录 imsep_root = os.path.dirname(os.path.dirname(current_script_path)) # 优先将依赖目录加入搜索路径 sys.path.insert(0, os.path.join(imsep_root, "ai4eutils")) sys.path.insert(0, os.path.join(imsep_root, "cameratraps"))
- 调整打包执行路径和参数,不要在ImSep子目录执行打包命令,切换到ImSep_files根目录执行,同时用
--add-data参数将两个依赖目录完整打包到程序中,OSX下路径分隔符用冒号:
conda activate imsepcondaenv cd ~/Applications/ImSep_files pyinstaller --onefile --windowed \ --name='ImSep' \ --icon='ImSep/imgs/logo_small_bg.icns' \ --hidden-import detection.run_tf_detector \ --add-data "./ai4eutils:ai4eutils" \ --add-data "./cameratraps:cameratraps" \ ImSep/ImSep_GUI.py
- 打包完成后,生成的可执行文件在
ImSep_files/dist目录下,直接运行即可。
额外说明
如果不需要单文件打包,也可以去掉--onefile参数,打包后直接把ai4eutils和cameratraps文件夹放到生成的ImSep.app同目录,也能正常运行。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

