5

我正在为 .Net4 使用 SharpDevelop 3.2.0、IronPython 2.6.1。

要使用 IronPython 的这个模块访问 sqlite3 功能: IronPython.SQLite

我的程序是一个 GUI 应用程序并访问一个 sqlite 数据库。当通过 IronPython 的 ipy.exe 解释器启动程序时,一切(包括数据库访问)都可以完美运行。

但是,如果我尝试将使用 SharpDevelop 编译的程序启动为可执行文件,则会出现异常:

IronPython.Runtime.Exceptions.ImportException:没有名为 _sqlite3 的模块

此异常的原因位于 dbapi2.py 中:

从 _sqlite3 导入 *

在 IronPython 控制台上,我可以导入 _sqlite3 并按预期使用它。

我已经为 SharpDevelop 提供了 sqlite3 模块的路径,但是 IronPython 或 sqlite3-module 文件夹中的任何地方都没有名为 _sqlite3 的文件。

请告诉我在构建我的程序的编译版本时可能导致此问题的原因。

非常感谢你。

4

2 回答 2

4

任何地方都没有_sqlite3文件;IronPython.Sqlite.dll 提供了一个名为_sqlite3.

如果您按照网站说明将 IronPython.Sqlite.dll 放在 DLLs 文件夹中,这可能就是它在 SharpDevelop 下不起作用的原因。运行 ipy.exe 时,它​​会隐式添加对 DLLs 文件夹中任何 DLL 的引用。当 SharpDevelop 构建一个可执行文件时,它是一个运行 IronPython 的小存根,但它不知道任何已安装的 IronPython 版本,因此不会从 DLLs 文件夹加载任何内容。

你最好是修改你的主脚本以包括

import clr
clr.AddReference("IronPython.SQLite.dll")

然后确保 IronPython.SQLite.dll 与 exe 位于同一目录中。无论如何,这是我的首选选项,我应该在有机会时将其添加到说明中。

于 2010-08-18T16:13:56.847 回答
3

我已经预料到你会告诉我以某种方式引用 DLL。

在几次失败后,我能够成功编译程序,但包含 DLL 有点棘手。

  1. 我将 DLL 添加到 SharpDevelop References 中。
  2. 我必须在我的脚本中添加以下代码:

import sys import nt import clr sys.path.append(nt.getcwd()) clr.AddReferenceToFile('IronPython.SQLite.dll')

这是指向我的执行目录中的 DLL 所必需的。

非常感谢您的帮助。

于 2010-08-19T08:53:46.183 回答