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 maincommand: 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
相关产品推荐
相关产品推荐

