2016-03-01 340 views
1

我完成了我的Kivy應用程序的開發,現在我想打包它在Mac OS X上運行。我正在關注來自Kivy文檔的these instructions。不幸的是我遇到了一些麻煩:Kivy Buildozer「ImportError:No module named docopt」

環境

  • 的Mac OS X 10.10.5
  • Kivy 1.9.1 @ /Applications/kivy.app(Python3版本Kivy的 )
  • 通過自制

  • 的Python 3.5.1安裝Buildozer

    sudo pip3.5 install buildozer 
    

    構建Kivy應用程序的Mac OS X

    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會抱怨它。這個問題的解決方案是什麼?

  • 回答

    1

    我發現解決我的問題。所以,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的脂肪。 Yum :)

    1

    您可以:

    1. 從docopt進口刪除線

      docopt

    2. 只要把docopt.py旁邊的package_app.py

    +0

    感謝但是在'package_app.py'中註釋掉'from docopt import docopt'並將'docopt.py'放在同一個目錄下導致這個錯誤:'Traceback(最近調用最後一個): File「 package_app.py「,第232行,在 arguments = docopt(__ doc__,version ='package app {}'。format(__ version__)) NameError:名稱'docopt'未定義' –

    +0

    I ment that you would do one 2 ...不是同時出現:) –