【问题标题】:Kivy Buildozer "ImportError: No module named docopt"Kivy Buildozer“ImportError:没有名为 docopt 的模块”
【发布时间】:2016-03-01 21:10:12
【问题描述】:

我完成了 Kivy 应用程序的开发,现在我想将其打包以在 Mac OS X 上运行。我正在关注 Kivy 文档中的 these instructions。不幸的是,我遇到了一些麻烦:

环境

  • Mac OS X 10.10.5
  • Kivy 1.9.1 @ /Applications/kivy.app(Python3 版本 基维)
  • 通过 Homebrew 的 Python 3.5.1

安装 Buildozer

sudo pip3.5 install buildozer

为 Mac OS X 构建 Kivy 应用

cd /my/app
buildozer init
buildozer osx debug

结果

# Check configuration tokens
# Ensure build layout
# Create directory .buildozer
# Create directory bin
# Create directory /my/app/.buildozer/applibs
# Create directory .buildozer/osx/platform
# Create directory .buildozer/osx/app
# Check configuration tokens
# Preparing build
# Check requirements for osx
# Check if kivy-sdk-packager exists
# kivy-sdk-packager does not exist, clone it
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   127    0   127    0     0    200      0 --:--:-- --:--:-- --:--:--   200
100  191k    0  191k    0     0   187k      0 --:--:--  0:00:01 --:--:-- 1019k
Archive:  master.zip
c013d00bbaca6ff8ef6c806d0f1d148c9c0c1b39
   creating: kivy-sdk-packager-master/
  inflating: kivy-sdk-packager-master/.gitignore  
  inflating: kivy-sdk-packager-master/LICENSE  
  inflating: kivy-sdk-packager-master/README.md  
 extracting: kivy-sdk-packager-master/__init__.py  
  inflating: kivy-sdk-packager-master/appveyor.yml  
   creating: kivy-sdk-packager-master/linux/
   creating: kivy-sdk-packager-master/linux/debian/
  inflating: kivy-sdk-packager-master/linux/debian/README.md  
   creating: kivy-sdk-packager-master/linux/debian/daily/
  inflating: kivy-sdk-packager-master/linux/debian/daily/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/daily/compat  
  inflating: kivy-sdk-packager-master/linux/debian/daily/control  
  inflating: kivy-sdk-packager-master/linux/debian/daily/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/daily/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/daily/python-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/daily/python3-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/daily/rules  
   creating: kivy-sdk-packager-master/linux/debian/stable/
  inflating: kivy-sdk-packager-master/linux/debian/stable/changelog  
 extracting: kivy-sdk-packager-master/linux/debian/stable/compat  
  inflating: kivy-sdk-packager-master/linux/debian/stable/control  
  inflating: kivy-sdk-packager-master/linux/debian/stable/copyright  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-doc.docs  
 extracting: kivy-sdk-packager-master/linux/debian/stable/kivy-examples.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/kivy-tools.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-bin.install  
 extracting: kivy-sdk-packager-master/linux/debian/stable/python3-kivy-common.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/python3-kivy.install  
  inflating: kivy-sdk-packager-master/linux/debian/stable/rules  
   creating: kivy-sdk-packager-master/osx/
  inflating: kivy-sdk-packager-master/osx/README.md  
  inflating: kivy-sdk-packager-master/osx/cleanup_app.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-bundle.sh  
  inflating: kivy-sdk-packager-master/osx/create-osx-dmg.sh  
   creating: kivy-sdk-packager-master/osx/data/
  inflating: kivy-sdk-packager-master/osx/data/MakeSymlinks  
  inflating: kivy-sdk-packager-master/osx/data/background.png  
  inflating: kivy-sdk-packager-master/osx/data/icon.icns  
  inflating: kivy-sdk-packager-master/osx/data/link_duplicate.py  
  inflating: kivy-sdk-packager-master/osx/data/script  
  inflating: kivy-sdk-packager-master/osx/package_app.py  
   creating: kivy-sdk-packager-master/win/
 extracting: kivy-sdk-packager-master/win/__init__.py  
  inflating: kivy-sdk-packager-master/win/common.py  
   creating: kivy-sdk-packager-master/win/data/
  inflating: kivy-sdk-packager-master/win/data/README.txt  
  inflating: kivy-sdk-packager-master/win/data/kivy-bash.bat  
  inflating: kivy-sdk-packager-master/win/data/kivy.bat  
  inflating: kivy-sdk-packager-master/win/data/kivybash.rc  
  inflating: kivy-sdk-packager-master/win/data/kivyenv.sh  
  inflating: kivy-sdk-packager-master/win/data/kivywineenv.sh  
   creating: kivy-sdk-packager-master/win/data/tools/
  inflating: kivy-sdk-packager-master/win/data/tools/cython.bat  
 extracting: kivy-sdk-packager-master/win/data/tools/easy_install.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/link_msysgit.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/make-portable-python.py  
 extracting: kivy-sdk-packager-master/win/data/tools/pip.bat  
  inflating: kivy-sdk-packager-master/win/data/tools/register-python.py  
  inflating: kivy-sdk-packager-master/win/dropbox.py  
  inflating: kivy-sdk-packager-master/win/gdrive.py  
  inflating: kivy-sdk-packager-master/win/glew.py  
  inflating: kivy-sdk-packager-master/win/gstreamer.py  
  inflating: kivy-sdk-packager-master/win/kivy_win_sdk.py  
  inflating: kivy-sdk-packager-master/win/readme  
  inflating: kivy-sdk-packager-master/win/sdl2.py  
# check if Kivy.app exists in local dir
# Kivy.app found at /Applications/Kivy.app
# copying it to platform dir
# Install platform
# Check application requirements
# Remove directory and subdirectory /my/app/.buildozer/applibs
# Create directory /my/app/.buildozer/applibs
# Check garden requirements
# Compile platform
# Build the application #1
# Copy application source from /my/app
# Create directory /my/app/.buildozer/osx/app
# Copy /my/app/main.py
# Copy /my/app/minu.kv
# Package the application
# Building package
# Create minu.app

Traceback (most recent call last):
  File "package_app.py", line 45, in <module>
    from docopt import docopt
ImportError: No module named docopt
Traceback (most recent call last):
  File "/usr/local/bin/buildozer", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/site-packages/buildozer/scripts/client.py", line 13, in main
    Buildozer().run_command(sys.argv[1:])
  File "/usr/local/lib/python3.5/site-packages/buildozer/__init__.py", line 987, in run_command
    self.target.run_commands(args)
  File "/usr/local/lib/python3.5/site-packages/buildozer/targets/osx.py", line 234, in run_commands
    func(args)
  File "/usr/local/lib/python3.5/site-packages/buildozer/targets/osx.py", line 250, in cmd_debug
    self.buildozer.build()
  File "/usr/local/lib/python3.5/site-packages/buildozer/__init__.py", line 198, in build
    self.target.build_package()
  File "/usr/local/lib/python3.5/site-packages/buildozer/targets/osx.py", line 155, in build_package
    check_output(cmd, cwd=cwd)
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 629, in check_output
    **kwargs).stdout
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 711, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['python', 'package_app.py', '/my/app/.buildozer/osx/app', '--appname=minu', '--bundlename=MinU', '--bundleid=org.test', '--bundleversion=0.1', '--displayname=MinU']' returned non-zero exit status 1

据我所知,我的 Kivy 应用不需要 docopt,所以我不确定 Buildozer 为何抱怨它。这个问题的解决方法是什么?

【问题讨论】:

    标签: python-3.x kivy


    【解决方案1】:

    你可以:

    1. 删除该行

      从文档导入文档

    2. 只需将 docopt.py 放在你的 package_app.py 旁边

    【讨论】:

    • 谢谢,但在 package_app.py 中注释掉 from docopt import docopt 并将 docopt.py 放在同一目录中会导致此错误:Traceback (most recent call last): File "package_app.py", line 232, in &lt;module&gt; arguments = docopt(__doc__, version='package app {}'.format(__version__)) NameError: name 'docopt' is not defined
    • 我提到你会做这两个中的一个......而不是同时做两个:)
    【解决方案2】:

    我找到了解决问题的方法。所以,package_app.py 是用 Python2 编写的。因此,它需要在系统 Python2 中安装这些模块:

    pip2 install docopt sh
    

    现在 Buildozer 很高兴,我也很高兴。

    顺便说一句,为了减小我的应用程序的大小,我在打包前剪掉了脂肪。具体来说,我从myapp/.buildozer/osx/platform/kivy-sdk-packager-master/osx/Kivy.app/Contents/Frameworks 中删除了gstreamer。这消除了约 190 MB 的脂肪。百胜:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多