无法在Jython中导入Python函数

时间:2019-04-08 17:12:40

标签: python sqlite jython importerror

我写了一个通过Jython 2.7执行的Python脚本。我需要SQLite,所以我决定在 / usr / local / lib / jython / Lib 下的Jython(link)中使用sqlite3。

ghidra_batch.py​​

import sys
sys.path.append("/usr/local/lib/jython/Lib")
sys.path.append("/path/to/my/project/directory")
import sqlite3

我创建了另一个文件,其中为数据库定义了一些功能:

db.py

import platform
import sys
if platform.python_implementation == 'Jython':
    sys.path.append("/usr/local/lib/jython/Lib")
    sys.path.append("/path/to/my/project/directory")
import sqlite3

def open_db():
   [some code]

def create_schema():
   [some code]

注意:我检查Python的实现,因为该脚本也通过CPython运行。我仅在通过Jython运行时添加路径,以使其找到其sqlite3模块,如果使用的是CPython标准sqlite3模块。

现在,当我在ghidra_batch.py​​中导入open_db()时,就会发生我的问题:

from db import open_db

结果如下:

ImportError: cannot import name open_db

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

一般规则:使用 Python 时,如果不是您所期望的东西,则只需 print

触发该异常的from db import open_db行“告诉”我:

  • 找到了 db 模块(包)
  • 这不是您期望的(您的 db.py

这就是为什么我在我的注释中建议打印有关该信息的信息(很明显,在发生错误之前):

import db
print(db)
print(dir(db))

输出确认了这一点。因此,还有另一个 db 模块在您之前导入。我尝试复制您的环境(安装了 Jython ,但无法安装 jython-sqlite3 )。
经过一番研究,我认为它是[BitBucket]: Taro L. Saito/sqlite-jdbc/Source - sqlite-jdbc/src/main/java/org/sqlite/DB.java sqlite-jdbc jython-sqlite3 依赖项)。

合理的方法是将模块名称修改为其他名称(例如: sqlite_db_wrapper.py ),并更新 import 语句。

(作为其他通用规则),请勿提供可能与 Python 库中的模块相冲突的模块(通用)名称。