Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x ImportError:没有名为';pysqlite2';在Python3 Ubuntu中运行测试时_Python 3.x_Sqlite_Sqlalchemy - Fatal编程技术网

Python 3.x ImportError:没有名为';pysqlite2';在Python3 Ubuntu中运行测试时

Python 3.x ImportError:没有名为';pysqlite2';在Python3 Ubuntu中运行测试时,python-3.x,sqlite,sqlalchemy,Python 3.x,Sqlite,Sqlalchemy,一些背景:我们有一个用Python3编写的代码库,它使用Pyramid和SqlAlchemy ORM持久化到mysql数据库。为了使用ORM为类编写测试,我们使用的是Sqlite。所有这些一起工作很好。。。在当地 在virtualenv中设置Jenkins(Ubuntu)服务器来运行测试套件时,我们遇到了一个问题。测试的执行方式如下: coverage run --source src/ --omit=src/tests/ -m py.test 不涉及ORM的测试是可以的。使用ORM的用户会抛

一些背景:我们有一个用Python3编写的代码库,它使用Pyramid和SqlAlchemy ORM持久化到mysql数据库。为了使用ORM为类编写测试,我们使用的是Sqlite。所有这些一起工作很好。。。在当地

在virtualenv中设置Jenkins(Ubuntu)服务器来运行测试套件时,我们遇到了一个问题。测试的执行方式如下:

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

它在虚拟电视之外也很成功。我们已尝试安装和重新安装所有数量的sqlite软件包、sqlite dev等。假定sqlite库是Python 3的一部分,但为什么在运行测试时找不到它呢?

您缺少sqlite 3 Python模块,您可以使用以下方法进行验证:

bin/python -c 'import sqlite3'

which sqlite3
命令仅显示安装了
sqlite3
命令行工具;这不是Python所使用的。它使用
libsqlite3
共享库(命令行工具也使用该库)。如果缺少,则表示在构建Python时Python无法找到SQLite开发头

在Ubuntu上,您需要安装
libsqlite3dev
才能获得这些头文件

您可能缺少其他依赖项;在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
没有它们)


您可能需要验证Ubuntu版本的安全性。

运行Debian Buster时,我发现python3.6也存在同样的问题,尽管python3.5成功导入了sqlite3。即使安装了sqlite3模块,python3.6也应该可以使用它。我的解决办法是跑步

export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/lib-dynload

由于某些原因,我还没有确定python3.6的模块目录对于sqlite3没有正确加载。此解决方案在虚拟环境内部和外部都有效。

哪个sqlite3命令只显示您安装了
sqlite3
命令行工具;这不是Python所使用的。它使用
libsqlite3
共享库(命令行工具也使用该库)。你的Python二进制代码是如何编译的?您缺少
sqlite3
Python模块(请使用
bin/Python-c'import sqlite3'
进行验证)。请注意
py.test
回溯有误导性;引发最终错误的是第339行,而不是显示的第334行(被捕获);请参阅;此处失败的是导入
sqlite3
。粘贴jenkins脚本的代码?包括如何设置virtualenv?1.检查是否在virtualenv中安装了所有依赖项。2.确保覆盖范围在正确的virtualenv中运行。
bin/python-c“导入sqlite3”
肯定无法加载导入。我不是不幸的是,我不确定python是如何编译的,但这似乎是问题的根源……这个问题:有足够的信息来找出如何用正确的库重新编译python。感谢@MartijnPieters的指针!如果你想给出答案,我很高兴奖励你。感谢你的帮助!这解决了问题ubu-16.04+蟒蛇3.5上的me
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.6/lib-dynload