You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

已安装setuptools但Buildozer仍无法找到distutils模块

已安装setuptools但Buildozer仍无法找到distutils模块

我之前也碰到过一模一样的问题,Python 3.12把distutils从标准库移除后,哪怕装了setuptools,也经常会因为环境关联的问题导致Buildozer找不到它。试试下面这几个解决方案:

  • 先安装系统级的distutils包
    很多Linux发行版(比如Ubuntu)把distutils拆成了单独的系统包,哪怕你装了setuptools,系统级的依赖缺失也会导致问题。在WSL里运行这条命令:

    sudo apt-get install python3-distutils
    

    如果你用的是Python 3.11,可以针对性安装对应版本的包:

    sudo apt-get install python3.11-distutils
    
  • 确保Buildozer的虚拟环境里有完整的setuptools
    从报错路径能看到你用pipx管理Buildozer的虚拟环境,直接给这个环境升级setuptools试试:

    pipx runpip buildozer install --upgrade setuptools
    

    或者手动激活虚拟环境操作:

    source ~/.local/share/pipx/venvs/buildozer/bin/activate
    pip install --upgrade setuptools
    deactivate
    
  • 考虑降级Python版本
    Python 3.12对distutils的移除比较彻底,Buildozer的安卓目标模块目前可能还没完全适配这个变化。如果上面的方法都没用,可以暂时切换到Python 3.10或3.11——这些版本要么默认包含distutils,要么更容易让setuptools提供的distutils被识别。记得安装对应版本的系统级distutils包,再重新安装Buildozer到匹配的虚拟环境里。

  • 检查Buildozer配置文件
    打开你的buildozer.spec,确认里面的Python版本配置和你实际使用的一致,比如:

    android.python_version = 3.11
    

    避免Buildozer调用了未配置好distutils的Python版本。

至于为什么装了setuptools还是找不到distutils:setuptools确实包含distutils的兼容实现,但有些旧代码(比如Buildozer的安卓模块)是直接import distutils的,这时候需要Python能正确定位到setuptools提供的这个模块。如果系统级没有基础的distutils包,或者虚拟环境里的setuptools安装不完整,就会出现找不到的情况。

备注:内容来源于stack exchange,提问作者Sharpy796

火山引擎 最新活动