कुछ कार्यात्मक परीक्षणों के लिए, मैं पाइथन के subprocess.call
(या check_call
का उपयोग करके प्रोजेक्ट निर्देशिका से सीधे कुछ उपयोगिताओं का आह्वान करता हूं जो बाद वाले को आमंत्रित करता है)। यह अच्छी तरह से काम करता है जब पुस्तकालय (विशेष रूप से PyYAML) वैश्विक स्तर पर स्थापित होते हैं। वर्चुअलएन्व में चलना, जैसे ट्रैविस-सीआई के तहत, समस्याएं पैदा करता है, खासकर यदि वर्चुअलएन्व पायथन 3.x चला रहा है और वैश्विक पायथन 2.7 है।वर्चुअलनव और सबप्रोसेस.call() 2.7/3.3 पर्यावरण
यदि दोनों पायथन 2.7 हैं, तो मुझे अभी भी env
तर्क subprocess.call
का उपयोग करके वर्चुअलएव के भीतर PyYAML के स्थान को इंजेक्ट करना था, ताकि आयातकर न हो। हालांकि, वर्चुअलनव 3.x है जब यह काम नहीं करता है। यह virtualenv बाहर लाया उपयोगिता रन प्रतीत होता है क्योंकि इसके sys.path
इस प्रकार दिखता है:
'/home/travis/build/jmafc/Pyrseas/pyrseas', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.35-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pip-1.3.1-py2.7.egg', '/home/travis/build/jmafc/Pyrseas', '/home/travis/virtualenv/python3.3/lib/python3.3/site-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/setuptools-0.6c11-py2.7.egg-info', '/usr/lib/python2.7/dist-packages']
सूचना 2.7 और 3.3 रास्तों में से मिश्रण, बाद स्पष्ट रूप से इंजेक्शन की जा रही जैसा कि ऊपर उल्लेख।
क्या virtualenv
या subprocess
फ़ंक्शंस में कुछ तरीका है यह सुनिश्चित करने के लिए कि उपप्रोसेसर वर्चुअलएन्व "अंदर" चलाता है?
क्या आप हमें subprocess.call के लिए अपना कोड दिखा सकते हैं? – jterrace
आप 'dbMigrateTestCase.create_yaml'' (उदाहरण के लिए) में कोड [यहां] (https://github.com/jmafc/Pyrseas/blob/master/pyrseas/testutils.py) पा सकते हैं। –