जब अजगर कर सकता है तब पाइस्टेस्ट मॉड्यूल आयात नहीं कर सकता है


114

मैं पायथन में एक पैकेज पर काम कर रहा हूं। मैं virtualenv का उपयोग करें। मैंने अपने virtualenv में .pth पथ में मॉड्यूल की जड़ तक पथ सेट किया है, ताकि मैं कोड विकसित करते समय पैकेज के मॉड्यूल को आयात कर सकूं और परीक्षण कर सकूं (प्रश्न 1: क्या यह एक अच्छा तरीका है?)। यह ठीक काम करता है (यहां एक उदाहरण है, यह वह व्यवहार है जो मैं चाहता हूं):

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rc import ns
>>> exit()
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello
command output: hello

हालाँकि, अगर मैं PyTest का उपयोग करने की कोशिश करता हूं, तो मुझे कुछ आयात त्रुटि संदेश मिलते हैं:

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ pytest
=========================================== test session starts ============================================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items / 1 errors 

================================================== ERRORS ==================================================
________________________________ ERROR collecting tests/test_ns.py ________________________________
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ns.py:2: in <module>
    from rc import ns
E   ImportError: cannot import name ns
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================= 1 error in 0.09 seconds ==========================================
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ which pytest
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest

मैं थोड़ा हैरान हूँ, ऐसा लग रहा है कि यह एक आयात त्रुटि को इंगित करता है, लेकिन पायथन इसे ठीक करता है इसलिए विशेष रूप से PyTest के साथ कोई समस्या क्यों है? कारण / उपाय (प्रश्न 2) के लिए कोई सुझाव? मैंने गुगली की और स्टैक-ओवरफ्लो किया 'इम्पोर्ट्योर: इम्पोर्ट नहीं कर सकता', प्यारेस्ट के लिए त्रुटि, लेकिन मुझे जो हिट मिली वह मिसिंग पायथन पथ और इस से संबंधित उपाय था, जो यहाँ समस्या नहीं लगती है। कोई सुझाव?

जवाबों:


117

उत्तर मिला:

__init__.pyयदि आप pytest का उपयोग करने की योजना बनाते हैं, तो TESTS वाले फ़ोल्डर में फ़ाइल न रखें। मेरे पास एक ऐसी फाइल थी, जिसे हटाने से समस्या हल हो गई।

यह वास्तव में PATH मुद्दे के दूसरे उत्तर के लिए टिप्पणियों में दफन किया गया था, जिसमें 'ImportError: No मॉड्यूल जिसका नाम YadaYadaYada' है, इसलिए मैंने इसे नहीं देखा, आशा है कि इसे यहां अधिक दृश्यता मिलेगी।


44
मजेदार। मेरे पास एक ही मुद्दा था और मुझे अपने परीक्षण फ़ोल्डर में इनट .py जोड़ना था ।
ईव।

5
: हाँ, यह एक सामान्य समाधान (भले ही यह आपके मामले में किया गया था), समझने के लिए क्यों इस पढ़ा जाना चाहिए नहीं है docs.pytest.org/en/latest/goodpractices.html#test-package-name
Juan

1
यह जानकारी गलत और भ्रामक है! Init .py को टेस्ट फोल्डर में जोड़ने के बाद सब कुछ ठीक हो गया
लियोनार्डो ऑस्टर

1
@ लियोनार्डो ऑस्टर आपके लिए गलत हो सकता है, लेकिन इसका मतलब यह नहीं है कि यह जानकारी सामान्य रूप से गलत है। मेरे मामले में इसने इस मुद्दे को हल किया।

79

मैं यह नहीं कह सकता कि मैं समझता हूं कि यह क्यों काम करता है, लेकिन मेरे पास एक ही समस्या थी और अगर मैं दौड़ता हूं तो परीक्षण ठीक काम करते हैं python -m pytest

मैं एक virtualenv में, pytest भी विश्व स्तर पर उपलब्ध है:

(proj)tom@neon ~/dev/proj$ type -a python
python is /home/tom/.virtualenvs/proj/bin/python
python is /usr/bin/python

(proj)tom@neon ~/dev/proj$ python -V
Python 3.5.2

(proj)tom@neon ~/dev/proj$ type -a pytest
pytest is /home/tom/.virtualenvs/proj/bin/pytest
pytest is /usr/bin/pytest

(proj)tom@neon ~/dev/proj$ pytest --version
This is pytest version 3.5.0, imported from /home/tom/.virtualenvs/proj/lib/python3.5/site-packages/pytest.py

1
मेरे लिए भी काम किया, बात यह है कि, यह अपने v.env के बजाय परिभाषित अजगर संस्करण द्वारा चलाया जाता है।
नेबुलसर

12
एक कारण यह हो सकता है कि python -m pytest [...]"वर्तमान निर्देशिका को भी जोड़ देगा sys.path।"
मिनट

Windows 10 में एक ही था, और चल अजगर -m pytest इसे हल
Duccio

इसने मेरे आभासी वातावरण के अंदर भी काम किया और मुझे भागना पड़ाpython3 -m pytest
ऋषि राज

@Minusf की टिप्पणी के आधार पर मैं PYTHONPATH=.:./src pytestएक लक्ष्य के रूप में उपयोग कर रहा हूं ।
ग्रथ

29

मैंने अभी अपने प्रोजेक्ट रूट में __init__.py को हटाकर इसे हल किया है:

.
├── __init__.py <--- removed
├── models
   ├── __init__.py
   ├── address.py
   ├── appointment.py
   └── client.py
├── requirements.txt
├── setup.cfg
├── tests
   ├── __init__.py
   ├── models
      ├── __init__.py
      ├── appointment_test.py
      └── client_test.py
   └── other_test.py
└── script.py

4
स्वीकृत उत्तर से __init__.py file in a folder containing TESTSमेरी समस्या हल नहीं हुई। यह एक काम किया। मुझे लगता है कि यह फ़ाइल पदानुक्रम के कारण है।
स्मिडो

मैंने __init__.pyफाइल निकाल दी है। मैं अभी भी समस्या का सामना कर रहा था। रूट निर्देशिका के लिए conftest.py फ़ाइल जोड़ना मेरे लिए काम किया।
विजय साली

मुझे उम्मीद है कि conftest.py में / परीक्षण होगा रूट नहीं
हारून मैकमिलिन

रूट डाइरेक्टरी में कॉन्फटेस्टहोम फाइल प्राप्त करना मेरे लिए भी तय है। परीक्षण निर्देशिका में init .py फ़ाइल नहीं है
अद्यतन

2
यह समाधान मेरे लिए काम करता है, लेकिन क्या किसी को पता है कि यह एक आयात त्रुटि का कारण होगा?
एल्डो ओकवेयर

19

मेरे पास एक ही समस्या थी लेकिन जिन कारणों का उल्लेख किया गया था, उनकी तुलना में एक और कारण:

मैंने py.test को विश्व स्तर पर स्थापित किया था, जबकि पैकेज एक आभासी वातावरण में स्थापित किए गए थे।

इसका समाधान pytestआभासी वातावरण में स्थापित करना था । (यदि आपका शेल हैश निष्पादन योग्य है, जैसा कि बैश करता है, उपयोग करें hash -r, या पूर्ण पथ का उपयोग करें py.test)


2
बस एहसास हुआ कि मैं एक ही डरपोक मुद्दा था, एनाकोंडा का उपयोग कर। मैं pytestद्वारा बनाए गए virtualenv में जोड़ना भूल गया conda, फिर भी pytestयह एनाकोंडा के मूल वातावरण में उपलब्ध है। इसलिए पाइटेस्ट पाया जा सकता है, लेकिन पर्यावरण में कोई भी पैकेज स्थापित नहीं किया गया है।
Overdrivr

1
मेरी भी यही समस्या थी। पाइस्टेस्ट विश्व स्तर पर स्थापित किया गया था और वर्चुअनव में नहीं। pip3 install pytestvirtualenv अंदर मुद्दा तय कर दिया।
अंकित सिंह

7

यदि आपके पास tests.pyफ़ाइल और परीक्षण फ़ोल्डर है तो यह समस्या होगी tests/__init__.py

संग्रह के दौरान pytest फ़ोल्डर को ढूँढता है, लेकिन जब वह फ़ोल्डर से परीक्षण फ़ाइलों को आयात करने का प्रयास करता है, तो tests.pyफ़ाइल आयात समस्या का कारण होगी।

बस tests.pyफ़ाइल को निकालने के लिए और अपने सभी परीक्षण tests/फ़ोल्डर के अंदर डाल दें ।

आपके विशिष्ट मामले के लिए ठीक हो जाएगा:

  • फ़ाइल को निकालें /home/zz/Desktop/GitFolders/rc/tests.py
  • सुनिश्चित करें कि /home/zz/Desktop/GitFolders/rc/tests/__init__.pyमौजूद है

4

मेरे पास एक समान मुद्दा था, सटीक एक ही त्रुटि, लेकिन अलग कारण। मैं परीक्षण कोड को ठीक चला रहा था, लेकिन मॉड्यूल के पुराने संस्करण के खिलाफ। मेरे कोड के पिछले संस्करण में एक वर्ग मौजूद था, जबकि दूसरा नहीं था। अपने कोड को अपडेट करने के बाद, मुझे इसे स्थापित करने के लिए निम्नलिखित रन करना चाहिए।

sudo pip install ./ --upgrade

अपडेट किए गए मॉड्यूल को स्थापित करने पर पाइस्टेस्ट चलाने से सही परिणाम मिलते हैं (क्योंकि मैं सही कोड बेस का उपयोग कर रहा था)।


1
यह मेरे लिए काम किया! मेरा मॉड्यूल उसी समय स्थापित था जब docker कंटेनर में लायब्रेरी के रूप में स्थापित किया गया था जिसका उपयोग मैं pytest चलाने के लिए कर रहा था। अजगर इंटरप्रेटर को चलाते समय इसे अपडेटेड कोड मिलेगा, लेकिन पाइएस्ट को उस कोड को ढूंढना जारी रहेगा जैसा कि लाइब्रेरी के पहली बार स्थापित होने पर हुआ था। रनिंग pip install ./ --upgradeने नवीनतम कोड के साथ लिब के इंस्टॉल किए गए संस्करण को अपडेट किया, और इस नवीनतम संस्करण को खोजने के लिए पूरी तरह से सक्षम किया।
FaustoW

4

मेरे मामले में, आयात त्रुटि हुई क्योंकि पैकेज उसी नाम के साथ किसी अन्य पैकेज / निर्देशिका को इंगित कर रहा है और इसका पथ उस फ़ोल्डर के ऊपर एक स्तर है जिसे मैं वास्तव में चाहता था। मुझे लगता है कि यह भी बताता है कि क्यों कुछ लोगों को _ init _.py हटाने की आवश्यकता है जबकि अन्य को वापस जोड़ने की आवश्यकता है।

मैं सिर्फ अंतर की तुलना करने के लिए कंसोल और स्क्रिप्ट दोनों में print(the_root_package.__path__)(बाद में import the_root_package) डालता हूंpythonpytest

बॉटम लाइन: जब आप करते हैं python, तो आपके द्वारा आयात किया जाने वाला पैकेज आपके द्वारा चलाए जाने वाले पैकेज से अलग हो सकता है pytest


3

संकुल को अपने आभासी वातावरण में स्थापित करें।
फिर एक नया शेल शुरू करें और अपने वर्चुअल वातावरण को फिर से सोर्स करें।


1
यह मेरी समस्या थी: वेव को फिर से लोड किए बिना एक ताजा स्थापित
फ्रीज किया

2

ऊपर दिया गया जवाब मेरे काम नहीं आया। मैंने इसे मॉड्यूल (जो आपके परीक्षण मॉड्यूल) के sys.pathशीर्ष पर नहीं मिला, के पूर्ण पथ को जोड़कर हल किया test_xxx.py, जैसे:

import sys
sys.path.append('path')

1
इन पंक्तियों को मेरे शीर्ष पर रखने के बजाय test_main.py, मैंने इसे conftest.pyअपनी परीक्षण निर्देशिका में डाल दिया , और इसने काम किया। फ़ाइल कूड़े के बजाय एक प्रोग्रामेटिक समाधान प्रदान करने के लिए धन्यवाद।
कैमरून हडसन

2

यदि यह अजगर कोड से संबंधित है जो मूल रूप से अजगर 2.7 में विकसित किया गया था और अब समस्या की तुलना में अजगर 3.x में स्थानांतरित हो गया है तो शायद यह एक आयात मुद्दे से संबंधित है।

उदाहरण के लिए, जब किसी फ़ाइल से कोई ऑब्जेक्ट आयात किया जाता है: baseजो उसी निर्देशिका में स्थित है तो यह अजगर 2.x में काम करेगा:

from base import MyClass

अजगर 3.x में आपको baseपूर्ण पथ के साथ प्रतिस्थापित करना चाहिए या .base ऐसा नहीं करना उपरोक्त समस्या का कारण होगा। इसलिए कोशिश करें:

from .base import MyClass

2

मैं आज इस मुद्दे का सामना कर रहा था और python -m pytestअपनी परियोजना निर्देशिका की जड़ से कॉल करके इसे हल किया ।

pytestएक ही स्थान से कॉल करना अभी भी समस्या का कारण बना।

मेरा प्रोजेक्ट डायर इस प्रकार है:

api/
 - server/
  - tests/
      - test_routes.py
  - routes/
      - routes.py
 - app.py

मॉड्यूल routesमेरे test_routes.pyरूप में आयात किया गया था :from server.routes.routes import Routes

उम्मीद है की वो मदद करदे!


अनुस्मारक के लिए धन्यवाद, मुझे अतीत में चाल का उपयोग करना पड़ा है और यह सबसे प्यारे दस्तावेज़ में है।
जेसन आर स्टीवंस CFA

1

एक और विशेष मामला:

मुझे विषाक्त का उपयोग करने में समस्या थी। तो मेरा कार्यक्रम ठीक चला, लेकिन विष के माध्यम से एकजुट शिकायत करता रहा। पैकेज (प्रोग्राम के लिए आवश्यक) स्थापित करने के बाद आपको विषैले.ini में उपयोग किए गए पैकेजों को अतिरिक्त रूप से निर्दिष्ट करने की आवश्यकता है

[testenv]
deps =
    package1
    package2 
...

1

मुझे यह VSCode का उपयोग करके मिल रहा था। मेरे पास कोंडा का माहौल है। मुझे नहीं लगता कि VScode अजगर विस्तार मैं देख रहा था अद्यतन कर सकता है।

python c:\Users\brig\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\testing_tools\run_adapter.py discover pytest -- -s --cache-clear test
Test Discovery failed:

मुझे दौड़ना पड़ा pip install ./ --upgrade


वह पिप कमांड एक त्रुटि देता है:Directory './' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.
डेरेक

1

अपना conftest.py संपादित करें और कोड की निम्नलिखित पंक्तियाँ जोड़ें:

import os, sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(file), '..')))

और अगर टर्मिनल के माध्यम से परीक्षण मामले को चलाने की कोशिश कर रहे हैं, तो निम्नलिखित का उपयोग करें:

python -m pytest test_some_step_file_steps.py --html=HTML_step_file_output.html --self-contained-html

NameError: name 'file' is not defined- किसके बराबर फाइल करनी चाहिए?
कोश्मार

1

फिर भी पायथन की आयात प्रणाली के लिए एक और बड़ी जीत। मुझे लगता है कि कोई सहमति नहीं होने का कारण यह है कि जो काम संभवत: आपके पर्यावरण और आपके द्वारा उपयोग किए जा रहे उपकरणों पर निर्भर करता है।

मैं वीएस कोड से इसका उपयोग कर रहा हूं, एक कंडरा वातावरण में विंडोज के तहत परीक्षण एक्सप्लोरर में, पायथन 3.8।

मुझे जो सेटअप काम करने के लिए मिला है वह है:

mypkg/
    __init__.py
    app.py
    view.py
tests/
    test_app.py
    test_view.py

इस सेटअप के तहत इंटेलीसेन्स काम करता है और इसी तरह परीक्षण खोज भी होती है।

ध्यान दें कि मैंने मूल रूप से निम्नलिखित की कोशिश की, जैसा कि यहां सुझाया गया है

src/
    mypkg/
        __init__.py
        app.py
        view.py
tests/
    test_app.py
    test_view.py

मुझे वीएस कोड से काम करने का कोई तरीका नहीं मिला क्योंकि srcफ़ोल्डर ने आयात प्रणाली के दिमाग को उड़ा दिया। मैं कल्पना कर सकता हूं कि कमांड लाइन से काम करने का यह एक तरीका है। पायथन प्रोग्रामिंग में अपेक्षाकृत नए रूप में यह मुझे COM के साथ काम करने का उदासीन अनुभव देता है, लेकिन थोड़ा कम मज़ेदार है।


1

इस पर मेरे 2 सेंट: अगर आप आभासी वातावरण का उपयोग नहीं कर रहे हैं तो पाइस्टेस्ट मौका पर विफल हो जाएगा। कभी-कभी यह सिर्फ काम करेगा, कभी-कभी नहीं।

इसलिए, समाधान है:

  • पाइप अनइंस्टॉल के साथ pytest निकालें
  • अपना वेनव्यू बनाएं
  • अपने वेनव को सक्रिय करें
  • पाइप आपके प्रोजेक्ट पथ को संपादन योग्य मोड में स्थापित करता है, इसलिए इसे pytest द्वारा एक मॉड्यूल के रूप में माना जाएगा (अन्यथा, pytest अभ्यस्त अपने आंतरिक आयातों को ढूंढें)। उसके लिए आपको एक सेटअप ओडीएफ फ़ाइल की आवश्यकता होगी
  • अपने संकुल को स्थापित करें, जिसमें pytest भी शामिल है
  • अंत में, अपने परीक्षण चलाएं

कोड, विंडोज़ का उपयोग कर PowerShell:

pip uninstall pytest
python.exe -m venv my_env
.\my_env\Scripts\activate
(my_env) pip install -e .
(my_env) pip install pytest pytest-html pandas numpy

फिर अंत में

(my_env) pytest --html="my_testing_report.html"

पाइप-इंस्टाल के लिए setup.py का एक उदाहरण:

import setuptools

setuptools.setup(
    name='my_package',
    version='devel',
    author='erickfis',
    author_email='erickfis@gmail.com',
    description='My package',
    long_description='My gooood package',
    packages=setuptools.find_packages(),
    classifiers=[
        'Programming Language :: Python :: 3',
        'Operating System :: OS Independent',
    ],
    include_package_data=True
)

1

मैं पोस्ट से असहमत हूं कि आप किसी भी __init__.pyफाइल को हटा दें । इसके बजाय आपको जो करना चाहिए वह है परिवर्तन sys.path

एक प्रयोग चलाएं जहां आप sys.pathकोड को सामान्य रूप से चलाते समय प्रिंट करते हैं। फिर sys.pathpytest के माध्यम से कोड चलाते समय प्रिंट करें । मुझे लगता है कि आप पाएंगे कि इन दोनों रास्तों में अंतर है, इसलिए पाइस्टेस्ट क्यों टूटता है।

इसे ठीक करने के लिए, दूसरे के 0 वें सूचकांक पर पहले प्रयोग से पथ डालें।

आज्ञा देना 1 '/usr/exampleUser/Documents/foo'का पहला तत्व print(sys.path)प्रयोग के लिए।

नीचे कोड है जो आपकी समस्या को ठीक करना चाहिए:

import sys sys.path[0] = '/usr/exampleUser/Documents/foo'

अपने वास्तविक आयात विवरण से पहले, इसे अपनी फ़ाइल के शीर्ष पर रखें।

स्रोत: मैं अपने आप से निपट रहा था और उपरोक्त प्रक्रिया ने इसे हल कर दिया।


1

सब कुछ समान रखा और बस रूट फ़ोल्डर में एक खाली परीक्षण फ़ाइल जोड़ी गई .. इसे हल किया

यहाँ निष्कर्ष हैं, इस समस्या ने मुझे कुछ समय के लिए रोक दिया। मेरी फ़ोल्डर संरचना थी

mathapp/
    - server.py  
    - configuration.py 
    - __init__.py 
    - static/ 
       - home.html  
tests/            
    - functional 
       - test_errors.py 
    - unit  
       - test_add.py

और Pytest ModuleNotFoundError के साथ शिकायत करेगा और HINT देता है - सुनिश्चित करें कि आपके परीक्षण मॉड्यूल / पैकेज में वैध पायथन नाम हैं।

मैंने मैथ्सएप्प और परीक्षण निर्देशिका के समान स्तर पर एक मॉक टेस्ट फ़ाइल पेश की। फ़ाइल में कुछ भी नहीं था। अब पाइस्टेस्ट शिकायत नहीं करता है।

फ़ाइल के बिना परिणाम

$ pytest
============================= test session starts =============================
platform win32 -- Python 3.8.2, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: C:\mak2006\workspace\0github\python-rest-app-cont
collected 1 item / 1 error

=================================== ERRORS ====================================
_______________ ERROR collecting tests/functional/test_func.py ________________
ImportError while importing test module 'C:\mainak\workspace\0github\python-rest-app-cont\tests\functional\test_func.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests\functional\test_func.py:4: in <module>
    from mathapp.service import sum
E   ModuleNotFoundError: No module named 'mathapp'
=========================== short test summary info ===========================
ERROR tests/functional/test_func.py
!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
============================== 1 error in 0.24s ===============================

फ़ाइल के साथ परिणाम

$ pytest
============================= test session starts =============================
platform win32 -- Python 3.8.2, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: C:\mak2006\workspace\0github\python-rest-app-cont
collected 2 items

tests\functional\test_func.py .                                          [ 50%]
tests\unit\test_unit.py .                                                [100%]

============================== 2 passed in 0.11s ==============================

इस मुद्दे के साथ लंबे समय के बाद मेरे लिए काम किया। ऐसा लगता है कि जब भी यह पहला परीक्षण फ़ाइल पाता है तो पाइस्टेस्ट परियोजना की जड़ का इलाज कर रहा है? निश्चित रूप से यह एक बग है?
ooyoyaya

1

मैं PYTHONPATHअपने परीक्षण चला रहा हूं, जो विशिष्ट कॉन्फ़िगरेशन के लिए पर्यावरण चर में सेट करके मैंने अपनी समस्या को हल किया।

जब आप PyCharm पर परीक्षण फ़ाइल देख रहे हैं:

  1. Ctrl+ Shift+A
  2. प्रकार Edit Configurations
  3. PYTHONPATHपर्यावरण के तहत अपने > पर्यावरण चर सेट करें ।

1

बस conftest.pyप्रोजेक्ट रूट डायरेक्टरी में एक खाली फाइल डालें , क्योंकि जब pytestएक कॉन्टेस्टेस्टहॉक पता चलता है, तो यह sys.path को संशोधित करता है ताकि यह conftestमॉड्यूल से सामान आयात कर सके । एक सामान्य निर्देशिका संरचना हो सकती है:

Root
├── conftest.py
├── module1
   ├── __init__.py
   └── sample.py
└── tests
    └── test_sample.py

1

एक समान मुद्दा था और यह तब काम किया जब मैंने __init__.pyपरीक्षण निर्देशिका के तहत फाइल को जोड़ा ।


0

यह हो सकता है कि पायथन पैकेज को पायथन मॉड्यूल के रूप में नहीं पढ़ रहा है जबकि पायथन को (पथ मुद्दों के कारण संभावना है)। पाइस्टेस्ट स्क्रिप्ट की निर्देशिका को बदलने या मॉड्यूल को स्पष्ट रूप से अपने PYTHONPATH में जोड़ने का प्रयास करें।

या यह हो सकता है कि आपके पास अपने मशीन पर स्थापित पायथन के दो संस्करण हों। अपने पायथन स्रोत को पाइस्टेस्ट के लिए और आपके द्वारा चलाए जाने वाले अजगर शेल के लिए देखें। यदि वे अलग हैं (यानी पायथन 2 बनाम 3), source activateतो यह सुनिश्चित करने के लिए उपयोग करें कि आप उसी अजगर के लिए स्थापित पाइस्टेस्ट चला रहे हैं जिसमें मॉड्यूल स्थापित है।


0

किसी के लिए भी जिसने सब कुछ करने की कोशिश की और अभी भी त्रुटि हो रही है, मेरे पास एक काम है।

उस फ़ोल्डर में जहां pytest इंस्टॉल किया गया है , pytest-env फ़ोल्डर पर जाएं।

Pyvenv.cfg फ़ाइल खोलें ।

फ़ाइल परिवर्तन में झूठ से सच तक सिस्टम-साइट-पैकेज शामिल हैं

home = /usr/bin
include-system-site-packages = true
version = 3.6.6

आशा है कि यह काम करेगा। मत भूलना।


0

यदि आपके पास पहले से .pyc फाइलें हैं, तो उन्हें हटाने का प्रयास करें।

आज, मैं इस समस्या का सामना कर रहा हूँ, यहाँ क्या है:

पहले मैं pytest को मैक में चलाता हूं (यह pyc files जेनरेट करेगा) तो मैं एक डॉक कंटेनर (os अल्पाइन) लॉन्च करता हूं, जिसमें प्रोजेक्ट dir माउंट होता है, और फिर जब मैं कंटेनर में pytest चलाने की कोशिश करता हूं, तो ImportError होता है। सभी pyc फ़ाइलों को साफ करने के बाद, कोई त्रुटि नहीं।

आशा है कि यह मददगार हो सकता है।


0

यदि आप एक की जरूरत है init अपने फ़ोल्डर में .py फ़ाइल फ़ोल्डर और हटाने की एक प्रतिलिपि बनाने init अपने परीक्षण में यह स्थानीय परियोजनाओं के लिए काम करता है चलाने के लिए है कि एक में .py। यदि आपको नियमित रूप से परीक्षण चलाने की आवश्यकता है, तो देखें कि क्या आप अपने init .py को एक अलग फ़ाइल में स्थानांतरित कर सकते हैं ।


0

[हल] हटाने / जोड़ने के समाधान में सीधे कूदने से पहले __init__.py, हम यह भी देखना चाहते हैं कि आपकी कक्षाओं में आयात कैसे किया जाता है। वास्तव में, मैंने एक दिन सिर्फ इस __init__.pyसोच के साथ खेलता हुआ खो दिया कि समस्या हो सकती है :) हालाँकि, यह काफी जानकारीपूर्ण थी।

मेरे मामले में, यह एक अजगर वर्ग से दूसरे अजगर वर्ग को कॉल करने का गलत तरीका था जो फेंक रहा था ImportError। जिस तरह से कक्षाएं / मॉड्यूल को बुलाया जाना तय किया और यह आकर्षण की तरह काम किया। आशा है, यह दूसरों को भी मदद करता है।

और हां, समान त्रुटि के लिए, हमारे पास कोड लिखे जाने के आधार पर अलग-अलग समाधान हो सकते हैं। स्व डिबगिंग पर अधिक समय बिताने के लिए बेहतर है। सबक सीखा :) हैप्पी कोडिंग !!!


1
क्या आप गलत तरीके और सही तरीके के कुछ उदाहरण दे सकते हैं?
लुरिफ़ैक्सेल

0

मेरे मामले में मैं एक कंटेनर में काम कर रहा हूं और दुर्भाग्य से पाइस्टेस्ट में मेरी पसंद के अजगर 3 दुभाषिया के बजाय python2.7 का उपयोग करने की प्रवृत्ति है।

मेरे मामले में यह काम किया:

python3 -m pytest

मेरी फ़ोल्डर संरचना

/
app/
-module1.py
-module2.py
-tests/
--test_module1.py
--test_module2.py
requirements.txt
README.md

-1

मैंने अपने सभी परीक्षण एक परीक्षण फ़ोल्डर में रखे थे और वही त्रुटि हो रही थी। मैंने इसे इस तरह से फ़ोल्डर में एक inpy .py जोड़कर हल किया :

.
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- api
|-- app.py
|-- config.py
|-- migrations
|-- pull_request_template.md
|-- settings.py
`-- tests
    |-- __init__.py <------
    |-- conftest.py
    `-- test_sample.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.