[Distutils] pysqlite egg problem
Phillip J. Eby
pje at telecommunity.com
Sat Nov 5 17:28:54 CET 2005
At 12:02 PM 11/5/2005 +0000, Robin Becker wrote:
>I'm trying to follow the Turbogears wiki20, but I came across a problem
>with pysqlite.
>
>First off I am a complete newbie to the easy_setup and egg stuff and
>also have zero knowledge of pysqlite, but assuming that the filename I
>chose didn't have to exist I found that TG's tg-admin sql create failed.
>
>I assumed I needed to get some sort of database set up first so tried
>this to learn about pyslite
>
>C:\Tmp\wiki20>python
>Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on
>win32
>Type "help", "copyright", "credits" or "license" for more information.
> >>> from pysqlite2 import dbapi2 as sqlite
>Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File
>"c:\python\lib\site-packages\pysqlite-2.0.6-py2.4-win32.egg\pysqlite2\dbapi2.py",
>
>line 32, in ?
> File
>"c:\python\lib\site-packages\pysqlite-2.0.6-py2.4-win32.egg\pysqlite2\_sqlite.py",
>
>line 7, in ?
> File
>"c:\python\lib\site-packages\pysqlite-2.0.6-py2.4-win32.egg\pysqlite2\_sqlite.py",
>
>line 6, in __bootstrap__
>ImportError: DLL load failed: The specified module could not be found.
> >>>
>
>I checked in the egg and the dll is certainly there as
>lib/site-packages/pysqlite2/sqlite3.dll
That's the problem: it should just be pysqlite2/sqlite3.dll; the
lib/site-packages is extraneous. It appears that the way that pysqlite
chooses to install the DLL is as a data file with an absolute
path. Unfortunately, setuptools has limited ability to virtualize such
paths, and the way pysqlite's setup script is setting that path is
non-standard, as it's using backslash path separators rather than
slashes. I'll have to look into whether there's some kind of workaround I
can do.
The other issue is that either the DLL needs to be listed in the egg's
"eager resources", or else the whole egg needs to be marked as not zip-safe
(i.e. it must be installed uncompressed). I suppose I should also look at
automatically detecting .dll and .so files that are listed as data files,
as that's what's happening here. (That is, the sqlite3.dll file is listed
as a data file.)
As a workaround for now, run this:
easy_install -UZ pysqlite
which will "upgrade" (reinstall) the egg in unzipped form. Then, move the
sqlite3.dll file to the pysqlite2 subdirectory under the .egg
directory. That should get you working for now.
More information about the Distutils-SIG
mailing list