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

Snapcraft打包Python程序报错路径不存在,如何解决?

问题描述

我刚接触Snapcraft,在Windows机器上通过Ubuntu虚拟机编译Snap包。现有一个main.py文件,平时以python3 -m main启动,想要将其打包为Snap。当前的snap配置如下:

name: asdf
version: '4.0.0'
summary: asdf
description: |
    qweradsf - blah-etc...
grade: devel
confinement: devmode
base: core22

parts:
  py-dep:
    plugin: python
    source: .
    python-packages:
      - pyserial
      - ftputil

apps:
  asdf:
    command: usr/bin/python -m main
    environment:
      PYTHONPATH: $SNAP/usr/lib/python3/dist-packages:${SNAP}/usr/local/lib

我尝试了多种command写法:

command: usr/bin/python -m main
command: /usr/bin/python -m main
command: /bin/python -m main
(also tried the above with /usr/lib/python path)
command: python -m main
command: python3 -m main

但打包时总是报错提示第一个参数(usr、bin、python等)路径不存在,添加PYTHONPATH也无效。请问该如何正确调用这段Python代码?是否需要配置源?

解决方案
  • 修正命令路径:使用Snapcraft Python插件时,Python解释器会被打包到$SNAP/bin目录,无需指定系统级路径。正确的command写法为:
    command: bin/python3 -m main
    
    或直接写:
    command: python3 -m main
    
  • 调整PYTHONPATH:Python插件默认会将源码目录加入路径,若仍有问题,明确指定路径包含当前项目根目录($SNAP):
    environment:
      PYTHONPATH: $SNAP:$SNAP/usr/lib/python3/dist-packages
    
  • 确认源码结构:保证main.py在source: .指定的根目录下,插件会自动收集该目录下的Python文件。如果项目有setup.py或pyproject.toml,插件会更精准处理依赖与入口。
  • 清理缓存重新构建:打包前执行snapcraft clean清理旧缓存,再运行snapcraft重新构建,避免缓存导致的路径异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:40:16