ImportError: No module named 'pysqlite2' when running tests in Python 3 Ubuntu
ImportError: No module named 'pysqlite2' when running tests in Python 3 Ubuntu
一些背景:我们有一个用 Python 3 编写的代码库,它使用 Pyramid 和 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 的一部分,但是为什么在测试 [=28] 时找不到它=]?
您缺少 sqlite3 Python 模块,您可以通过以下方式验证:
bin/python -c 'import sqlite3'
which sqlite3
命令仅显示您安装了sqlite3
命令行工具;这不是 Python 使用的。它使用 libsqlite3
共享库(命令行工具也使用)。如果丢失,则表示 Python 在构建 Python.
时无法找到 SQLite 开发 headers
在 Ubuntu 上,您需要安装 libsqlite3-dev
才能获得那些 headers。
您可能缺少其他依赖项;在 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
library)。
您可能需要验证您的 Ubuntu 版本的 Ubuntu Python 3.4 source package dependencies。
运行 Debian Buster,我发现 python3.6 也有同样的问题,尽管 python3.5 成功导入了 sqlite3。即使安装了 sqlite3 模块并且应该对 python3.6 可用。我的解决方案是 运行
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/lib-dynload
出于某种原因我还没有确定,python3.6 的模块目录没有为 sqlite3 正确加载。该解决方案在虚拟环境内外均有效。
一些背景:我们有一个用 Python 3 编写的代码库,它使用 Pyramid 和 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 的一部分,但是为什么在测试 [=28] 时找不到它=]?
您缺少 sqlite3 Python 模块,您可以通过以下方式验证:
bin/python -c 'import sqlite3'
which sqlite3
命令仅显示您安装了sqlite3
命令行工具;这不是 Python 使用的。它使用 libsqlite3
共享库(命令行工具也使用)。如果丢失,则表示 Python 在构建 Python.
在 Ubuntu 上,您需要安装 libsqlite3-dev
才能获得那些 headers。
您可能缺少其他依赖项;在 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
library)。
您可能需要验证您的 Ubuntu 版本的 Ubuntu Python 3.4 source package dependencies。
运行 Debian Buster,我发现 python3.6 也有同样的问题,尽管 python3.5 成功导入了 sqlite3。即使安装了 sqlite3 模块并且应该对 python3.6 可用。我的解决方案是 运行
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/lib-dynload
出于某种原因我还没有确定,python3.6 的模块目录没有为 sqlite3 正确加载。该解决方案在虚拟环境内外均有效。