在setup.py中,我已将package_data指定为:
packages=['londontweetgrabber'],
package_dir={'londontweetgrabber': 'londontweetgrabber'},
package_data={'londontweetgrabber': ['data/data.db']},
我的目录层次结构大致如下:
londontweetgrabber/
|
| docs/
| ...
| londontweetgrabber/
|
| __init__.py
| authentication.py
| data
|
| data.db
|
| README
| setup.py
我想要做的是使用sqlite3在data.db中加载文件。试试这里找到的解决方案的变体(How do I use data in package_data from source code?)我可以验证数据现在正在加载,但是sqlite抱怨我不知道的表存在。我希望这个data.db文件与我正在编写的python包一起分发,因为我依赖它来做我想做的事。
我目前加载和无法加载sqlite的代码:
import sqlite3
import pkgutil
def get_conn():
data = pkgutil.get_data('londontweetgrabber', 'data/data.db')
print data
return sqlite3.connect(data)
由于
答案 0 :(得分:2)
您实际上已将数据(data.db
的内容)传递给sqlite3.connect()
。但是,它希望您的数据库路径如/data/data.db
。
该函数返回一个二进制字符串,该字符串是该内容 指定资源。
您可以使用pkg_resources.resource_filename()
为data.db
建立正确的文件系统路径:
import sqlite3
import pkg_resources
db_path = pkg_resouces.resource_filename('londontweetgrabber', 'data/data.db')
conn = sqlite3.connect(db_path)