2010-08-18 21 views
5

Sto lavorando con SharpDevelop 3.2.0, IronPython 2.6.1 per .Net4.Utilizzo di sqlite3 con IronPython 2.6 per .Net4

Per avere accesso alle funzionalità sqlite3 utilizza questo modulo per IronPython: IronPython.SQLite

Il mio programma è un'applicazione GUI e accedere a un database SQLite. Quando si avvia il programma tramite l'interprete ipy.exe da IronPython tutto (incluso l'accesso al database) funziona perfettamente.

Ma se provo ad avviare il programma ho compilato con SharpDevelop ad un eseguibile, ottengo l'eccezione:

IronPython.Runtime.Exceptions.ImportException: No module named _sqlite3

la ragione di questa eccezione si trova in dbapi2.py:

da import _sqlite3 *

Sulla console IronPython, è possibile importare _sqlite3 e utilizzarlo come previsto.

Ho già fornito a SharpDevelop i percorsi per il modulo sqlite3, ma non c'è alcun file chiamato _sqlite3 in qualsiasi punto di IronPython o della cartella sqlite3-module.

Per favore dimmi cosa potrebbe causare questo problema quando si costruisce una versione compilata del mio programma.

Grazie mille.

risposta

4

Non esiste un file _sqlite3 in nessun luogo; IronPython.Sqlite.dll fornisce un modulo chiamato _sqlite3.

Se si seguono le istruzioni del sito Web e si inserisce IronPython.Sqlite.dll nella cartella DLLs, è probabilmente il motivo per cui non funziona in SharpDevelop. Quando si esegue ipy.exe, aggiunge implicitamente un riferimento a qualsiasi DLL nella cartella DLLs. Quando SharpDevelop crea un eseguibile, è un piccolo stub che esegue IronPython, ma non conosce alcuna versione installata di IronPython e quindi non carica nulla dalla cartella DLLs.

Il tuo migliore è di modificare lo script principale per includere

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

e quindi assicurarsi che IronPython.SQLite.dll si trova nella stessa directory del file exe. Questa è comunque la mia opzione preferita, e dovrei aggiungerla alle istruzioni quando ne avrò la possibilità.

3

Mi aspettavo già che mi dicessi di fare riferimento in qualche modo alla DLL.

Dopo alcuni errori sono riuscito a compilare correttamente il programma, ma era un po 'più complicato includere la DLL.

  1. Ho aggiunto la DLL in Riferimenti SharpDevelop.
  2. ho dovuto aggiungere seguente codice al mio script:

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

Questo è stato il caso di ricordare alla DLL nella mia directory di esecuzione.

Grazie mille per il vostro aiuto.