পাইথেষ্ট পাইথন মডিউল আমদানি করতে পারে না


128

আমি পাইথনের একটি প্যাকেজে কাজ করছি। আমি ভার্চুয়ালেনভ ব্যবহার করি। আমি আমার ভার্চুয়ালেনভের একটি .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

তবে আমি যদি পাইটেষ্ট ব্যবহার করার চেষ্টা করি তবে আমি কিছু আমদানি ত্রুটি বার্তা পেয়েছি:

(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

আমি কিছুটা বিস্মিত হয়েছি, দেখে মনে হচ্ছে এটি কোনও আমদানি ত্রুটি দেখায়, কিন্তু পাইথন এটি ঠিক করে তোলে তাই কেন পাইটস্টের সাথে বিশেষত সমস্যা আছে? কারণ / প্রতিকার সম্পর্কে কোন পরামর্শ (প্রশ্ন ২)? পাইগেষ্টের জন্য আমি 'আমদানি ত্রুটি: আমদানি করতে পারি না' ত্রুটিটি গুগল করেছি এবং স্ট্যাক-ওভারফ্লো করেছি, তবে আমি যে হিটগুলি পেয়েছি তা অজগর পথ এবং এর প্রতিকারের সাথে সম্পর্কিত যা এখানে সমস্যা বলে মনে হয় না। কোনও পরামর্শ?

উত্তর:


127

উত্তর খুঁজে পেয়েছি:

__init__.pyযদি আপনি পাইস্টেস্ট ব্যবহারের পরিকল্পনা করেন তবে টেস্টসযুক্ত একটি ফোল্ডারে কোনও ফাইল রাখবেন না। আমার কাছে এ জাতীয় একটি ফাইল ছিল, এটি মুছে ফেলা সমস্যার সমাধান করে।

এটি পাইট ইস্যুটির দ্বিতীয় উত্তরের মন্তব্যগুলিতে আসলে সমাহিত হয়েছিল 'ইম্পোর্টেরিয়ার: ইয়াদায়দায়েদা নামে কোনও মডিউল' তাই আমি এটি দেখিনি, আশা করি এটি এখানে আরও দৃশ্যমানতা পেয়েছে।


54
হাস্যকর. আমার একই সমস্যা ছিল এবং আমাকে আমার পরীক্ষার ফোল্ডারে init .py যুক্ত করতে হয়েছিল।
ইভ।

7
: হ্যাঁ, এই একটি সাধারণ সমাধান (যদিও এটা আপনার ক্ষেত্রে ছিল না) বুঝতে কেন এই পড়তে হবে নয় docs.pytest.org/en/latest/goodpractices.html#test-package-name
জুয়ান

4
এই তথ্যটি ভুল এবং বিভ্রান্তিকর! পরীক্ষার ফোল্ডারে init .py যুক্ত করার পরে সবকিছু ঠিকঠাক কাজ করেছে
লিওনার্দো ওস্তান

4
@ লিওনার্দোও আপনার পক্ষে এটি ভুল হতে পারে, তবে এর অর্থ এই নয় যে এই তথ্যটি সাধারণভাবে ভুল। আমার ক্ষেত্রে এটি সমস্যার সমাধান করেছে।
হতাশ 13

90

আমি এটি বলতে পারি না কেন আমি বুঝতে পেরেছি এটি কেন কাজ করে তবে আমার একই সমস্যা ছিল এবং পরীক্ষাগুলি ঠিকঠাকভাবে চালিত হলে python -m 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

4
আমার জন্য কাজটিও করেছে, জিনিসটি হ'ল, এটি আপনার ভি.এনভি-র পরিবর্তে অজগর সংস্করণ দ্বারা সংজ্ঞায়িত হবে।
নেবুলোসার

14
একটি কারণ হতে পারে যে python -m pytest [...]"বর্তমান ডিরেক্টরিটি এতে যুক্ত করবে sys.path"।
minusf

উইন্ডোজ 10 একই ছিল, এবং চলমান পাইথন -m pytest এটা মীমাংসিত
Duccio

এটি আমার ভার্চুয়াল পরিবেশের জন্যও চালাতে হয়েছিলpython3 -m pytest
ষি রাজ

@ মিনুফের মন্তব্যের ভিত্তিতে আমি PYTHONPATH=.:./src pytestএকটি মেক টার্গেট হিসাবে ব্যবহার করছি ।
জান গ্রোথ

32

আমি আমার প্রকল্পের মূলের __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ফাইল সরিয়েছি আমি তখনও সমস্যার মুখোমুখি ছিলাম। রুট ডিরেক্টরিতে কনফেস্ট.পি ফাইল যুক্ত করা আমার পক্ষে কাজ করেছে।
বিজয় সালি

আমি আশা করব কনটেস্ট.পি. / পরীক্ষাগুলি মূলের মধ্যে নয়
অ্যারন ম্যাকমিলিন

রুট ডিরেক্টরিতে কনটেস্ট.পি ফাইলটি পাওয়া আমার পক্ষে এটি স্থির করে। পরীক্ষাগুলি ডিরেক্টরিতে কোনও init .py ফাইল নেই
আপডেট করুন

4
এই সমাধানটি আমার পক্ষে কাজ করেছে তবে কেউ কি জানেন যে এটি কোনও আমদানির ত্রুটির কারণ হতে পারে?
অ্যালডো ওকেওয়্যার

21

আমার একই সমস্যা ছিল তবে উল্লিখিত সমস্যাগুলির চেয়ে অন্য কারণে:

ভার্চুয়াল পরিবেশে প্যাকেজগুলি ইনস্টল করা অবস্থায় আমি বিশ্বব্যাপী পাইস্টেস্ট ইনস্টল করেছিলাম।

সমাধানটি ছিল pytestভার্চুয়াল পরিবেশে ইনস্টল করা । (আপনার শেলটি এক্সিকিউটেবল হ্যাশ করার ক্ষেত্রে, যেমন ব্যাশ ব্যবহার করে, ব্যবহার করতে পারে hash -rবা পুরো পথটি ব্যবহার করে py.test)


4
ঠিক বুঝতে পেরেছিলাম যে অ্যানাকোন্ডা ব্যবহার করে আমারও একই ছদ্মবেশী সমস্যা রয়েছে। আমি pytestতৈরি করা ভার্চুয়ালেনভ যুক্ত করতে ভুলে গেছি conda, তবে pytestএটি অ্যানাকোন্ডার মূল পরিবেশে উপলব্ধ। অতএব pytest পারে পাওয়া যাবে, কিন্তু না কোনো প্যাকেজ পরিবেশে ইনস্টল করা নেই।
ওভারড্রাইভার

4
আমারও একই প্রশ্ন ছিল. পাইস্টেস্ট বিশ্বব্যাপী ইনস্টল করা হয়েছিল এবং ভার্চুয়ালেনভে নয়। pip3 install pytestভিতরে ভার্চুয়ালেনভ সমস্যা সমাধান করে।
অঙ্কিত সিং

8

আপনার যদি tests.pyফাইল এবং পরীক্ষার ফোল্ডার থাকে তবে এই সমস্যাটি ঘটবেtests/__init__.py

সংগ্রহের সময় পাইস্টেস্টটি ফোল্ডারটি সন্ধান করে তবে এটি যখন ফোল্ডার থেকে পরীক্ষার ফাইলগুলি আমদানি করার চেষ্টা করে, তখন tests.pyফাইলটি আমদানি সমস্যা তৈরি করে।

কেবল tests.pyফাইলটি সরিয়ে tests/ফোল্ডারের অভ্যন্তরে আপনার সমস্ত পরীক্ষা রেখে দিন put

আপনার নির্দিষ্ট ক্ষেত্রে ঠিক করা ঠিক হবে:

  • ফাইলটি সরান /home/zz/Desktop/GitFolders/rc/tests.py
  • নিশ্চিত হয়ে /home/zz/Desktop/GitFolders/rc/tests/__init__.pyউপস্থিত আছেন

5

আপনার ভার্চুয়াল পরিবেশে প্যাকেজগুলি ইনস্টল করুন।
তারপরে একটি নতুন শেল শুরু করুন এবং আপনার ভার্চুয়াল পরিবেশটি আবার উত্স করুন।


4
এটা আমার সমস্যা ছিল: একটি তাজা venv পুনরায় লোড না করে ইনস্টল
ফ্রিজ হইয়া গেল

5

একটি অনুরূপ সমস্যা ছিল এবং এটি __init__.pyটেস্ট ডিরেক্টরিতে ফাইল যুক্ত করার সময় এটি কাজ করে ।


এই কাজ করে না কেন জানি না, তবে তা !!! আপনাকে অনেক ধন্যবাদ :)
গুজম্যান

4

আমার একই রকম সমস্যা ছিল, ঠিক একই ত্রুটি, তবে ভিন্ন কারণ। আমি টেস্ট কোডটি ঠিকঠাক চালিয়ে যাচ্ছিলাম, তবে মডিউলটির একটি পুরানো সংস্করণের বিরুদ্ধে। আমার কোডের পূর্ববর্তী সংস্করণে একটি শ্রেণির অস্তিত্ব ছিল, অন্যটি ছিল না। আমার কোড আপডেট করার পরে, এটি ইনস্টল করার জন্য আমার নিম্নলিখিত চালানো উচিত ছিল।

sudo pip install ./ --upgrade

আপডেট হওয়া মডিউলটি ইনস্টল করার পরে পাইস্টেস্ট চলমান সঠিক ফলাফল তৈরি করেছে (কারণ আমি সঠিক কোড বেসটি ব্যবহার করছিলাম)।


4
এটি আমার পক্ষে কাজ করেছিল! আমার মডিউল একই সাথে পাইকস্ট চালাতে ব্যবহৃত ডকার ধারকটিতে একটি লাইব্রেরি হিসাবে ইনস্টল করা হয়েছিল। পাইথন ইন্টারপ্রেটার চালানোর সময় এটি আপডেট হওয়া কোডটি সন্ধান করতে পারে, তবে লাইব্রেরিটি প্রথম ইনস্টল করার সময় পাইস্টেস্ট কোডটি সন্ধান করতে থাকতেন। pip install ./ --upgradeসর্বশেষতম কোড সহ লিবের ইনস্টল করা সংস্করণটি চালানো হয়েছে এবং এই সর্বশেষতম সংস্করণটিও খুঁজে পেতে পাইটেষ্ট সক্ষম করেছে।
ফ্যাসোস্টাব্লু

4

আমার ক্ষেত্রে, আমদানি ত্রুটি ঘটেছে কারণ প্যাকেজটি একই নাম সহ অন্য প্যাকেজ / ডিরেক্টরিতে নির্দেশ করছে এবং এর পথটি আমি যে ফোল্ডারে আসলে চেয়েছিলাম তার উপরে একটি স্তর। আমি মনে করি এটি এটিও ব্যাখ্যা করে যে কিছু লোককে কেন _ init _.py অপসারণ করতে হবে এবং অন্যদের আবার যুক্ত করার দরকার রয়েছে।

পার্থক্যটির তুলনা করার জন্য আমি উভয় কনসোল এবং স্ক্রিপ্টগুলিতে print(the_root_package.__path__)(পরে import the_root_package) রেখেছিpythonpytest

নীচের লাইন: আপনি যখন করবেন python, আপনি চালিত হওয়ার সময় আপনি যে প্যাকেজটি আমদানি করেন তা প্যাকেজ থেকে আলাদা হতে পারে pytest


3

আমার ক্ষেত্রে আমি একটি ধারকটিতে কাজ করছি এবং দুর্ভাগ্যজনকভাবে পাইস্টে আমার পছন্দের পাইথন 3 অনুবাদকের চেয়ে পাইথন 2.7 ব্যবহার করার প্রবণতা রয়েছে।

আমার ক্ষেত্রে এটি কাজ করেছে:

python3 -m pytest

আমার ফোল্ডার কাঠামো

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

2

উপরের উত্তরটি আমার পক্ষে কাজ করে না। আমি স্রেফ এটির মডিউলটির নিখুঁত পথ সংযোজন করে সমাধান করেছি যা (আপনার পরীক্ষার মডিউল) sys.pathএর শীর্ষে পাওয়া যায় নি test_xxx.py, যেমন:

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

4
এই লাইনগুলিকে আমার শীর্ষে রাখার পরিবর্তে, test_main.pyএটি conftest.pyআমার পরীক্ষার ডিরেক্টরিতে রেখেছি এবং এটি কার্যকর হয়েছে। ফাইল লিটারের পরিবর্তে একটি প্রোগ্রাম্যাটিক সমাধান সরবরাহ করার জন্য ধন্যবাদ।
ক্যামেরন হাডসন

2

যদি এটি পাইথন কোড সম্পর্কিত হয় যা মূলত পাইথন ২.7 এ বিকাশ করা হয়েছিল এবং এখন পাইথন ৩.x এ স্থানান্তরিত হয়েছে সমস্যাটির চেয়ে সম্ভবত কোনও আমদানির সমস্যার সাথে সম্পর্কিত।

উদাহরণস্বরূপ, কোনও ফাইল থেকে কোনও বস্তু আমদানি করার সময়: baseএটি একই ডিরেক্টরিতে অবস্থিত এটি পাইথন ২.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

আশা করি এইটি কাজ করবে!


অনুস্মারকটির জন্য ধন্যবাদ, আমাকে আগে কৌশলটি ব্যবহার করতে হয়েছিল এবং এটি পাইস্টেস্ট ডকুমেন্টেশনে রয়েছে।
জেসন আর স্টিভেনস সিএফএ

2

conftest.pyপ্রজেক্টের রুট ডিরেক্টরিতে কেবল একটি খালি ফাইল রাখুন, কারণ যখন pytestএকটি প্রতিযোগিতা.পি আবিষ্কার করেন, এটি sys.path সংশোধন করে যাতে এটি conftestমডিউল থেকে স্টাফ আমদানি করতে পারে । একটি সাধারণ ডিরেক্টরি কাঠামো হতে পারে:

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

1

আর একটি বিশেষ মামলা:

টক্স ব্যবহার করে আমার সমস্যা হয়েছিল। সুতরাং আমার প্রোগ্রামটি ঠিকঠাক চলল, তবে টক্সের মাধ্যমে ইউনিটসেটগুলি অভিযোগ করে চলেছে। প্যাকেজ ইনস্টল করার পরে (প্রোগ্রামটির জন্য প্রয়োজনীয়) আপনাকে tox.ini এর ইউনিটসেটগুলিতে ব্যবহৃত প্যাকেজগুলিও নির্দিষ্ট করতে হবে

[testenv]
deps =
    package1
    package2 
...

1

আমি ভিএসকোড ব্যবহার করে এটি পাচ্ছিলাম। আমার কনডা পরিবেশ আছে। আমি মনে করি না ভিএসকোড পাইথন এক্সটেনশানটি আমি যে আপডেটগুলি করছিলাম তা দেখতে পেয়েছিল।

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

পাইথনের ইম্পোর্ট সিস্টেমের জন্য আরও একটি বিশাল জয়। আমি মনে করি যে noক্যমত্য না হওয়ার কারণ হ'ল যা কাজ করে তা সম্ভবত আপনার পরিবেশ এবং আপনি যে সরঞ্জামগুলি ব্যবহার করছেন তার উপর নির্ভর করে।

আমি এটি ভিএস কোড থেকে ব্যবহার করছি, উইন্ডোজ এর অধীনে টেস্ট এক্সপ্লোরারটিতে একটি কনডা পরিবেশে পাইথন ৩.৮।

আমি যে সেটআপটি কাজ করতে পেরেছি তা হ'ল:

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ফোল্ডারটি কেবল আমদানি সিস্টেমের মনকে উড়িয়ে দিয়েছে। কমান্ড লাইন থেকে কাজ করার একটি উপায় আছে তা আমি কল্পনা করতে পারি। পাইথন প্রোগ্রামিংয়ে তুলনামূলকভাবে নতুন রূপান্তর হিসাবে এটি আমাকে সিওএমের সাথে কাজ করার এক নস্টালজিক অনুভূতি দেয়, তবে কিছুটা কম মজা হচ্ছে।


1

এটিতে আমার 2 সেন্ট: আপনি যদি ভার্চুয়াল পরিবেশ ব্যবহার না করেন তবে পাইস্টেস্ট সুযোগমতো ব্যর্থ হবে। কখনও কখনও এটি ঠিক কাজ করবে, কখনও কখনও না।

অতএব, সমাধানটি হ'ল:

  • পাইপ আনইনস্টল দিয়ে পাইস্টেস্ট সরান
  • আপনার ভেন্ট তৈরি করুন
  • আপনার ভেনভ সক্রিয় করুন
  • পিপ আপনার প্রকল্পের পাথ সম্পাদনাযোগ্য মোডে ইনস্টল করুন, তাই এটি পাইটেষ্ট দ্বারা মডিউল হিসাবে বিবেচনা করা হবে (অন্যথায়, পাইস্টেস্ট আপনার অভ্যন্তরীণ আমদানি খুঁজে পাবে না)। তার জন্য আপনার একটি সেটআপ.পি ফাইল দরকার হবে
  • পাইস্ট সহ আপনার প্যাকেজগুলি ইনস্টল করুন
  • অবশেষে, আপনার পরীক্ষা চালান

উইন্ডোজ পাওয়ারশেল ব্যবহার করে কোড:

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"

পাইপ ইনস্টল-ই এর জন্য সেটআপ.পি এর উদাহরণ:

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.path পাইস্টের মাধ্যমে কোড চালানোর সময় করুন। আমি মনে করি আপনি দেখতে পাবেন যে এই দুটি পথের মধ্যে পার্থক্য রয়েছে, তাই পাইস্টেস্ট কেন বিরতি দেয়।

এটি ঠিক করার জন্য, দ্বিতীয়টির 0 তম সূচকে প্রথম পরীক্ষার দিক থেকে রাস্তাটি সন্নিবেশ করুন।

যাক '/usr/exampleUser/Documents/foo'প্রথম উপাদান হতে print(sys.path)পরীক্ষা 1।

নীচে এমন কোড রয়েছে যা আপনার সমস্যার সমাধান করবে:

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
============================= 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 ==============================

এটি এই সমস্যাটি নিয়ে দীর্ঘ সময় পরে আমার পক্ষে কাজ করেছিল। পাইস্টের মনে হচ্ছে প্রকল্পের মূলটিকে চিকিত্সা করা হচ্ছে যেখানেই এটি প্রথম পরীক্ষার ফাইল খুঁজে পাবে? নিশ্চয় এটি একটি বাগ?
oooyaya

1

আমি PYTHONPATHযে নির্দিষ্ট কনফিগারেশন দিয়ে আমার পরীক্ষা চালাচ্ছি তার জন্য পরিবেশ পরিবর্তনশীলগুলিতে সেটিংস স্থাপন করে আমি আমার সমস্যার সমাধান করেছি ।

আপনি পাইচার্মে পরীক্ষা ফাইলটি দেখার সময়:

  1. Ctrl+ Shift+A
  2. প্রকার Edit Configurations
  3. আপনার PYTHONPATHপরিবেশ> পরিবেশ পরিবর্তনশীলগুলির অধীনে সেট করুন ।

0

এটি হতে পারে যে পাইস্টন পাইথন মডিউল হিসাবে প্যাকেজটি পড়ছেন না, যখন পাইথন (পথের সমস্যার কারণে)। পাইস্টেস্ট স্ক্রিপ্টের ডিরেক্টরি পরিবর্তন করার চেষ্টা করুন বা আপনার পাইথনপথে স্পষ্টভাবে মডিউল যুক্ত করার চেষ্টা করুন।

অথবা এটি আপনার মেশিনে পাইথনের দুটি সংস্করণ ইনস্টল থাকা থাকতে পারে। পাইস্টেস্ট এবং পাইথন শেলটির জন্য আপনার পাইথন উত্সটি পরীক্ষা করুন। যদি সেগুলি পৃথক হয় (অর্থাত পাইথন 2 বনাম 3), source activateআপনি যে মডিউলটি ইনস্টল করেছেন সেই একই পাইথনের জন্য আপনি পাইস্টেস্ট ইনস্টল করছেন কিনা তা নিশ্চিত করে ব্যবহার করুন ।


0

যার জন্য যিনি সমস্ত কিছু চেষ্টা করেছেন এবং এখনও ত্রুটি পেয়েছেন, আমি প্রায় কাজ করি।

পাইরেস্ট ইনস্টল হওয়া ফোল্ডারে পাইটেষ্ট-এনভিতে যান ফোল্ডার।

Pyvenv.cfg ফাইলটি খুলুন ।

ফাইল পরিবর্তনে মিথ্যা থেকে সত্য থেকে সিস্টেম-সাইট-প্যাকেজ অন্তর্ভুক্ত থাকে

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

আশা করি এটি কার্যকর হয়েছে .ভোটা আপ করতে ভুলবেন না


0

আপনার কাছে ইতিমধ্যে .pyc ফাইল থাকলে সেগুলি মোছার চেষ্টা করুন।

আজ, আমি এই সমস্যার মুখোমুখি হই, এখানে যা ঘটছে তা হ'ল:

প্রথমে আমি ম্যাকে পাইস্টেস্ট চালাই (এটি পাইক ফাইলগুলি উত্পন্ন করবে) তারপরে আমি প্রজেক্টের ডায়ার লাগানো একটি ডকার পাত্রে (ওসটি আলপাইন) চালু করি এবং তারপরে যখন আমি ধারকটিতে পাইস্টেস্ট চালানোর চেষ্টা করি তখন আমদানি ত্রুটি ঘটে। সমস্ত পাইক ফাইলগুলি পরিষ্কার করার পরে আর কোনও ত্রুটি নেই।

আশা করি এটি সহায়ক হতে পারে।


0

আপনার ফোল্ডারে যদি একটি init .py ফাইলের প্রয়োজন হয় তবে ফোল্ডারটির একটি অনুলিপি তৈরি করুন এবং স্থানীয় পরীক্ষাগুলির জন্য এটি পরীক্ষা করে চালানোর জন্য init .py মুছে ফেলুন it আপনি পরীক্ষা চালানো দরকার হয় তাহলে নিয়মিতভাবে আপনি আপনার স্থানান্তর করতে পারেন কিনা তা দেখতে Init একটি পৃথক ফাইলে .py।


0

[সমাধান করা] সরানোর / যুক্ত করার সমাধানে সরাসরি ঝাঁপ দেওয়ার আগে __init__.pyআমরা কীভাবে আপনার ক্লাসে আমদানি করা হয়েছে তাও আমরা দেখতে চাই। আসলে, আমি একদিন খালি হারিয়ে খেলেছি__init__.py ভাবছিলাম যে সমস্যা হতে পারে ভেবে :) তবে এটি ছিল বেশ তথ্যপূর্ণ।

আমার ক্ষেত্রে, এটি একটি পাইথন ক্লাস থেকে অন্য পাইথন ক্লাসে ক্লাস কল করার ভুল উপায় ছিল যা নিক্ষেপ করছিল ImportError । শ্রেণি / মডিউলগুলি যেভাবে কল করা হবে তা স্থির করে এবং এটি কবজির মতো কাজ করে। আশা করি, এটি অন্যকেও সহায়তা করে।

এবং হ্যাঁ, অনুরূপ ত্রুটির জন্য, কোডটি কীভাবে লেখা হয় তার উপর নির্ভর করে আমাদের বিভিন্ন সমাধান থাকতে পারে। স্ব ডিবাগিংয়ে বেশি সময় ব্যয় করা ভাল। পাঠ শিখলাম :) শুভ কোডিং !!!


4
আপনি ভুল উপায় এবং সঠিক উপায়ের কিছু উদাহরণ দিতে পারেন?
লুরিফ্যাক্সেল

0

আমার একই সমস্যা আছে, আমি যে ভেন্টে আছি তাতে পাইস্টেস্ট ইনস্টল করেছি, তারপরে এটি কাজ শুরু করে।

পাইপ ইনস্টল পাইস্টেস্ট

সুতরাং আমার বোধগম্যতা হল, যখন পাইস্টেস্ট বিশ্বব্যাপী ইনস্টলেশন থেকে চালিত হয়, তখন এটি প্রচলিত ভেনভিতে ইনস্টল হওয়া মডিউলগুলি বেছে নিতে সক্ষম হয় না।


-1

আপনার কনটেস্ট.পি সম্পাদনা করুন এবং নিম্নলিখিত কোডের লাইন যুক্ত করুন:

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

4
NameError: name 'file' is not defined- সমান ফাইল করা উচিত?
কোশমায়ার

-1

আমি আমার সমস্ত পরীক্ষাগুলি একটি পরীক্ষার ফোল্ডারে রেখেছি এবং একই ত্রুটি পেয়েছি। আমি একজন যোগ করে এই মীমাংসিত Init তাই মত যে ফোল্ডারে .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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.