我使用以下说明创建包:
mypackage/bin
mypackage/bin/initialize_sqlite.sh
mypackage/mypackage/__init__.py
mypackage/mypackage/a_bunch_of_python.py
mypackage/mypackage/tests/__init__.py
mypackage/mypackage/tests/test_setup.py
mypackage/mypackage/maketables.sql
mypackage/setup.py
在哪里?
initialize_sqlite.sh
是
#!/usr/bin/env bash
sqlite3 my.db < ../mypackage/maketables.sql # creates a Users table
setup.py是
from setuptools import setup
setup(name='mypackage,
packages=['mypackage'],
scripts=['bin/initialize_sqlite.sh'],
install_requires=[
'pysqlite3'
],
test_suite='nose.collector',
tests_require=['nose'],
zip_safe=False)
from pathlib import Path
import mypackage
def get_project_root():
"""Returns project root folder.
"""
return Path(mypackage.__file__).parent.absolute()
ROOT = get_project_root()
DBFILE = str(ROOT.joinpath('my.db'))
我的mypackage/mypackage/tests/test_setup.py是:
from unittest import TestCase
import mypackage
from mypackage import utils
from pysqlite3 import dbapi2 as sqlite3
class TestSqlAccess(TestCase):
def test_sql_access(self):
conn = sqlite3.connect(utils.DBFILE)
db = conn.cursor()
s = db.execute("PRAGMA database_list").fetchall()
self.assertNotEqual(s, [])
s2 = db.execute("SELECT 1 from Users LIMIT 1").fetchall()
./bin/initialize_sqlite.sh
它很好地创造了
mypackage/my.db
如我所料。
pip install ./mypackage
当我看到:
ll /home/user/anaconda3/envs/myenv/lib/python3.6/site-packages/mypackage/my.db
它是空的,大小为0。
ERROR: test_sql_access (mypackage.tests.test_setup.TestSqlAccess)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/.../tests/test_setup.py", line 14, in test_sql_access
s2 = db.execute("SELECT 1 from Users LIMIT 1").fetchall()
pysqlite3.dbapi2.OperationalError: no such table: Users
我的安装箱或路径有什么问题?是不是找不到maketables.sql而没有悄悄地告诉我(所以它有效地找到了sqlite3 my.db