У меня есть простой пакет python/kivy, из которого я хочу создать Android APK с помощью Buildozer. Пакет из корня организован как:
.
├── 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()
версия.py это
__all__ = 'VERSION'
VERSION = '0.0.2'
а _
main_
.py — это
from .source.main import BasicApp
def main():
BasicApp().run()
if __name__ == "__main__":
main()
У меня проблема в том, что когда я запускаю модуль, набрав
python -m kivy_app
в корневом каталоге мне нужна строка
from .version import VERSION
в main.py (обратите внимание, что перед версией стоит '.').
С другой стороны, когда я собираю apk для Android из корневого каталога, buildozer.spec использует строку:
# (str) Source code where the main.py live
source.dir = ./kivy_app/source
и, конечно же, вызывает строки:
if __name__ == '__main__':
BasicApp().run()
в main.py.
В этом случае модуль обрабатывается так, как будто он не находится в пакете, поэтому ему нужна строка:
from version import VERSION
(В этом случае нет «.» перед версией в операторе импорта)
Как я могу разрешить этот конфликт?