作者:农夫三拳 | 来源:互联网 | 2023-05-18 11:19
一些背景知识:我们有一个用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 =
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 =
@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的一部分,但是为什么在运行测试时无法找到它?
1> Martijn Piet..:
您缺少sqlite3 Python模块,您可以使用以下方法验证:
bin/python -c 'import sqlite3'
该which sqlite3
命令仅显示已安装sqlite3
命令行工具 ; 这不是Python使用的.它使用libsqlite3
共享库(命令行工具也使用).如果缺少,则意味着Python在构建Python时无法找到SQLite开发头文件.
在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版本的Ubuntu Python 3.4源代码包依赖项.