2015-03-12 19 views
8

Bazı arka plan: Python 3'te Pyramid ve SqlAlchemy ORM kullanan ve mysql veritabanına devam etmek için kullanılan bir kod tabanımız var. ORM kullanarak sınıflarımız için testler yazmak için Sqlite kullanıyoruz. Bütün bunlar gayet iyi çalışıyor ... yerel olarak.ImportError: Python 3 Ubuntu 'da test çalıştırırken' pysqlite2 'adında bir modül yok. Ubuntu

Test paketini çalıştırmak için Jenkins (Ubuntu) sunucumuzu kurmak, bir virtualenv içinde, bir sorunla karşılaşırız. Testler şu şekilde uygulanır: ORM'yi içermeyen testler iyidir. ORM olanlar bu hatayı atmak: (virtualenv içinden) sqlite3 denetleniyor

____________________________________________________________ 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 

başarılıdır:

(swapenv)[email protected]:/var/lib/jenkins/workspace/SWAP_Unit_Test$ which sqlite3 
/usr/bin/sqlite3 

Ayrıca virtualenv dışında başarılıdır. Sqlite kütüphanesi Python 3'ün bir parçası olduğu iddia edilen tüm sqlite paketleri, sqlite-dev, vs. dosyalarını yüklemeyi ve yeniden yüklemeyi denedik, ancak daha sonra testler çalıştırıldığında neden bulunamıyor?

+2

"sqlite3" komutunun sadece "sqlite3" komut satırı aracının yüklü olduğunu gösterir; Bu Python'un kullandığı değil. 'Libsqlite3' paylaşılan kütüphanesini kullanır (komut satırı aracı da kullanır). Python ikiliniz nasıl derlendi? 'Sqlite3' Python modülünü eksik (' bin/python -c 'import sqlite3'' ile doğrulayın.) –

+0

'py.test' traceback'in yanıltıcı olduğunu not edin, görüntülenen değil, son hatayı veren 339 satırıdır. hat 334 (yakalanan), bkz. [sürücü kaynak kodu] (https: // bitbucket.org/zzzeek/sqlalchemy/src/bd61e7a3287079cf742f4df698bfe3628c090522/lib/sqlalchemy/ağızları/oracle/pysqlite.py = ana # cl-331) de; Burada başarısız olan sqlite3'ün ithalatıdır. –

+0

jenkins komut dosyasının kodunu yapıştırın mı? Virtualenv nasıl kurulur? 1. virtualenv'de yüklü tüm bağımlılıkları kontrol edin. 2. Kapsamınızın doğru virtualenv içinde çalıştığından emin olun. – Shuo

cevap

10

Sen ile kontrol edebilirsiniz Sqlite3 Python modülü, eksik:

bin/python -c 'import sqlite3' 

which sqlite3 komut yalnızca yüklü sqlite3komut satırı aracı var göstermektedir; Bu Python'un kullandığı değil. libsqlite3 paylaşılan kütüphanesini (komut satırı aracının da kullandığı) kullanır. Eğer eksikse, Python Python'u oluşturduğunuzda SQLite geliştirme başlıklarını bulamadı demektir.

Ubuntu'da, bu başlıkları almak için libsqlite3-dev yüklemeniz gerekir.

Diğer bağımlılıkları kaçırıyor olabilirsiniz; Ubuntu'yu yükledim:

libreadline6-dev 
libbz2-dev 
libssl-dev 
libsqlite3-dev 
libncursesw5-dev 
libffi-dev 
libdb-dev 
libexpat1-dev 
zlib1g-dev 
liblzma-dev 
libgdbm-dev 
libmpdec-dev 

Bunlardan bazıları hızlandırıcı paketleri; Python onlarsız çalışır ancak bazı modüller daha yavaş olacaktır (örneğin mpdecimal library olmadan decimal).

Ubuntu sürümünüz için Ubuntu Python 3.4 source package dependencies numarasını doğrulamak isteyebilirsiniz.

+0

Yardımlarınız için teşekkürler! –

0

Debian Buster'ı çalıştırırken python3.6 ile aynı sorunu keşfettim, python3.5 başarıyla sqlite3'ü içe aktardı. Ve sqlite3 modülü kurulmuş ve python3.6 için mevcut olmalıydı. Benim çözümüm Henüz belirlenmiş değil Nedense

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

çalıştırmak oldu python3.6 için modül dizini sqlite3 için doğru yerleştirildiğinden almaz. Bu çözüm, sanal ortamların içinde ve dışında çalıştı.