пакет python, инициализирующий БД в никуда - PullRequest
0 голосов
/ 31 декабря 2018

Я использую эти инструкции для создания пакета:

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

Выполняется ли тестирование / до / запуск бина?

1 Ответ

0 голосов
/ 31 декабря 2018

Вы проверяли режим файла и владельца?

ls -la
...