使用Conan 1.55.0执行export-pkg遇FileNotFoundError,文件未同步至缓存求助
环境与操作信息
- Conan版本:1.55.0
- 执行命令:
conan export-pkg -f <conan_file_path.py> <artifactory recipe> - Conan包定义文件(conan.py)中
package方法代码:
self.copy('*', src=f'{path(os.getcwd()).parent.parent}', dst='CommonTracker', excludes='.gitkeep', ignore_case=True)
问题现象
近期执行打包时触发FileNotFoundError,提示Conan缓存中缺少项目已存在的HTML文件;尝试在excludes参数添加*.html无效;更换机器后报错变为缺少某个cpp文件,此前代码一直正常运行。
排查建议
修复工作目录依赖的路径问题
你当前用os.getcwd().parent.parent作为src路径,完全依赖执行conan export-pkg时的工作目录,一旦执行位置变化(比如脚本调用、终端路径切换),路径就会指向错误目录。改用Conan提供的固定路径变量,比如文件在源码目录就用self.source_folder,在构建目录就用self.build_folder,彻底消除工作目录依赖。检查文件权限与锁定状态
确认缺失的HTML、cpp文件是否存在权限问题(比如当前用户无读取权限、文件设为只读),或者被其他进程锁定,导致Conan无法复制到缓存。清理Conan缓存重试
执行conan cache clean清空缓存,再重新运行export-pkg命令,排除缓存损坏、旧文件残留冲突的可能。验证通配符匹配逻辑
检查ignore_case=True在当前操作系统下的生效情况,部分大小写敏感的系统中,通配符*可能无法匹配到目标文件。可以尝试明确指定文件类型(比如self.copy('*.html', ...))进行测试,确认是否是通配符匹配的问题。排查文件忽略规则
检查项目根目录的.gitignore文件,以及Conan全局忽略配置,确认缺失的文件是否被规则排除,导致Conan扫描时无法识别这些文件。核对环境与目录结构变更
确认近期是否有系统环境(Python版本、操作系统更新)或项目目录结构的改动,这些变化可能影响os.getcwd()的返回值或文件扫描逻辑,对比稳定环境的目录结构差异。
内容的提问来源于stack exchange,提问作者R.K

