Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

initenvで"global name 'sqlite' is not defined"

何だか、どうでもいいところ&今さらはまってますが。。。
sqlite3をソースからインストールした場合、trac-admin initenvで

$ trac-admin /path/to/trac initenv
              :
Creating and Initializing Project
Initenv for '/path/to/trac' failed.
 Failed to create environment.
global name 'sqlite' is not defined
Traceback (most recent call last):
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/admin/console.py", line 568, in do_initenv
    options=options)
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/env.py", line 188, in __init__
    self.create(options)
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/env.py", line 311, in create
    DatabaseManager(self).init_db()
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/db/api.py", line 70, in init_db
    connector.init_db(**args)
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/db/sqlite_backend.py", line 136, in init_db
    cnx = sqlite.connect(path, timeout=int(params.get('timeout', 10000)))
NameError: global name 'sqlite' is not defined
Initenv for '/path/to/trac' failed.
 1
Traceback (most recent call last):
  File "/usr/local/lib/python2.4/site-packages/Trac-0.11.1.ja1-py2.4.egg/trac/admin/console.py", line 573, in do_initenv
    sys.exit(1)
SystemExit: 1
$ 

なエラーが出ることがあります。これはpysqiteからダイナミックリンクされているライブラリであるlibsqlite3.so.0が見つからないために出るもののようです。

$ ldd /usr/local/lib/python2.4/site-packages/pysqlite2/_sqlite.so
        libsqlite3.so.0 => not found
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x004e5000)
        libc.so.6 => /lib/tls/libc.so.6 (0x0051a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0025f000)
$

ということで、

# echo /usr/local/lib >> /etc/ld.so.conf
# /sbin/ldconfig

してやる必要がありますね。。。

$ ldd /usr/local/lib/python2.4/site-packages/pysqlite2/_sqlite.so
        libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00bed000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x009a0000)
        libc.so.6 => /lib/tls/libc.so.6 (0x00111000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x003e9000)
$ 

これで無事initenv完了。

参考:ソフト/Bug Tracking/trac/RedHat - discypus


やっぱ、ソース/rpm混在かつ古い環境は面倒が多いなー。。。><