"'परीक्षण' मॉड्यूल गलत तरीके से आयातित" का क्या अर्थ है?


82

मैंने लाइन से एक काम कर रहे परीक्षण लाइन की नकल की है और बस कुछ नाम बदल दिए हैं (कम से कम इसलिए मैंने सोचा था) और अब मुझे यह बहुत ही गंभीर त्रुटि मिलती है: (मैंने कुछ सामान को FOO, BAR के साथ बदल दिया है)

ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

समस्या यह है कि मुझे त्रुटि बिल्कुल समझ में नहीं आती है। इस त्रुटि का क्या संदेश है?

पूर्ण स्टैकट्रेस:

Traceback (most recent call last):
  File "BAR/modeling/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle
    failures = test_runner.run_tests(test_labels)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 531, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 451, in build_suite
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 206, in discover
    tests = list(self._find_tests(start_dir, pattern))
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

क्या आप पूरा स्टैक ट्रेस पोस्ट कर सकते हैं?
डैनियल हेपर

कृपया शामिल फ़ाइल पेड़ को जोड़ने के लिए, संरचना की जाँच करने के लिए और फ़ाइल जहाँ आप आयात करने की कोशिश कर रहे हैंtests
trinchet

जवाबों:


207

मेरे अनुभव में, अजीब इम्पोर्टर्स जब रनिंग टेस्ट्स होते हैं, तो इम्पोर्ट मॉड्यूल में एक इम्पोर्टयूरर के कारण होता है।

सुनिश्चित करें कि आपके परीक्षण मॉड्यूल को आयात किया जा सकता है:

$ python manage.py shell
...
>>> import foo.exports.tests

संपादित करें:

यदि वह त्रुटि का कारण बनता है, तो सुनिश्चित करें कि आपके पास निर्देशिका foo/exports/testsऔर फ़ाइल दोनों नहीं हैंfoo/exports/tests.py


हां यह कहता है कि ऐसा कोई मॉड्यूल नहीं है। लेकिन फाइल वहीं है। मैं और क्या कर सकता हुँ?
३०'१६

62
क्या आपके पास शायद एक निर्देशिका foo/exports/testsऔर एक फाइल दोनों है foo/exports/tests.py?
डेनियल हेपर

47
ओह, वहाँ एक Django automagic tests.pyफ़ाइल थी। अच्छा पकड़ा। और क्या एक गुप्त त्रुटि संदेश ... :(
jonalv

9
डीजैंगो ऑटोमैटिक परीक्षणों ने मुझे भी पकड़ा
डॉ। मैनहट्टन

2
आपका संपादन मुझे बचा रहा है! स्टार्टअप को चलाने के दौरान django ने एक test.py फ़ाइल बनाई। मैं खोल में tests.py आयात करने में सक्षम था
डैनियल बटलर

71

जैसा कि ऊपर एक टिप्पणी में डैनियल हेपर ने कहा, यह जांचने का प्रयास करें कि क्या आपके पास अपने ऐप में एक app/testsफ़ोल्डर और एक app/tests.pyफ़ाइल दोनों है ।

Django स्वचालित रूप से startappएक tests.pyफ़ाइल बनाता है इसलिए ऐसी कोई फ़ाइल हो सकती है जिस पर आपने ध्यान नहीं दिया हो।

यदि आप बस स्वचालित रूप से उत्पन्न tests.pyफ़ाइल को हटाते हैं , तो यह काम करना चाहिए। (स्पष्ट रूप से आपको कुछ भी हटाने से पहले फ़ाइल की सामग्री की जांच करनी चाहिए!)


1
विस्मयकारी महोदय, यह मेरा समय बचाता है: *
उस्मा नदीम

5

यदि आपने परीक्षण नाम की एक निर्देशिका बनाई है और उसके अंदर परीक्षण फ़ाइलें लिखी हैं, उदाहरण के लिए, test_views.py, test_models.py, आदि सुनिश्चित करें कि आप 'python manage.py' कमांड द्वारा स्वचालित रूप से बनाई गई फ़ाइल 'test.py' को हटा दें। startapp '


1

बस संभव मामलों की सूची में जोड़ने के लिए।

यह एक वर्चुअल एनवी के अंदर भी हो सकता है जब आप जिस पैकेज पर होते हैं वह स्थानीय रूप से स्थापित होता है।

उस स्थिति में, आपको केवल उस कमांड को अनइंस्टॉल करने की आवश्यकता है जिसे "री-लिंक" स्थापित किया गया था (मैं सही शब्द नहीं जानता) कमांड का उपयोग करके

~/dev/stufflib% pip uninstall stufflib
~/dev/stufflib% python setup.py develop
~/dev/stufflib% python setup.py test

1

यह जाँचने का प्रयास करें कि क्या आपके पास एक app/testsफ़ोल्डर और एक ऐप / test.py दोनों हैं

अपने ऐप में फाइल करें।

डिफ़ॉल्ट रूप से एक फ़ाइल को स्वचालित रूप से कहा जाता है tests.pyइस फ़ाइल को हटाएं यह त्रुटि हल हो जाएगी


0

मेरे मामले में समस्या इसलिए थी क्योंकि मैंने प्रोजेक्ट के साथ सिम्क्लिन से फ़ोल्डर में django परीक्षण कार्य शुरू करने की कोशिश की थी, न कि "वास्तविक" पथ से। जब मैं प्रोजेक्ट फ़ोल्डर से django परीक्षण कार्य को सिमलिंक का उपयोग नहीं करता हूं तो मुझे यह त्रुटि नहीं मिलती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.