在 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)
谢谢
最佳答案
您实际上是将数据(data.db
的内容)传递给sqlite3.connect()
。然而,它需要一个像 /data/data.db
这样的数据库路径。
The function returns a binary string that is the contents of the specified resource.
您可以使用 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)
关于python - 在Python发行版中加载sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25270817/