一个简单的问题......我正在使用Jython来完成一些任务,我需要访问一些MySQL数据库......我找到了一个用于Python2.5的MySQL数据库连接器;它没有附带jython / python安装(它的第三方)。我已将模块的文件夹放在与main.py相同的目录中,但是当我启动它时,它告诉我它无法找到模块。我之前在Python3.2中已经完成了导入,我认为它的工作方式是一样的。
Jython可以导入非标准的python模块吗? - 注意我可以很好地导入Java类。
这是错误(是的,这是针对我的世界):
20:50:44 [SEVERE] org.bukkit.plugin.InvalidPluginException: Traceback (most recent call last):
File "<iostream>", line 10, in <module>
ImportError: No module named PyDbLite
20:50:44 [SEVERE] at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlugin(PythonPluginLoader.java:280)
20:50:44 [SEVERE] at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlugin(PythonPluginLoader.java:113)
20:50:44 [SEVERE] at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlugin(PythonPluginLoader.java:83)
20:50:44 [SEVERE] at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:305)
20:50:44 [SEVERE] at com.master.bukkit.python.PythonLoader.onLoad(PythonLoader.java:58)
20:50:44 [SEVERE] at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:212)
20:50:44 [SEVERE] at org.bukkit.craftbukkit.CraftServer.<init>(CraftServer.java:183)
20:50:44 [SEVERE] at net.minecraft.server.ServerConfigurationManager.<init>(ServerConfigurationManager.java:53)
20:50:44 [SEVERE] at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:156)
20:50:44 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:422)
20:50:44 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
20:50:44 [SEVERE] Caused by: Traceback (most recent call last):
File "<iostream>", line 10, in <module>
ImportError: No module named PyDbLite
20:50:44 [SEVERE] at org.python.core.PyException.fillInStackTrace(PyException.java:70)
20:50:44 [SEVERE] at java.lang.Throwable.<init>(Throwable.java:181)
20:50:44 [SEVERE] at java.lang.Exception.<init>(Exception.java:29)
20:50:44 [SEVERE] at java.lang.RuntimeException.<init>(RuntimeException.java:32)
20:50:44 [SEVERE] at org.python.core.PyException.<init>(PyException.java:46)
20:50:44 [SEVERE] at org.python.core.PyException.<init>(PyException.java:43)
20:50:44 [SEVERE] at org.python.core.PyException.<init>(PyException.java:61)
20:50:44 [SEVERE] at org.python.core.Py.ImportError(Py.java:290)
20:50:44 [SEVERE] at org.python.core.imp.import_first(imp.java:750)
20:50:44 [SEVERE] at org.python.core.imp.import_name(imp.java:834)
20:50:44 [SEVERE] at org.python.core.imp.importName(imp.java:884)
20:50:44 [SEVERE] at org.python.core.ImportFunction.__call__(__builtin__.java:1220)
20:50:44 [SEVERE] at org.python.core.PyObject.__call__(PyObject.java:357)
20:50:44 [SEVERE] at org.python.core.__builtin__.__import__(__builtin__.java:1173)
20:50:44 [SEVERE] at org.python.core.imp.importOne(imp.java:903)
20:50:44 [SEVERE] at org.python.pycode._pyx5.f$0(<iostream>:52)
20:50:44 [SEVERE] at org.python.pycode._pyx5.call_function(<iostream>)
20:50:44 [SEVERE] at org.python.core.PyTableCode.call(PyTableCode.java:165)
20:50:44 [SEVERE] at org.python.core.PyCode.call(PyCode.java:18)
20:50:44 [SEVERE] at org.python.core.Py.runCode(Py.java:1261)
20:50:44 [SEVERE] at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:235)
20:50:44 [SEVERE] at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:230)
20:50:44 [SEVERE] at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlugin(PythonPluginLoader.java:239)
20:50:44 [SEVERE] ... 10 more
答案 0 :(得分:4)
jython可以导入非标准的python模块,如果它们是纯python。数据库连接通常是cpython模块。对于数据库连接,请参阅zxJDBC它使java可用的任何jdbc连接都以标准python DBI 2.0的方式运行。
两全其美!
答案 1 :(得分:3)
由于您使用的是jython,请使用mysql connector/J jar。下载它,将其添加到CLASSPATH
,并确保执行代码的用户具有对jar所在位置的读取权限。
获得jar后,请按the documentation获取示例代码。
答案 2 :(得分:3)
PyDbLite表面上是纯python,因此它应该导入到jython中。我没有试过在Jython中使用setup.py,但是我从Jython导入了几个没有Jython的纯python .py。我有一个项目使用通常的导入机制在CPython 2.x,CPython 3.x,Pypy和Jython上运行。
我想到的主要问题是:PyDbLite是否在sys.path的目录中?