为啥除了 jnius 我不能导入任何 pyjnius 的东西?

Posted

技术标签:

【中文标题】为啥除了 jnius 我不能导入任何 pyjnius 的东西?【英文标题】:Why can't I import anything of pyjnius besides jnius?为什么除了 jnius 我不能导入任何 pyjnius 的东西? 【发布时间】:2020-01-16 12:53:05 【问题描述】:

当我使用 python 解释器时,我可以很好地导入它。但是如果我写一个脚本,出于某种原因import jnius 工作正常,但是当我写from jnius import autoclassfrom jnius import JavaClass 时,我得到一个ImportError: Cannot import 'autoclass' from 'jnius'

我什至尝试过写作

import jnius
Python Activity = jnius.autoclass('org.kivy.android.PythonActivity')

但我得到AttributeError: 'jnius' has no attribute 'autoclass'

编辑: 当我们讨论autoclass 主题时,当我写

Python Activity = autoclass('org.kivy.android.PythonActivity')

我明白了

jnius.JavaException: Class not found b'org/kivy/android/PythonActivity'

【问题讨论】:

会不会是 python2/3 的问题?当它工作时你使用哪个解释器,脚本调用哪个解释器?你可以打印sys.version(如果我没记错的话)。 我正在使用 python 3.7.3,我没有另一个执行脚本的解释器 你确定吗?您是否与sys.version 核对过(那将在我要检查的列表的顶部)。您在解释器中所做的事情是否与您在脚本中所做的事情相同?您是否在新打开的口译员中尝试过?一般应该在sys.pathPYTHONPATH 一看到你的评论,我确实使用了sys.version。它说版本是3.7.3。在哪里可以找到PYTHONPATH PYTHONPATH 是您设置的环境变量,即使用$ PYTHONPATH=/path/to/some/modules python # or add script.py here 启动您的脚本(或解释器)(您不需要$,它只是标记通常的bash 提示,在Windows 中它就像C:\...\>),但我会从检查sys.path 开始,甚至更早,启动一个新的/新鲜的python 解释器并尝试在其中包含你想要的东西。如果它适用于解释器,它应该适用于脚本。那里没有两难选择......你是如何在解释器中包含这些东西的?你能再做一次吗? 【参考方案1】:

在这里。

我做了检查,一切都设置正确。我只是没有意识到在导入 jnius 之前必须先导入 kivy。

如果您想对其进行测试,代码应该类似于下面的代码。我只在使用 Pydroid3 的 Android 手机上尝试过,还没有在笔记本电脑上尝试过

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

from jnius import autoclass


PythonActivity = autoclass('org.kivy.android.PythonActivity')

class MyApp(App):
    def build(self):
        return Label(text=str(type(PythonActivity)))


if __name__=="__main__":
    MyApp().run()

它应该显示以下行<class 'jnius.jnius.MetaJavaClass'>

【讨论】:

以上是关于为啥除了 jnius 我不能导入任何 pyjnius 的东西?的主要内容,如果未能解决你的问题,请参考以下文章

为啥android ACTION_UUID返回错误的对象

为啥我的 css 不能在 localhost.3000 上应用?

蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”

jnius.jnius.JavaException:发生 JVM 异常:setAudioSource 失败

除了这样,为啥我不能访问受 C# 保护的成员?

为啥我不能在 react native 中导入我的自定义组件