Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从包中创建kivy apk?_Python_Kivy_Buildozer - Fatal编程技术网

Python 如何从包中创建kivy apk?

Python 如何从包中创建kivy apk?,python,kivy,buildozer,Python,Kivy,Buildozer,我有一个简单的python/kivy包,我希望从中使用Buildozer创建一个android APK。根目录中的包组织为: . ├── bin │ ├── kivy_test-0.1-debug.apk │ └── myapp-0.1-debug.apk ├── buildozer.spec ├── __init__.py └── kivy_app ├── __init__.py ├── __main__.py └── source ├── ma

我有一个简单的python/kivy包,我希望从中使用Buildozer创建一个android APK。根目录中的包组织为:

.
├── bin
│   ├── kivy_test-0.1-debug.apk
│   └── myapp-0.1-debug.apk
├── buildozer.spec
├── __init__.py
└── kivy_app
    ├── __init__.py
    ├── __main__.py
    └── source
        ├── main.py
        └── version.py
模块main.py是:

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Label
from kivy.lang import Builder

from version import VERSION

root = Builder.load_string('''
<MainFrame>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Hola mundo!'
        Label:
            text: root.version
''')

class MainFrame(Screen):
    version = 'Version: %s' % VERSION
    def __init__(self, **kwargs):
        super(MainFrame, self).__init__(**kwargs)

class BasicApp(App):
    def build(self):
        return MainFrame()

if __name__ == '__main__':
    BasicApp().run()
\uu
\u
.py是

我遇到的问题是,当我通过键入

python -m kivy_app
在根目录中,我需要一行

from .version import VERSION
在main.py中(注意在版本之前有“.”)

另一方面,当我从根目录构建android apk时,buildozer.spec使用以下行:

# (str) Source code where the main.py live
source.dir = ./kivy_app/source
from version import VERSION
from .source.main import BasicApp
当然,它是在调用这些行:

if __name__ == '__main__':
     BasicApp().run()
在main.py中

在这种情况下,模块被视为不在包中,因此需要行:

# (str) Source code where the main.py live
source.dir = ./kivy_app/source
from version import VERSION
from .source.main import BasicApp
(在本例中,导入语句中版本之前的编号为“.”)


如何解决此冲突?

此冲突的解决方案需要将
\uu
main
\u
.py复制到main.py并替换该行:

# (str) Source code where the main.py live
source.dir = ./kivy_app/source
from version import VERSION
from .source.main import BasicApp
与:

在buildozer.spec中替换:

source.dir = ./kivy_app/source
与:

这棵树现在是:

.
├── bin
│   ├── kivy_test-0.1-debug.apk
│   └── myapp-0.1-debug.apk
├── buildozer.spec
├── __init__.py
└── kivy_app
    ├── __init__.py
    ├── __main__.py
    ├── main.py
    └── source
        ├── main.py
        └── version.py