2015-03-12 10 views
8

कुछ पृष्ठभूमि: हमारे पास पाइथन 3 में एक कोडबेस लिखा गया है जो एक MySQL डेटाबेस पर बने रहने के लिए पिरामिड और एसक्लएल्चेमी ओआरएम का उपयोग करता है। ओआरएम का उपयोग करके हमारी कक्षाओं के लिए परीक्षण लिखने के लिए हम स्क्लाइट का उपयोग कर रहे हैं। यह सब एक साथ ठीक काम करता है ... स्थानीय रूप से।आयात त्रुटि: पाइथन 3 में परीक्षण चलाते समय 'pysqlite2' नामक कोई मॉड्यूल नहीं उबंटू

वर्चुअलनव के अंदर परीक्षण सूट चलाने के लिए हमारे जेनकिन्स (उबंटू) सर्वर को सेट अप करना, हम एक समस्या में भाग लेते हैं। परीक्षणों को इस प्रकार निष्पादित किया जाता है:

coverage run --source src/ --omit=src/tests/ -m py.test 

ओआरएम शामिल नहीं होने वाले टेस्ट ठीक हैं। ORM के साथ जो इस त्रुटि फेंक: (virtualenv अंदर से)

____________________________________________________________ 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 के लिए जांच की जा रही सफल हुआ:

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

यह भी virtualenv के बाहर सफल रहा है। हमने सभी प्रकार के स्क्लाइट पैकेज, एसक्लाइट-देव इत्यादि को स्थापित करने और पुनर्स्थापित करने का प्रयास किया है। माना जाता है कि स्क्लाइट लाइब्रेरी पायथन 3 का हिस्सा है, लेकिन फिर परीक्षणों को चलाने के दौरान यह क्यों नहीं मिल सकता है?

+2

'sqlite3' कमांड केवल दिखाता है कि आपके पास' sqlite3' कमांड लाइन उपकरण स्थापित है; यह पाइथन का उपयोग नहीं करता है। यह 'libsqlite3' साझा लाइब्रेरी का उपयोग करता है (जो कमांड लाइन टूल भी उपयोग करता है)। आपके पायथन बाइनरी कैसे संकलित किया गया था? आप 'sqlite3' पायथन मॉड्यूल खो रहे हैं ('bin/python -c' आयात sqlite3'' के साथ सत्यापित करें। –

+0

ध्यान दें कि' py.test' ट्रेसबैक भ्रामक है; यह लाइन 33 9 है जो अंतिम त्रुटि को बढ़ाती है, प्रदर्शित नहीं लाइन 334 (जो पकड़ा गया है); [ड्राइवर स्रोत कोड] देखें (https: // बिटबकेट।org/zzzeek/SQLAlchemy/src/bd61e7a3287079cf742f4df698bfe3628c090522/lib/SQLAlchemy/बोलियों/SQLite/pysqlite.py = मास्टर # सीएल-331) पर? यह 'sqlite3' के लिए आयात है जो यहां विफल रहता है। –

+0

जेनकींस स्क्रिप्ट का कोड पेस्ट करें? वर्चुअलenv कैसे सेट अप करते हैं? 1. वर्चुअलएन्व में स्थापित सभी निर्भरताओं की जांच करें। 2. सुनिश्चित करें कि आपका कवरेज सही वर्चुअलएनवी के अंदर चलता है। – Shuo

उत्तर

10

आप sqlite3 पायथन मॉड्यूल है, जो आप सत्यापित कर सकते हैं के साथ याद कर रहे हैं:

bin/python -c 'import sqlite3' 

which sqlite3 आदेश केवल आपको दिखाता है कि sqlite3कमांड लाइन टूल स्थापित; यह पाइथन का उपयोग नहीं करता है। यह libsqlite3 साझा लाइब्रेरी का उपयोग करता है (जो कमांड लाइन उपकरण भी उपयोग करता है)। यदि अनुपलब्ध है, तो इसका मतलब है कि जब आप पाइथन बनाते हैं तो पाइथन SQLite डेवलपर हेडर ढूंढने में सक्षम नहीं था।

उबंटू पर, आपको उन शीर्षकों को प्राप्त करने के लिए libsqlite3-dev इंस्टॉल करने की आवश्यकता है।

आप अन्य निर्भरताओं को याद कर सकते हैं; उबंटू पर मैं स्थापित करूंगा:

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

इनमें से कुछ त्वरक पैकेज हैं; पाइथन उनके बिना काम करेगा लेकिन कुछ मॉड्यूल धीमे हो जाएंगे (उदा। decimalmpdecimal library के बिना)।

आप अपने उबंटू संस्करण के लिए Ubuntu Python 3.4 source package dependencies सत्यापित करना चाह सकते हैं।

+0

आपकी सभी मदद के लिए धन्यवाद! –

0

डेबियन बस्टर चलाना, मैंने python3.6 के साथ एक ही समस्या की खोज की, हालांकि, python3.5 सफलतापूर्वक sqlite3 आयात किया गया। और भले ही sqlite3 मॉड्यूल स्थापित किया गया था और python3.6 के लिए उपलब्ध होना चाहिए था। मेरे समाधान

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

को चलाने के लिए किसी कारण मैं अभी तक निर्धारित नहीं किया है के लिए किया गया था, python3.6 के लिए मॉड्यूल निर्देशिका sqlite3 के लिए ठीक से लोड नहीं होती है। यह समाधान वर्चुअल वातावरण के अंदर और बाहर दोनों में काम करता था।

संबंधित मुद्दे