ImportError: нет модуля с именем "pysqlite2" при запуске тестов в Python 3 Ubuntu
некоторый фон: у нас есть кодовая база, написанная на Python 3, которая использует пирамиду и SQLAlchemy ORM для сохранения в базе данных mysql. Для написания тестов для наших классов с помощью ORM мы используем Sqlite. Все это прекрасно работает вместе... в местном масштабе.
настройка нашего сервера Jenkins (Ubuntu) для запуска набора тестов, внутри virtualenv, мы сталкиваемся с проблемой. Тесты выполняются следующим образом:
coverage run --source src/ --omit=src/tests/ -m py.test
тесты, не связанные с ORM, в порядке. Те с ORM бросить эта ошибка:
____________________________________________________________ TestSGenre.test_get_all_success _____________________________________________________________
self = <tests.common.orm.models.test_s_genre.TestSGenre testMethod=test_get_all_by_discipline_success>
def setUp(self):
DBSession.remove()
> self.engine = setup()
source/src/tests/common/orm/models/test_s_genre.py:13:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
source/src/tests/common/orm/orm_setup.py:7: in setup
engine = create_engine('sqlite://', connect_args={'check_same_thread': False}, poolclass=StaticPool)
/var/www/hosts/company/virtualenv/swapenv/lib/python3.4/site-packages/sqlalchemy/engine/__init__.py:386: in create_engine
return strategy.create(*args, **kwargs)
/var/www/hosts/company/virtualenv/swapenv/lib/python3.4/site-packages/sqlalchemy/engine/strategies.py:74: in create
dbapi = dialect_cls.dbapi(**dbapi_args)
/var/www/hosts/company/virtualenv/swapenv/lib/python3.4/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py:339: in dbapi
raise e
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cls = <class 'sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite'>
@classmethod
def dbapi(cls):
try:
> from pysqlite2 import dbapi2 as sqlite
E ImportError: No module named 'pysqlite2'
/var/www/hosts/company/virtualenv/swapenv/lib/python3.4/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py:334: ImportError
проверка на sqlite3 (изнутри virtualenv) успешна:
(swapenv)user@jenkins:/var/lib/jenkins/workspace/SWAP_Unit_Test$ which sqlite3
/usr/bin/sqlite3
Это также успешно за пределами virtualenv. Мы попытались установить и переустановить все количество пакетов sqlite, sqlite-dev и т. д. Предположительно, библиотека Sqlite является частью Python 3, но тогда почему ее нельзя найти при запуске тестов?
2 ответов
вам не хватает модуля sqlite3 Python, который вы можете проверить с помощью:
bin/python -c 'import sqlite3'
The which sqlite3
команда показывает только, что у вас есть sqlite3
командная строка установлен; это не то, что Python использует. Он использует libsqlite3
общая библиотека (которую также использует инструмент командной строки). Если отсутствует, это означает, что Python не смог найти заголовки разработки SQLite при построении Python.
на Ubuntu, вам нужно установить libsqlite3-dev
чтобы получить эти заголовки.
возможно, Вам не хватает других зависимостей; на Ubuntu я бы установил:
libreadline6-dev
libbz2-dev
libssl-dev
libsqlite3-dev
libncursesw5-dev
libffi-dev
libdb-dev
libexpat1-dev
zlib1g-dev
liblzma-dev
libgdbm-dev
libmpdec-dev
некоторые из них являются пакетами ускорителей; Python будет работать без них, но некоторые модули будут медленнее (например,decimal
без mpdecimal
библиотека).
вы можете проверить Ubuntu Python 3.4 зависимости от исходного пакета для вашей версии Ubuntu.
запуск Debian Buster, я обнаружил ту же проблему с python3.6, хотя, python3.5 успешно импортирован sqlite3. И хотя модуль sqlite3 был установлен и должен был быть доступен python3.6. Моим решением было запустить
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/lib-dynload
по какой-то причине я еще не определил, каталог модуля для python3.6 Не загружается правильно для sqlite3. Это решение работало как внутри, так и вне виртуальной среды.