我在尝试导入mysql时遇到了Python问题。我的代码的开头是(我使用monkeyrunner来运行脚本):
#!/usr/bin/env python
import sys
import MySQLdb
.
.
.
etc
每次我尝试运行代码时,都会收到当前错误:
dani@debian:~/public/Yandex Maps Test$ monkeyrunner test.py
130413 00:49:22.066:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception
130413 00:49:22.066:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions]Traceback (most recent call last):
File "/home/dani/public/Yandex Maps Test/test.py", line 4, in <module>
import MySQLdb
ImportError: No module named MySQLdb
130413 00:49:22.066:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.PyException.fillInStackTrace(PyException.java:70)
.
.
.
etc
我试图为python重新安装mysql:
sudo apt-get reinstall python-mysqldb mysql-server
但没有任何帮助。任何想法或提示?
此致,,,
答案 0 :(得分:0)
问题是monkeyrunner
与默认系统Python不是同一个解释器,并且不共享相同的站点包等。
脚本顶部的#!/usr/bin/env python
会产生误导。如果您实际使用/usr/bin/env python test.py
或./test.py
(假设为chmod +x
)运行脚本,则可以使用。但你不是,你用monkeyrunner
运行它。
因此,您为系统安装的任何内容都不会在monkeyrunner
中使用Python。您必须为monkeyrunner
安装它。
此外,正如the docs所说:
monkeyrunner工具使用Jython,这是一种使用Java编程语言的Python实现。
虽然Jython是Python,并且实现了与CPython相同的Python语言和(几乎)标准库,但它没有实现CPython C API,因此不能使用像MySQLdb这样的C-API扩展。 (他们实际上正在开发一个聪明的包装器,将来会改变它,但今天对你没有帮助。)
还有其他MySQL驱动程序可以与CPython和Jython一起使用(因为它们使用纯Python),例如PyMySQL
。但最简单的解决方案是使用Java的JDBC
驱动程序。正如Jython FAQ所暗示的那样,最简单的方法是:
使用
zxJDBC
,它使用Python DB API 2.0接口从Jython提供数据数据库连接......
与直接使用JDBC不同,使用zxJDBC
通常意味着您只需更改MySQLdb代码中的一行即可使其工作。
答案 1 :(得分:0)
我和你有同样的问题。 我试图使用zxJDBC来修复它。 但是当我运行脚本时,它找不到&#34; org.gjt.mm.mysql.Driver&#34; &#34; com.mysql.jdbc.Driver&#34;。甚至我把mysql-connector-java-5.1.34-bin.jar和zxJDBC.jar放在系统CLASSPATH下。 我试过在jython下运行这个脚本。有效。 所以我认为这个问题与monkeyrunner有关。