Я использую эти инструкции для создания пакета:
https://python -packaging.readthedocs.io / en / latest / command-line-scripts.html
У меня есть такая установка в пакете:
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)
Иutils.py is
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
Выполняется ли тестирование / до / запуск бина?