запуск python в приложении для Android с chaquopy приводит к фатальной ошибке - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь запустить код Python в своем приложении для Android с помощью Chaquopy, я также использую библиотеку moviepy (я конвертирую файл mp4 в файл gif).Когда я пытаюсь выполнить преобразование, я получаю следующее сообщение об ошибке:

2019-02-06 15:46:47.586 3924-3924/com.udacity.gradle.builditbigger E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.udacity.gradle.builditbigger, PID: 3924
com.chaquo.python.PyException: AttributeError: module 'moviepy.audio.fx.all' has no attribute 'audio_fadein'
    at <python>.moviepy.editor.<module>(<string>:1)
    at <python>.moviepy.editor.<module>(editor.py:80)
    at <python>.java.android.importer.load_module_impl(importer.py:435)
    at <python>.java.android.importer.load_module(importer.py:353)
    at <python>.importlib._bootstrap._load_backward_compatible(<frozen importlib._bootstrap>:626)
    at <python>.importlib._bootstrap._load_unlocked(<frozen importlib._bootstrap>:656)
    at <python>.importlib._bootstrap._find_and_load_unlocked(<frozen importlib._bootstrap>:955)
    at <python>.importlib._bootstrap._find_and_load(<frozen importlib._bootstrap>:971)
    at <python>.java.chaquopy.import_override(import.pxi:18)
    at <python>.gif_convert.<module>(gif_convert.py:1)
    at <python>.java.android.importer.load_module_impl(importer.py:435)
    at <python>.java.android.importer.load_module(importer.py:353)
    at <python>.importlib._bootstrap._load_backward_compatible(<frozen importlib._bootstrap>:626)
    at <python>.importlib._bootstrap._load_unlocked(<frozen importlib._bootstrap>:656)
    at <python>.importlib._bootstrap._find_and_load_unlocked(<frozen importlib._bootstrap>:955)
    at <python>.importlib._bootstrap._find_and_load(<frozen importlib._bootstrap>:971)
    at <python>.importlib._bootstrap._gcd_import(<frozen importlib._bootstrap>:994)
    at <python>.importlib.import_module(__init__.py:126)
    at <python>.chaquopy_java.Java_com_chaquo_python_Python_getModule(chaquopy_java.pyx:154)
    at com.chaquo.python.Python.getModule(Native Method)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.VisualMediaPostFragment.moveFile(VisualMediaPostFragment.java:247)
    at com.udacity.gradle.builditbigger.camera.LifeCycleCamera.getFilePath(LifeCycleCamera.java:1161)
    at com.udacity.gradle.builditbigger.camera.LifeCycleCamera.stopRecordingVideo(LifeCycleCamera.java:1078)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.VisualMediaPostFragment.lambda$onCreateView$5(VisualMediaPostFragment.java:162)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.-$$Lambda$VisualMediaPostFragment$WS1G2y9p8sE-re_eOWFa7Rr0OCU.onClick(Unknown Source:4)
    at android.view.View.performClick(View.java:6897)
    at android.view.View$PerformClick.run(View.java:26089)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6940)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Я нашел решение этой проблемы (оно включает изменение кода Python , который обычно генерируетсяby android studio, поэтому любые изменения, сделанные в файлах python, будут перезаписаны во время сборки.

Код Python показан ниже

from moviepy.editor import VideoFileClip

def convert(path):
    clip = VideoFileClip(path)
    return clip.write_gif("output.gif", fps=24)

Java-код, используемый для запуска кода Pyhton:

Python.start(new AndroidPlatform(getActivity()));
        Python py = Python.getInstance();
        PyObject gifConvert = py.getModule("gif_convert");
        PyObject gif = gifConvert.callAttr("convert", file.getAbsolutePath());
        Log.i("gif type", gif.toString());

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 февраля 2019

В старых версиях Chaquopy возникла проблема с pkgutil.iter_modules.Это было исправлено в Chaquopy 6.2.1 .

...