

タイトルの通りで、公式チュートリアルに書いてあるPongGameを写経したもの（動作は確認しました）を、macOSXアプリとしてパッケージングしたいのですが、公式  
<https://kivy.org/doc/stable/guide/packaging-osx.html>  
に載っている、Pyinstallerを使って、specファイルを編集（Treeを追加）する方法では

# - _\- Pyinstallerエラー -_ -

[code]

    43467 WARNING: stderr: FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/PycharmProjects/Kivy/Pong/zerokara/dist/main.app/Contents/Resources/kivy_install/data/style.kv'
    
[/code]

となってしまいます。  
specファイルはこのようになっています。（COLLECTにTreeを指定しただけです）

# - _\- main.spec -_ -

[code]

    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['/Users/username/PycharmProjects/Kivy/Pong/zerokara'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              [],
              exclude_binaries=True,
              name='main',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False )
    coll = COLLECT(exe,Tree('/Users/username/PycharmProjects/Kivy/Pong/zerokara'),
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name='main')
    app = BUNDLE(coll,
                 name='main.app',
                 icon=None,
                 bundle_identifier=None)
    
[/code]

もう一つの方法として紹介されているbuildozerを使う方法では、main.pyのあるディレクトリで  
$buildozer init  
$buildozer osx debug  
をしても、

# - _\- Buildozerエラー -_ -

[code]

      File "/usr/local/lib/python3.7/site-packages/buildozer/targets/osx.py", line 121, in build_package
        app_deps = open('requirements.txt').read()
    FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
    
[/code]

となってしまいます。  
buildozer.specはこうなっています。（一切編集していないです）

# - _\- buildozer.spec -_ -

[code]

    [app]
    
    # (str) Title of your application
    title = My Application
    
    # (str) Package name
    package.name = myapp
    
    # (str) Package domain (needed for android/ios packaging)
    package.domain = org.test
    
    # (str) Source code where the main.py live
    source.dir = .
    
    # (list) Source files to include (let empty to include all the files)
    source.include_exts = py,png,jpg,kv,atlas
    
    # (list) List of inclusions using pattern matching
    #source.include_patterns = assets/*,images/*.png
    
    # (list) Source files to exclude (let empty to not exclude anything)
    #source.exclude_exts = spec
    
    # (list) List of directory to exclude (let empty to not exclude anything)
    #source.exclude_dirs = tests, bin
    
    # (list) List of exclusions using pattern matching
    #source.exclude_patterns = license,images/*/*.jpg
    
    # (str) Application versioning (method 1)
    version = 0.1
    
    # (str) Application versioning (method 2)
    # version.regex = __version__ = ['"](.*)['"]
    # version.filename = %(source.dir)s/main.py
    
    # (list) Application requirements
    # comma separated e.g. requirements = sqlite3,kivy
    requirements = kivy
    
    # (str) Custom source folders for requirements
    # Sets custom source for any requirements with recipes
    # requirements.source.kivy = ../../kivy
    
    # (list) Garden requirements
    #garden_requirements =
    
    # (str) Presplash of the application
    #presplash.filename = %(source.dir)s/data/presplash.png
    
    # (str) Icon of the application
    #icon.filename = %(source.dir)s/data/icon.png
    
    # (str) Supported orientation (one of landscape, portrait or all)
    orientation = portrait
    
    # (list) List of service to declare
    #services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
    
    #
    # OSX Specific
    #
    
    #
    # author = © Copyright Info
    
    # change the major version of python used by the app
    osx.python_version = 3
    
    # Kivy version to use
    osx.kivy_version = 1.9.1
    
    #
    # Android specific
    #
    
    # (bool) Indicate if the application should be fullscreen or not
    fullscreen = 0
    
    # (string) Presplash background color (for new android toolchain)
    # Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
    # red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
    # darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
    # olive, purple, silver, teal.
    #android.presplash_color = #FFFFFF
    
    # (list) Permissions
    #android.permissions = INTERNET
    
    # (int) Android API to use
    #android.api = 19
    
    # (int) Minimum API required
    #android.minapi = 9
    
    # (int) Android SDK version to use
    #android.sdk = 20
    
    # (str) Android NDK version to use
    #android.ndk = 9c
    
    # (bool) Use --private data storage (True) or --dir public storage (False)
    #android.private_storage = True
    
    # (str) Android NDK directory (if empty, it will be automatically downloaded.)
    #android.ndk_path =
    
    # (str) Android SDK directory (if empty, it will be automatically downloaded.)
    #android.sdk_path =
    
    # (str) ANT directory (if empty, it will be automatically downloaded.)
    #android.ant_path =
    
    # (bool) If True, then skip trying to update the Android sdk
    # This can be useful to avoid excess Internet downloads or save time
    # when an update is due and you just want to test/build your package
    # android.skip_update = False
    
    # (str) Android entry point, default is ok for Kivy-based app
    #android.entrypoint = org.renpy.android.PythonActivity
    
    # (list) Pattern to whitelist for the whole project
    #android.whitelist =
    
    # (str) Path to a custom whitelist file
    #android.whitelist_src =
    
    # (str) Path to a custom blacklist file
    #android.blacklist_src =
    
    # (list) List of Java .jar files to add to the libs so that pyjnius can access
    # their classes. Don't add jars that you do not need, since extra jars can slow
    # down the build process. Allows wildcards matching, for example:
    # OUYA-ODK/libs/*.jar
    #android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
    
    # (list) List of Java files to add to the android project (can be java or a
    # directory containing the files)
    #android.add_src =
    
    # (list) Android AAR archives to add (currently works only with sdl2_gradle
    # bootstrap)
    #android.add_aars =
    
    # (list) Gradle dependencies to add (currently works only with sdl2_gradle
    # bootstrap)
    #android.gradle_dependencies =
    
    # (list) Java classes to add as activities to the manifest.
    #android.add_activites = com.example.ExampleActivity
    
    # (str) python-for-android branch to use, defaults to stable
    #p4a.branch = stable
    
    # (str) OUYA Console category. Should be one of GAME or APP
    # If you leave this blank, OUYA support will not be enabled
    #android.ouya.category = GAME
    
    # (str) Filename of OUYA Console icon. It must be a 732x412 png image.
    #android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
    
    # (str) XML file to include as an intent filters in <activity> tag
    #android.manifest.intent_filters =
    
    # (str) launchMode to set for the main activity
    #android.manifest.launch_mode = standard
    
    # (list) Android additional libraries to copy into libs/armeabi
    #android.add_libs_armeabi = libs/android/*.so
    #android.add_libs_armeabi_v7a = libs/android-v7/*.so
    #android.add_libs_x86 = libs/android-x86/*.so
    #android.add_libs_mips = libs/android-mips/*.so
    
    # (bool) Indicate whether the screen should stay on
    # Don't forget to add the WAKE_LOCK permission if you set this to True
    #android.wakelock = False
    
    # (list) Android application meta-data to set (key=value format)
    #android.meta_data =
    
    # (list) Android library project to add (will be added in the
    # project.properties automatically.)
    #android.library_references =
    
    # (str) Android logcat filters to use
    #android.logcat_filters = *:S python:D
    
    # (bool) Copy library instead of making a libpymodules.so
    #android.copy_libs = 1
    
    # (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86
    android.arch = armeabi-v7a
    
    #
    # Python for android (p4a) specific
    #
    
    # (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
    #p4a.source_dir =
    
    # (str) The directory in which python-for-android should look for your own build recipes (if any)
    #p4a.local_recipes =
    
    # (str) Filename to the hook for p4a
    #p4a.hook =
    
    # (str) Bootstrap to use for android builds
    # p4a.bootstrap = sdl2
    
    # (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
    #p4a.port =
    
    
    #
    # iOS specific
    #
    
    # (str) Path to a custom kivy-ios folder
    #ios.kivy_ios_dir = ../kivy-ios
    
    # (str) Name of the certificate to use for signing the debug version
    # Get a list of available identities: buildozer ios list_identities
    #ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"
    
    # (str) Name of the certificate to use for signing the release version
    #ios.codesign.release = %(ios.codesign.debug)s
    
    
    [buildozer]
    
    # (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
    log_level = 1
    
    # (int) Display warning if buildozer is run as root (0 = False, 1 = True)
    warn_on_root = 1
    
    # (str) Path to build artifact storage, absolute or relative to spec file
    # build_dir = ./.buildozer
    
    # (str) Path to build output (i.e. .apk, .ipa) storage
    # bin_dir = ./bin
    
    #    -----------------------------------------------------------------------------
    #    List as sections
    #
    #    You can define all the "list" as [section:key].
    #    Each line will be considered as a option to the list.
    #    Let's take [app] / source.exclude_patterns.
    #    Instead of doing:
    #
    #[app]
    #source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
    #
    #    This can be translated into:
    #
    #[app:source.exclude_patterns]
    #license
    #data/audio/*.wav
    #data/images/original/*
    #
    
    
    #    -----------------------------------------------------------------------------
    #    Profiles
    #
    #    You can extend section / key with a profile
    #    For example, you want to deploy a demo version of your application without
    #    HD content. You could first change the title to add "(demo)" in the name
    #    and extend the excluded directories to remove the HD content.
    #
    #[app@demo]
    #title = My Application (demo)
    #
    #[app:source.exclude_patterns@demo]
    #images/hd/*
    #
    #    Then, invoke the command line with the "demo" profile:
    #
    #buildozer --profile demo android debug
    
[/code]

# - _\- 追記 -_ -

何故かPyinstallerの方で一切の変更を加えずspecファイルのビルドを4回繰り返したところ、エラーが

[code]

    43467 WARNING: stderr: FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/PycharmProjects/Kivy/Pong/zerokara/dist/main.app/Contents/Resources/kivy_install/data/style.kv'
    
[/code]

が2回、

[code]

    47566 WARNING: stderr: FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/PycharmProjects/Kivy/Pong/username/dist/main/dist/main.app/Contents/Resources/dist/main/docutils/writers/html4css1/html4css1.css'
    
[/code]

が1回と変わっていき、最終的にパッケージングできました。


CC BY-SA 4.0
2018-11-05T05:08:38.213
49972
2018-11-05T14:21:34.570
2018-11-05T14:21:34.570
30846
30846
question
python kivy
Kivyで作ったアプリをmacOSXで動かしたい