简体   繁体   English

构建失败:在您的应用程序目录中找不到 main.py(o)

[英]BUILD FAILURE: No main.py(o) found in your app directory

I am a beginner in kivy and trying to build an app using Ubunto microsoft app on windows 10 any kind of help will be appreciated.我是 kivy 的初学者,正在尝试使用 windows 10 上的 Ubunto microsoft 应用程序构建应用程序 10 任何类型的帮助都将不胜感激。

Although I put it in same location of the buildozer.spec I keep getting this error:虽然我把它放在 buildozer.spec 的相同位置,但我不断收到此错误:

BUILD FAILURE: No main.py(o) found in your app directory.构建失败:在您的应用程序目录中找不到 main.py(o)。 This file must exist to act as the entry point for you app.此文件必须存在才能充当您应用程序的入口点。 If your app is started by a file with a different name, rename it to main.py or add a main.py that loads it.如果您的应用程序由具有不同名称的文件启动,请将其重命名为 main.py 或添加加载它的 main.py。

My source code:我的源代码:

from kivy.app import App
from kivy.uix.label import Label

class MainApp(App):
    def build(self):
        label = Label(text='Hello from Kivy',
                      size_hint=(.5, .5),
                      pos_hint={'center_x': .5, 'center_y': .5})

        return label

if __name__ == '__main__':
    app = MainApp()
    app.run()

my error log:我的错误日志:

# project.properties updated
# Gradle project detected, copy files /mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android/platform/build-armeabi-v7a/dists/myapp__armeabi-v7a/src/main/java
# Run '/usr/bin/python3 -m pythonforandroid.toolchain apk --debug --bootstrap=sdl2 --dist_name myapp --name Application --version 0.1 --package org.test.myapp --minsdk 21 --ndk-api 21 --private /mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android/app --android-entrypoint org.kivy.android.PythonActivity --android-apptheme @android:style/Theme.NoTitleBar --orientation sensor --window --copy-libs --arch armeabi-v7a --color=always --storage-dir="/mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android/platform/build-armeabi-v7a" --ndk-api=21'
# Cwd /mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android/platform/python-for-android
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Available Android APIs are (27)
[INFO]:    Requested API target 27 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/brad/.buildozer/android/platform/android-ndk-r19b
[INFO]:    Found NDK version 19b
[INFO]:    Getting NDK API version (i.e. minimum supported API) from user argument
[INFO]:    Found virtualenv at /usr/local/bin/virtualenv
[INFO]:    ccache is missing, the build will not be optimized in the future.
[INFO]:    Found the following toolchain versions: ['4.9']
[INFO]:    Picking the latest gcc toolchain, here 4.9
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:         myapp: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi), built for archs (armeabi-v7a)
[INFO]:    myapp has compatible recipes, using this one
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:         myapp: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi), built for archs (armeabi-v7a)
[INFO]:    myapp has compatible recipes, using this one
[INFO]:    -> directory context /mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android/platform/build-armeabi-v7a/dists/myapp__armeabi-v7a
WARNING: Received a --sdk argument, but this argument is deprecated and does nothing.
BUILD FAILURE: No main.py(o) found in your app directory. This
file must exist to act as the entry point for you app. If your app is
started by a file with a different name, rename it to main.py or add a
main.py that loads it.

I tried to clean my Buildozer and it didn't work and i put my app directory to the buildozer.spec but it didn't work as well我尝试清理我的 Buildozer 但它不起作用,我将我的应用程序目录放入 buildozer.spec 但它也不起作用

Buildozer.spec: Buildozer.spec:

[app]

# (str) Title of your application
title = 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 = C:/Users/MOHAMED/.PyCharm2018.1/config/scratches

# (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
version int method 2
# (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 2)
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, sensorLandscape, portrait or all)
orientation = all

# (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) Target Android API, should be as high as possible.
#android.api = 27

# (int) Minimum API your APK will support.
#android.minapi = 21

# (int) Android SDK version to use
#android.sdk = 20

# (str) Android NDK version to use
#android.ndk = 17c

# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
#android.ndk_api = 17

# (bool) Use --private data storage (False) or --dir public storage (True)
#android.private_storage = True

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =C:/Users/MOHAMED/.PyCharm2018.1/config/scratches/.buildozer/android\platform/--ndk-api=21

# (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

# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
# android.accept_sdk_license = False

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (str) Android app theme, default is ok for Kivy-based app
# android.apptheme = "@android:style/Theme.NoTitleBar"

# (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) add java compile options
# this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option
# see https://developer.android.com/studio/write/java8-support for further information
# android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"

# (list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}
# please enclose in double quotes 
# e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }"
#android.add_gradle_repositories =

# (list) packaging options to add 
# see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html
# can be necessary to solve conflicts in gradle_dependencies
# please enclose in double quotes 
# e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"
#android.add_gradle_repositories =

# (list) Java classes to add as activities to the manifest.
#android.add_activities = com.example.ExampleActivity

# (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_arm64_v8a = libs/android-v8/*.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 =

# (list) Android shared libraries which will be added to AndroidManifest.xml using <uses-library> tag
#android.uses_library =

# (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, x86_64
android.arch = armeabi-v7a

#
# Python for android (p4a) specific
#

# (str) python-for-android fork to use, defaults to upstream (kivy)
#p4a.fork = kivy

# (str) python-for-android branch to use, defaults to master
#p4a.branch = stable

# (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
# Alternately, specify the URL and branch of a git checkout:
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master

# Another platform dependency: ios-deploy
# Uncomment to use a custom checkout
#ios.ios_deploy_dir = ../ios_deploy
# Or specify URL and branch
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.7.0

# (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 = 2

# (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

Windows-specific pathnames is almost certainly your problem: Windows 特定的路径名几乎肯定是您的问题:

source.dir = C:/Users/MOHAMED/.PyCharm2018.1/config/scratches

That's... probably not working as intended.那是……可能没有按预期工作。 CPython itself transparently supports Windows-style pathnames, of course – but Kivy and Buildozer are another matter entirely.当然,CPython 本身透明地支持 Windows 风格的路径名——但 Kivy 和 Buildozer 完全是另一回事。 All else being equal, open-source software typically requires POSIX-compliant pathnames (as under Linux and macOS) rather than POSIX-noncompliant pathnames (as under Windows).在其他条件相同的情况下,开源软件通常需要符合 POSIX 的路径名(如在 Linux 和 macOS 下)而不是不符合 POSIX 的路径名(如在 Windows 下)。

By "Ubunto microsoft app on windows 10," let's charitably assume you installed the Ubuntu Linux distribution under the Windows System for Linux (WSL).通过“windows 10 上的 Ubuntu 微软应用”,我们假设您在 Linux (WSL) 的 Windows 系统下安装了 Ubuntu Linux 发行版。 In that case, Buildozer itself already output the Linux-friendly pathname you are looking for:在这种情况下,Buildozer 本身已经是 output 您要查找的 Linux 友好路径名:

source.dir = /mnt/c/Users/MOHAMED/.PyCharm2018.1/config/scratches/

Incidentally, storing critical project data in a PyCharm-specific dot directory (eg, ${HOME}/.PyCharm2018.1/ ) is a really bad idea.顺便说一句,将关键项目数据存储在特定于 PyCharm 的点目录(例如${HOME}/.PyCharm2018.1/ )中是一个非常糟糕的主意。 Please back that up with git before PyCharm blows your entire codebase up.请在 PyCharm 破坏您的整个代码库之前使用git进行备份。 </shrug>

I had the same error, then I Changed my main source code file to main.py and it worked.我有同样的错误,然后我将我的主要源代码文件更改为 main.py 并且它有效。 This was my main source code app name as "firstapp.py" then I changed it to main.py:这是我的主要源代码应用程序名称为“firstapp.py”,然后我将其更改为 main.py:
这是我的主要源代码应用程序名称为“firstapp.py”,然后我将其更改为 main.py

Rename your main Python file as main.py then it works.将您的主 Python 文件重命名为main.py ,然后它就可以工作了。 Because buildozer.spec file will search only for main.py to convert to an apk因为 buildozer.spec 文件将只搜索 main.py 以转换为 apk

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM