跳转到内容
QGIS
Troubleshooting

QGIS Flatpak 中 No module named pip 和 Read-only file system 错误的解决方法

QGIS Flatpak 中 No module named pip 和 Read-only file system 错误的解决方法

通过 Flatpak 使用带有 --devel 的 pip,并通过 --user 安装:flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user。如果 pip 本身缺失,请先使用 flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user 创建它。

/usr/bin/python3: No module named pip

bwrap: execvp pip3: No such file or directory

ERROR: Could not install packages due to an EnvironmentError:
[Errno 30] Read-only file system: '/usr/lib/python3.11/site-packages/urllib3-1.25.9.dist-info'

error: runtime/org.kde.Sdk/x86_64/5.15-22.08 not installed

适用于任何 Linux 发行版上的 Flathub QGIS 软件包 org.qgis.qgis

问题原因

Flatpak 自带独立的 Python,与发行版安装的 Python 分开,因此你使用系统 pip 或 apt 添加的软件包对 QGIS 不可见。在沙箱内,/usr 以只读方式挂载,这就是出现 [Errno 30] 的原因:普通的 pip install 会尝试写入该目录,但会被拒绝。--user 会将文件发送到可写目录。

Pip 位于 SDK 中,而不是 QGIS 通常启动时使用的 runtime 中。不使用 --devel 时,没有可运行的 pip3,这就是出现 bwrap: execvp 的原因。同时,--devel 要求你的计算机上安装匹配的 SDK,这就是最后一行错误信息的含义。

解决方法

安装与 QGIS Flatpak 匹配的 SDK

flatpak info org.qgis.qgis 中读取 Sdk 行,然后安装对应的分支,例如 flatpak install flathub org.kde.Sdk//6.7。错误信息中的分支就是你需要安装的分支。

确认 pip 存在

flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user

安装软件包

flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user

scipy 替换为你的 plugin 所需的软件包。保留两个标志:--devel 用于访问 pip,--user 用于将文件写入沙箱允许的位置。

检查 QGIS 是否能找到它

重启 QGIS,打开 Plugins,然后打开 Python Console,并导入该模块。如果能在那里导入,plugin 也能找到它。

如果问题仍未解决

  • 查找文件实际安装到了哪里:flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())"。将其与 QGIS Python Console 中的 sys.path 进行比较。如果该目录不存在,安装在那里的内容永远都无法导入。
  • 需要编译 C 扩展的软件包仍可能失败。SDK 有编译器,但并不包含所有开发头文件,而且你无法从沙箱外部添加它们。查找同一软件包的 wheel 构建版本。
  • 在 Debian 和 Ubuntu 上,请从官方 QGIS 软件源安装 QGIS,而不是使用 Flathub。这样 QGIS 会使用系统 Python,plugin 依赖可以通过普通的 pip 安装。