পাইস্ট ইস্যুতে ইম্পোর্টের ত্রুটি রয়েছে: ইয়াদায়দায়েদা নামে কোনও মডিউল নেই


231

আমি ম্যাকের উপরে পাইস্টেস্ট ইনস্টল করতে ইজি_ইনস্টল ব্যবহার করেছি এবং কোনও ফাইল কাঠামো পছন্দ করে এমন একটি প্রকল্পের জন্য টেস্টগুলি লিখতে শুরু করেছি:

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py

চালানোর py.testসময় রেপো ডিরেক্টরির মধ্যে, সবকিছু আচরণ করবে হিসাবে আপনি আশা করবে

তবে যখন আমি লিনাক্স বা উইন্ডোগুলির উভয় ক্ষেত্রেই একই জিনিসটি চেষ্টা করি (তখন উভয়ই পাইস্টেস্ট ২.২.৩ রয়েছে) যখনই এটি আমার অ্যাপ্লিকেশন পাথ থেকে কোনও জিনিসটির প্রথম আমদানি হিট করে তখন তা ছাপিয়ে যায়। উদাহরণস্বরূপ বলুনfrom app import some_def_in_app

এই সিস্টেমে পাইস্টেস্ট চালানোর জন্য আমার কি আমার প্যাথএডিটি সম্পাদনা করা দরকার? কেউ কি এই অভিজ্ঞতা আছে?


4
সেটআপলগুলিতে এটি ঠিক করার উপায় এখানে
এডিরাগ

4
দয়া করে @ হুফলিংয়ের উত্তরটি যাচাই করুন এবং আপনার গৃহীত উত্তরটি পরিবর্তন বিবেচনা করুন, যদি এই দীর্ঘ সময়ের পরে এসও অনুমতি দেয়: আরও ভাল!
ডেভিড

উত্তর:


91

হ্যাঁ, আপনি যদি cdডিরেক্টরি ডিরেক্টরিতে যান তবে উত্স ফোল্ডারটি পাইথনের পথে নেই ।

আপনার 2 টি পছন্দ রয়েছে:

  1. টেস্ট ফাইলগুলিতে ম্যানুয়ালি পাথ যুক্ত করুন, এরকম কিছু:

    import sys, os
    myPath = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, myPath + '/../')
    
  2. Env var দিয়ে পরীক্ষা চালান PYTHONPATH=../


11
আমি কখন cdকোন ডিরেক্টরিতে প্রবেশ করছি? আমি py.testআমার মূল থেকে দৌড়াচ্ছি । যদি না আমার ভুল হয় এবং আপনার অর্থ পাইস্টেস্ট আমার ফোল্ডারগুলির মধ্যে দিয়ে যায়
ম্যাটটোড্ড

যদি এটি একটি cdসমস্যা হয়, আমি ম্যাকের সাথেও এটি আঘাত করব না?
ম্যাটটোড্ড

ওহ, আমি ভুল লিখেছি এবং ভেবেছিলাম এটি পরীক্ষার ডিরেক্টরি থেকে কাজ করে না। এখনও প্রস্তাব 1 টি কৌশল কাজ করবে। আমি কেবল লিনাক্স ব্যবহার করি তাই আমি অন্য ওএসগুলিতে আচরণটি ব্যাখ্যা করতে পারি না।
না_এ_গল্ফার

আপনার সমস্ত টেস্ট.পি ফাইলগুলিতে কি এমন আমদানি রয়েছে?
ম্যাটটোড্ড

4
হ্যাঁ, তবে আমার ডিরেক্টরি কাঠামোটি সাধারণত কিছুটা আলাদা I আমি সাধারণত / ডিরেক্টরি এবং / পরীক্ষাকে মূল ডিরেক্টরিতে রাখি।
না_এ_গল্ফার

275

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

python -m pytest tests/

এটি কাজ করে কারণ পাইথন আপনার জন্য পাইথনপথে বর্তমান ডিরেক্টরি যুক্ত করেছে।


2
এর জন্য নিখুঁতগুলির সাথে আপেক্ষিক আমদানি পুনর্লিখন করা দরকার, যদি আপনার অ্যাপ্লিকেশনটি এমন স্তরে না চালানোর কোড থাকে যেখানে আপনি কমান্ডটি কার্যকর করেন। উদাহরণস্বরূপ: project/test/all-my-testsএবং project/src/app.pyসেই পরিবর্তনের কারণে, একজনকে app.pyঅপ্রত্যক্ষভাবে কোনও __main__.pyফাইল ইন ইন project/srcকল করে কল করতে হবে, যাতে কলটি ব্যবহার করতে পারে python -m src। আমি যতদূর বলতে পারি সুন্দর অগোছালো জিনিস।
জেলফির কালটস্টল

3
@ জেলফির: পরম আমদানি ব্যবহার করা একটি প্রস্তাবিত অনুশীলন। প্যাকেজিং সেরা অনুশীলন সম্পর্কে হ্যাবনাবিটসের একটি ভাল নিবন্ধ রয়েছে: ব্লগ.হাবনব.ইট / ব্লগ ২০১৩ /০ //২০১২ / পাইথন- প্যাকেজস- এবং আপনি 3. " দেখুন: পাইথন.অর্গ / দেবদেবী / পেপস / পেপ-0008
Apteryx

1
@ অ্যাপটারিক্স আপনার মানে "প্রকল্প-পরম"? কারণ এর মতো জিনিসগুলি /home/user/dev/projectxyz/src ...সত্যই খারাপ হবে এবং বেশিরভাগ ক্ষেত্রে অন্যান্য মেশিনে চালিত হয় না। আমি মনে করি আমি যা বোঝাতে চেয়েছি তা হ'ল, মডিউল ফাইল চালানোর মতো একই ফোল্ডারে থাকলেও আমাকে সর্বদা পুরো প্রকল্পের মূলটি মডিউল পথে লিখতে হবে। আমি জানতাম না যে এটিকে সর্বোত্তম অনুশীলন হিসাবে বিবেচনা করা হয়, সুতরাং এটি তথ্যের একটি দরকারী বিট, ধন্যবাদ। আমি বেশিরভাগ পেপ 8 এর সাথে একমত, যদিও এটি এখনও নিখুঁত নয়।
জেলফির কাল্টসটহল

1
@ জেলফির, হ্যাঁ, আমি এটাই বোঝাতে চাইছি আমি বিশ্বাস করি পাইথনে পরম আমদানি শব্দটি সর্বদা "প্রকল্প-পরম" বলে। দেখুন: পাইথন.অর্গ / দেবদেহ / পেপস / পেপ-0328 / #rationale- for-absolve- ইম্পোর্টস । আসলে, আমি নিশ্চিত যে আপনি এলোমেলো, নিখুঁত পাথ অবস্থানগুলি থেকে কমপক্ষে ডিফল্ট "আমদানি" ব্যবস্থাটি ব্যবহার করে আমদানি করতে পারবেন না pretty
Apteryx

4
আমি __init__.pyপরীক্ষাগুলিতে যোগ করেছি , যা সমস্যার সমাধান করেছে। এখন আমি ব্যবহার করতে পারিpytest
কিরণ কুমার কোটারি

154

conftest সমাধান

সর্বনিম্ন আক্রমণাত্মক সমাধানটি ডিরেক্টরিতে নামের একটি খালি ফাইল যুক্ত conftest.pyকরছে repo/:

$ touch repo/conftest.py

এটাই. ম্যাংলিংয়ের জন্য কাস্টম কোড লেখার দরকার নেই sys.pathবা PYTHONPATHধরে টেনে আনতে বা __init__.pyএটি যেখানে নেই সেখানে ডায়ারে রেখে ।

প্রকল্পের ডিরেক্টরি পরে:

repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
     └── test_app.py

ব্যাখ্যা

pytestজন্য দেখায় conftestপরীক্ষা সংগ্রহের মডিউল কাস্টম আঙ্গুলসমূহ এবং রাজধানী জড়ো করা, এবং যাতে তাদের থেকে কাস্টম বস্তু আমদানি করতে, pytestঅভিভাবক সংকলনে যোগ করা conftest.pyথেকেsys.path (এই ক্ষেত্রে repoডিরেক্টরির)।

অন্যান্য প্রকল্প কাঠামো

আপনি অন্যান্য প্রকল্পের গঠন থাকে, তাহলে স্থান conftest.pyপ্যাকেজ রুট দির (এক যে প্যাকেজ ধারণ করে কিন্তু একটি প্যাকেজ নিজেই নন, সুতরাং নেই না একটি ধারণ __init__.py), উদাহরণস্বরূপ:

repo
├── conftest.py
├── spam
   ├── __init__.py
   ├── bacon.py
   └── egg.py
├── eggs
   ├── __init__.py
   └── sausage.py
└── tests
     ├── test_bacon.py
     └── test_egg.py

src বিন্যাস

এই পদ্ধতির ব্যবহার করা যেতে পারে যদিও srcলেআউট (জায়গা conftest.pyমধ্যে srcDir):

repo
├── src
   ├── conftest.py
   ├── spam
      ├── __init__.py
      ├── bacon.py
      └── egg.py
   └── eggs 
       ├── __init__.py
       └── sausage.py
└── tests
     ├── test_bacon.py
     └── test_egg.py

হুঁশিয়ার যোগ করেন যে srcকরতে PYTHONPATHহ্রাস অর্থ এবং সুবিধাগুলো srcবিন্যাস! আপনি ইনস্টল করা প্যাকেজটি নয়, সংগ্রহস্থল থেকে কোডটি পরীক্ষা করে শেষ করবেন। আপনার যদি এটি করার দরকার হয় তবে আপনার srcদির মোটেই প্রয়োজন নেই ।

এখান থেকে কোথায় যাব

অবশ্যই conftestমডিউলগুলি সোর্স কোড আবিষ্কারে সহায়তা করার জন্য কিছু ফাইল নয়; pytestফ্রেমওয়ার্কের সমস্ত প্রকল্প-নির্দিষ্ট বর্ধন এবং আপনার পরীক্ষার স্যুটের কাস্টমাইজেশন ঘটে it's তাদের ডক্স জুড়ে ছড়িয়ে ছিটিয়ে থাকা মডিউলগুলির pytestপ্রচুর তথ্য রয়েছে ; দিয়ে শুরু : স্থানীয় প্রতি ডিরেক্টরি প্লাগইনconftestconftest.py

এছাড়াও, conftestমডিউলগুলির বিষয়ে এসওর একটি দুর্দান্ত প্রশ্ন রয়েছে : পাইস্টেস্টে, কনফেস্টে.পি ফাইলগুলির ব্যবহার কী?


2
@ aaa90210 যদিও আমি আপনার সমস্যাটি পুনরুত্পাদন করতে পারি না (কোনও রুট দিরের সাথে প্রতিযোগিতা থেকে আমদানি করা কোনও স্তরের কাজ করে) তবে আপনার কখনই কনটেস্ট ফাইল থেকে আমদানি করা উচিত নয় কারণ এটির জন্য সংরক্ষিত নাম pytestএবং এটি না করার দৃ strongly় পরামর্শ দেওয়া হচ্ছে। এটি করে আপনি ভবিষ্যতের ত্রুটির জন্য বীজ রোপণ করেন। নামের আরেকটি মডিউল তৈরি করুন utils.pyএবং পরীক্ষাগারে পুনরায় ব্যবহারের জন্য কোডটি রাখুন।
হুফলিং

4
থাম্বস আপ! এটিই একমাত্র সমাধান যা আমার পক্ষে ভালভাবে কাজ করে।
130nrd

4
একেবারে গ্রহণযোগ্য উত্তর হওয়া উচিত - আপনাকে ধন্যবাদ!
মার্টিন পেক

2
যৌক্তিকভাবে, conftest.pyঅ্যাপ্লিকেশন কোডের সাথে সম্পর্কিত নয় এবং, যদিও এটির অধীনে src/রাখা সঠিক নয়।
নিক ও'লাই

2
এই উত্তরটি এসও-তে একটি স্থির শিরোনাম হওয়া উচিত। অনেক ধন্যবাদ.
রিগোবার্টা রোলিওলিনি

119

আমারও একই সমস্যা ছিল। আমি __init__.pyআমার testsডিরেক্টরিতে একটি খালি ফাইল যুক্ত করে এটি ঠিক করেছি ।


77
নোট করুন যে এটি পাইস্টেস্ট দ্বারা প্রস্তাবিত নয় : avoid “__init__.py” files in your test directories. This way your tests can run easily against an installed version of mypkg, independently from the installed package if it contains the tests or not.এসআরসি: পিটায়স্ট.আর.এলটিস্ট
কে। মাইকেল আয়ে

24
আমি একই প্রশ্নটি নিয়ে এখানে এসেছি এবং __init__.pyআমার পরীক্ষার ডিরেক্টরি থেকে সরিয়ে ফেলা আমার পক্ষে এটি সমাধান করেছে।
101

3
@ মফ্রো আমি কি সমস্যাটি দেখছি না? পরীক্ষাগুলি আমদানিযোগ্য কোড হতে হবে না, সেগুলি আপনার পরীক্ষার রানার দ্বারা পাওয়া যায়। পরীক্ষিত হওয়ার জন্য কেবল পরীক্ষিত কোডটি একটি ইনস্টলড প্যাকেজ / মডিউল হওয়া উচিত।
কে। মাইকেল আয়ে

5
__init__.pyসাব-ডিরেক্টরিতে একটি যুক্ত test/করা ইনস্টল করা মডিউলগুলির বিরুদ্ধে সেই সাব ডিরেক্টরিতে নির্দিষ্ট পরীক্ষা চালানোর জন্য পরম আমদানির কাজ করে। ধন্যবাদ।
ব্রাইস গিন্টা


46

এর সাথে pytestনিজেকে মডিউল হিসাবে চালান : python -m pytest tests


3
এটি একটি কার্যনির্বাহী সমাধান বলে মনে হচ্ছে, তবে কেউ কেন ব্যাখ্যা করতে পারে? আমি বরং python -m pytest"কারণ এটি কাজ করে" ব্যতীত কোনও ব্যাখ্যা ছাড়াই কেবল অন্তর্নিহিত কারণটি সমাধান করব
জান্ন এনবার্গ

4
প্রকল্পের শ্রেণিবিন্যাস উদাহরণস্বরূপ: এটি ঘটে package/src package/testsএবং testsআপনি থেকে আমদানি করেন src। মডিউল হিসাবে সম্পাদন করা আমদানিকে মৃত্যুদন্ডের অবস্থানের তুলনায় নিখুঁত হিসাবে বিবেচনা করবে।
স্টেফানো মেসিনা

1
এই সমাধানটি আমাকে সাহায্য করেছে, ধন্যবাদ! পাইথন সংস্করণে বিরোধের কারণেই এর কারণ ছিল। পাইস্টেস্ট পরীক্ষা পূর্ববর্তী পাইথন সংস্করণের জন্য কাজ করে। আমার পরিস্থিতিতে আমার অজগর সংস্করণটি 7..1.১, পাইথন-মি পাইস্টেস্ট পরীক্ষাগুলি কাজ করে তবে পাইস্ট টেস্টগুলি নয়।
রুক্সি ঝাং

1
পাইস্টেস্ট থেকে "পাইথেনের পরিবর্তে পাইথেনের সাথে রানিং পাইট [...] পাইস্টেস্টের পরিবর্তে [...] প্রায় সমতুল্য আচরণের ফলস্বরূপ, পূর্ববর্তী কলটি বর্তমান ডিরেক্টরিটিকে সিস্টেস্টপথের সাথে যুক্ত করবে"।
মোড এননাগি

37

আপনি প্রকল্পের রুটে পাইথনপথ দিয়ে চালাতে পারেন

PYTHONPATH=. py.test

অথবা সম্পাদনাযোগ্য আমদানি হিসাবে পাইপ ইনস্টল ব্যবহার করুন

pip install -e .   # install package using setup.py in editable mode

3
ডিরেক্টরি কাঠামোতে নেই এমন ডিরেক্টরি এবং ডিরেক্টরি এবং ডিরেক্টরি উভয়ই সম্বলিত ডিরেক্টরি থেকে কল করার জন্য এটি আমার পক্ষে কাজ করে testনা । srctestsrc
জেলফির কালটস্টল

21

আমি আপনার প্রশ্নের উত্তর এবং আমার নিজের বিভ্রান্তির উত্তর হিসাবে এটি তৈরি করেছি। আমি আসা করি এটা সাহায্য করবে. পাইথেষ্ট কমান্ড লাইনে এবং tox.ini উভয় ক্ষেত্রে পাইথনপথে মনোযোগ দিন।

https://github.com/jeffmacdonald/pytest_test

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

পাইস্টেস্টের সাহায্যে আপনি এটি করতে পারেন:

PYTHONPATH=. py.test

এবং টক্সের সাহায্যে এটি আপনার টক্সআইএনআইতে যুক্ত করুন:

[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}

1
আপনি যে প্রকল্পটি সংযুক্ত করেছেন তার সংক্ষিপ্ত বিবরণ দিতে পারবেন?
জেএফ মেয়ার

1
হতে পারে এটি কেবলমাত্র আমি, তবে প্রকল্পটির README বেশ বিশদ বিবরণী এবং স্ট্যাকওভারফ্লো সম্পর্কে আমার মন্তব্য বলে যে আমি কেন রেপো তৈরি করেছি।
জেফ ম্যাকডোনাল্ড

5
যদিও এটি কঠোরভাবে প্রয়োজন হয় না, উত্তরে নিজেই একটি উত্তরের মূল বিষয়বস্তু থাকা একটি নীতিমালা, কারণ এটি নিশ্চিত করে যে লিঙ্কযুক্ত সংস্থানটি দীর্ঘ হতে পারে তখন থেকেই উত্তরটি এক্স x বছরে বুঝতে পারে।
জেএফ মেয়ার

:) আচ্ছা ভালো. আপনার জন্য ইন্টারনেট চালায়।
জেফ ম্যাকডোনাল্ড

9

ফ্লাস্কেও আমার একই সমস্যা ছিল।

যখন আমি যুক্ত করেছি:

__init__.py

ফোল্ডার পরীক্ষা করতে, সমস্যা অদৃশ্য হয়ে গেছে :)

সম্ভবত অ্যাপ্লিকেশনটি মডিউল হিসাবে ফোল্ডার পরীক্ষাগুলি সনাক্ত করতে পারে না


8

আমি __init__.pyআমার উত্সের প্যারেন্ট ফোল্ডারে শীর্ষ-স্তরটি সরিয়ে এটি ঠিক করেছি ।


1
এটা আমার জন্য স্থির। কেউ এই ব্যাখ্যা করতে পারেন?
aboger

এই অধিকার এখানে আমার জন্য এটি স্থির। অবশ্যই কারও কাছে এটির জন্য একটি ব্যাখ্যা দেখতে ভালো লাগবে
কিং_উয়েন

আমি init .py যোগ করেছিলাম তবে এখনও একই সমস্যার মুখোমুখি হয়েছিল তবে এই সমাধানটি আমার পক্ষেও কাজ করেছে .. কারণ দয়া করে?
অভিজিৎ

7

আমি ConftestImportFailure: ImportError('No module named ...যখন __init__.pyআমার এসসিআর ডিরেক্টরিতে দুর্ঘটনাক্রমে ফাইল যুক্ত করেছিলাম (তখন এটি পাইথন প্যাকেজ হিসাবে ধরা হয় নি, সমস্ত উত্সের কেবলমাত্র একটি ধারক) I


3

এমনকি সহজ কিছু (আপনি এমনকি তুচ্ছ বলতে পারেন) এর কারণে আমি এই ত্রুটিটি পাচ্ছিলাম। আমি pytestমডিউলটি ইনস্টল করি নি । একটি সহজ apt install python-pytestএটি আমার জন্য এটি স্থির করে।

'পাইস্টেস্ট' সেটআপ.পি-তে একটি পরীক্ষার নির্ভরতা হিসাবে তালিকাভুক্ত হত। আপনি পরীক্ষার প্রয়োজনীয়তাও ইনস্টল করেছেন তা নিশ্চিত করুন।


3

আমারও একি দশা. pytestআমি যে পরিবেশে কাজ করছিলাম তাতে ইনস্টল হওয়া কোনও মডিউল সনাক্ত করতে পারেনি।

আমি pytestএকই পরিবেশে ইনস্টল করে এটি সমাধান করেছি ।


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

2

আমার জন্য সমস্যাটি ডিরেক্টরি tests.pyসহ জ্যাঙ্গো তৈরি করেছিল tests। সরানো সমস্যার tests.pyসমাধান হয়েছে।


2

আপেক্ষিক আমদানি ভুলভাবে ব্যবহার করায় আমি এই ত্রুটিটি পেয়েছি। ওপি উদাহরণে, test_app.py উদাহরণস্বরূপ ব্যবহার করে ফাংশন আমদানি করা উচিত

from repo.app import *

তবে উদারপন্থী __init__.py ফাইলগুলি ফাইলের কাঠামোর চারপাশে ছড়িয়ে ছিটিয়ে রয়েছে, এটি কাজ করে না এবং ফাইল এবং পরীক্ষার ফাইলগুলি একই ডিরেক্টরিতে না থাকলে ইমপোর্টেরর দেখা যায় না creates

from app import *

আমার একটি প্রকল্পের সাথে আমার কী করা উচিত তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

এখানে আমার প্রকল্প কাঠামো:

microbit/
microbit/activity_indicator/activity_indicator.py
microbit/tests/test_activity_indicator.py

Test_activity_indicator.py থেকে কার্যকলাপ_indicator.py অ্যাক্সেস করতে সক্ষম হতে আমার প্রয়োজন:

  • সঠিক আপেক্ষিক আমদানি দিয়ে test_activity_indictory.py শুরু করুন:
    from microbit.activity_indicator.activity_indicator import *
  • প্রকল্পের কাঠামো জুড়ে __init__.py ফাইলগুলি রাখুন:
    microbit/
    microbit/__init__.py
    microbit/activity_indicator/__init__.py
    microbit/activity_indicator/activity_indicator.py
    microbit/tests/__init__.py
    microbit/tests/test_activity_indicator.py

0

মডিউলটি আমদানি করতে অক্ষম হওয়ার কারণে পরীক্ষাগুলি প্রায়শই ব্যাহত হয়, গবেষণার পরে আমি জানতে পেরেছিলাম যে সিস্টেমটি ফাইলটি ভুল জায়গায় দেখছে এবং মডিউলটি সহ ফাইলটি অনুলিপি করে আমরা সহজেই সমস্যাটি কাটিয়ে উঠতে পারি in যথাযথভাবে আমদানি করার জন্য, ঠিক একই ফোল্ডারটি। আর একটি সমাধান প্রস্তাব হ'ল আমদানির ঘোষণাপত্র পরিবর্তন করা এবং এমটপিকে ইউনিটের সঠিক পথ প্রদর্শন করা। তবে, একাধিক ইউনিটের এই নির্ভরতা থাকতে পারে তার কারণে, যার অর্থ আমাদের তাদের ঘোষণাপত্রের মধ্যেও পরিবর্তন আনতে হবে, আমরা কেবল ইউনিটটিকে ফোল্ডারে সরিয়ে নেওয়া পছন্দ করি।


অন্যান্য উত্তরগুলি রয়েছে যা ওপির প্রশ্ন সরবরাহ করে এবং কিছু সময় আগে সেগুলি পোস্ট করা হয়েছিল। উত্তর পোস্ট করার সময়, দয়া করে নিশ্চিত হয়ে নিন যে আপনি কোনও নতুন সমাধান যুক্ত করেছেন, বা যথেষ্ট উত্তম ব্যাখ্যা, বিশেষত পুরানো প্রশ্নের উত্তর দেওয়ার সময়। কখনও কখনও একটি নির্দিষ্ট উত্তরে মন্তব্য পোস্ট করা ভাল better
help-info.de

@ Help-info.de থেকে মন্তব্য ছাড়াও হিসাবে: এখানে উত্তর প্রশ্নের জন্য পথ প্রদর্শক লিংক stackoverflow.com/help/how-to-answer
নড়া হাত

0

মিডিয়াম বাই ডার্ক অ্যাভেরিতে একটি পোস্ট অনুসারে (এবং আমার ব্যক্তিগত অভিজ্ঞতার দ্বারা সমর্থিত) যদি আপনি আপনার প্রকল্পের জন্য ভার্চুয়াল পরিবেশ ব্যবহার করেন তবে আপনি পাইস্টের সিস্টেম-ভিত্তিক ইনস্টল ব্যবহার করতে পারবেন না; আপনাকে এটি ভার্চুয়াল পরিবেশে ইনস্টল করতে হবে এবং সেই ইনস্টলটি ব্যবহার করতে হবে।

বিশেষত, আপনার যদি এটি উভয় জায়গায় ইনস্টল করা থাকে তবে কেবল pytestকমান্ড চালানো কার্যকর হবে না কারণ এটি সিস্টেম ইনস্টলটি ব্যবহার করবে। অন্যান্য উত্তর বর্ণিত হিসাবে, একটি সহজ সমাধান python -m pytestপরিবর্তে চালানো হয় pytest; এটি কাজ করে কারণ এটি পাইস্টের পরিবেশনের সংস্করণ ব্যবহার করে। বিকল্পভাবে, আপনি কেবল পাইস্টের সিস্টেমটির সংস্করণটি আনইনস্টল করতে পারেন; ভার্চুয়াল পরিবেশ পুনরায় সক্রিয় করার পরে pytestকমান্ডটি কাজ করা উচিত।


আমার পক্ষে এখন পর্যন্ত কাজ করা একমাত্র জিনিস python -m pytest tests/
নিক ও'লাই

0

ফ্লাস্ক টিউটোরিয়াল অনুসরণ করার সময় আমার একই সমস্যা ছিল এবং আমি পাইটিস্ট অফিসিয়াল ডকসে উত্তরটি পেয়েছি যেভাবে আমি (এবং আমি মনে করি আরও অনেকগুলি) জিনিসগুলি ব্যবহার করা হয় তার থেকে এটি কিছুটা বদল।

setup.pyআপনার প্রকল্পের মূল ডিরেক্টরিতে কমপক্ষে নিম্নলিখিত দুটি লাইন দিয়ে একটি ফাইল তৈরি করতে হবে:

from setuptools import setup, find_packages
setup(name="PACKAGENAME", packages=find_packages())

যেখানে PACKAGENAME আপনার অ্যাপের নাম's তারপরে আপনাকে এটি পিপ দিয়ে ইনস্টল করতে হবে:

pip install -e .

-eপতাকা পিপ বলে মোড সম্পাদনাযোগ্য প্যাকেজ ইনস্টল বা "বিকাশ"। সুতরাং পরের বার আপনি pytestএটি চালানোর সময় আপনার অ্যাপ্লিকেশনটিকে স্ট্যান্ডার্ডে পাওয়া উচিত PYTHONPATH


0

আমার সমাধান:

ডিরেক্টরিতে conftest.pyফাইলটি তৈরি করুন test:

import os
import sys
sys.path.insert(0,os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/code/")

এটি প্রতিটি পরীক্ষার ফাইলকে সংশোধন না করে , এনভ ভেরিয়েবল সেট করা বা নিখুঁত / আপেক্ষিক পাথের সাথে বিশৃঙ্খলা ছাড়াই অজগর পথটিতে আগ্রহের ফোল্ডার যুক্ত করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.