如何使用Chaquopy对Android的python脚本进行Cythonization?

如何使用Chaquopy对Android的python脚本进行Cythonization?,python,android,cython,cythonize,chaquopy,Python,Android,Cython,Cythonize,Chaquopy,我的目标是使用Cython for Android平台对python脚本进行Cython化/模糊化 到目前为止,我所尝试的是: 我有一个设置。py 这里我将dir改为/sdcard/Download/,因为我想要混淆的python脚本就在这个dir中 案例1: 在MainActivity.java内部,我调用setup.py如下: Python py = Python.getInstance(); PyObject os= py.getModule("setup"); 这样它会抛出一个错误

我的目标是使用Cython for Android平台对python脚本进行Cython化/模糊化

到目前为止,我所尝试的是: 我有一个设置。py

这里我将dir改为/sdcard/Download/,因为我想要混淆的python脚本就在这个dir中

  • 案例1:
MainActivity.java内部,我调用setup.py如下:

Python py = Python.getInstance();
PyObject os= py.getModule("setup");
这样它会抛出一个错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.styleapp, PID: 2422
    com.chaquo.python.PyException: SystemExit: usage:  [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or:  --help [cmd1 cmd2 ...]
       or:  --help-commands
       or:  cmd --help

    error: no commands supplied
        at <python>.distutils.core.setup(core.py:136)
        at <python>.setuptools.setup(__init__.py:161)
        at <python>.setup.<module>(setup.py:8)
        at <python>.importlib._bootstrap._call_with_frames_removed(<frozen importlib._bootstrap>:219)
        at <python>.importlib._bootstrap_external.exec_module(<frozen importlib._bootstrap_external>:783)
        at <python>.java.android.importer.exec_module(importer.py:503)
        at <python>.java.android.importer.exec_module(importer.py:546)
        at <python>.importlib._bootstrap._load_unlocked(<frozen importlib._bootstrap>:671)
        at <python>.importlib._bootstrap._find_and_load_unlocked(<frozen importlib._bootstrap>:975)
        at <python>.importlib._bootstrap._find_and_load(<frozen importlib._bootstrap>:991)
        at <python>.importlib._bootstrap._gcd_import(<frozen importlib._bootstrap>:1014)
        at <python>.importlib.import_module(__init__.py:127)
        at <python>.chaquopy_java.Java_com_chaquo_python_Python_getModule(chaquopy_java.pyx:152)
        at com.chaquo.python.Python.getModule(Native Method)
        at com.example.styleapp.MainActivity.runthemodel(MainActivity.java:127)
        at com.example.styleapp.MainActivity.access$000(MainActivity.java:47)
        at com.example.styleapp.MainActivity$2.onMenuItemClick(MainActivity.java:103)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:154)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
        at androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
        at androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
        at android.view.View.performClick(View.java:7140)
        at android.view.View.performClickInternal(View.java:7117)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27355)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7410)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
  • 案例2
如果我使用这个:

PyObject os= py.getModule("setup.py build_ext -b /sdcard/Download/ -t .");
我也犯了同样的错误

我需要帮助了解如何传递这些参数?

我试图复制:

import os
os.system('python3 setup.py build_ext -b "/sdcard/Download/" -t .')
作为


但这甚至没有调用setup.py脚本。

这就是我无法在实际的Android设备上编译Cython模块的原因,因为大多数设备都没有编译器。我想我们可以将py文件编译成pyc,因为它们不依赖于机器。

我已经在上回答了您的问题。
PyObject os= py.getModule("setup.py build_ext -b /sdcard/Download/ -t .");
import os
os.system('python3 setup.py build_ext -b "/sdcard/Download/" -t .')
PyObject os = py.getModule("os");
os.callAttr("system","python3 setup.py build_ext -b /sdcard/Download/ -t .");