我正在使用SharpDevelop 3.2.0,IronPython 2.6.1 for .Net4。
使用此模块为IronPython访问sqlite3功能: IronPython.SQLite
我的程序是一个GUI应用程序并访问sqlite数据库。当通过IronPython中的ipy.exe解释器启动程序时,所有内容(包括数据库访问)都非常完美。
但是,如果我尝试启动我用SharpDevelop编译成可执行文件的程序,我得到例外:
IronPython.Runtime.Exceptions.ImportException: 没有名为_sqlite3的模块
此异常的原因位于dbapi2.py:
中来自_sqlite3 import *
在IronPython控制台上,我可以导入_sqlite3并按预期使用它。
我已经向SharpDevelop提供了sqlite3模块的路径,但是在IronPython或sqlite3-module文件夹中没有任何名为_sqlite3的文件。
请告诉我在构建程序的编译版本时会出现什么问题。
非常感谢。
答案 0 :(得分: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位于同一目录中。无论如何,这是我的首选选项,我应该在有机会时将其添加到说明中。
答案 1 :(得分:3)
我已经预料到你会告诉我以某种方式引用DLL。
在几次失败后我能够成功编译程序,但包含DLL有点棘手。
import sys
import nt
import clr
sys.path.append(nt.getcwd())
clr.AddReferenceToFile('IronPython.SQLite.dll')
这是指向执行目录中的DLL的必要条件。
非常感谢你的帮助。