এমনকি __init__.py দিয়ে কীভাবে "অ-প্যাকেজে আপেক্ষিক আমদানির চেষ্টা করা" ঠিক করবেন to


744

আমি নিম্নলিখিত ডিরেক্টরি কাঠামো সহ পিইপি 328 অনুসরণ করার চেষ্টা করছি :

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

ইন core_test.pyআমি নিম্নলিখিত ইম্পোর্ট বিবৃতিটি আছে

from ..components.core import GameLoopEvents

যাইহোক, আমি চালানোর সময়, আমি নিম্নলিখিত ত্রুটিটি পাই:

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

আশেপাশের অনুসন্ধানে আমি " __init__.py এমনকি " আপেক্ষিক পথটি কাজ করে না "এবং" আপেক্ষিক পথ থেকে একটি মডিউল আমদানি " পেয়েছি কিন্তু তারা সাহায্য করেনি।

আমি এখানে কি অনুপস্থিত কিছু আছে?


17
কাঠামোগত unittestপ্রকল্পগুলির বিভিন্ন উপায়ে আমিও খুব বিভ্রান্ত হয়ে পড়েছিলাম, সুতরাং আমি এই মোটামুটি বিস্তৃত নমুনা প্রকল্পটি লিখেছিলাম যা মডিউলগুলির গভীর নীড়, কাঙ্ক্ষিত এবং নিখুঁত আমদানি (যেখানে কাজ করে না এবং) এবং একের মধ্যে থেকে আপেক্ষিক এবং পরম রেফারেন্সিংকে অন্তর্ভুক্ত করে প্যাকেজ, পাশাপাশি একক, ডাবল এবং ক্লাসের প্যাকেজ-স্তর আমদানি। স্পষ্ট কিছু সাহায্য করেছে ডান আপ আমার জন্য!
cod3monk3y

1
আমি আপনার পরীক্ষাগুলি কাজে লাগাতে পারিনি। no module named myimports.fooআমি তাদের চালানোর সময় পেতে থাকুন ।
ব্লেয়ার

@ Blairg23 আমি অনুমান করছি অভিপ্রেত আবাহন হয় cdমধ্যে PyImports, এবং চালানোর python -m unittest tests.test_abs, উদাহরণস্বরূপ।
duozmo

7
আমি জিনের সাথে একমত আমি আশা করি আমদানি প্রক্রিয়াটি ডিবাগ করার জন্য এমন কোনও ব্যবস্থা ছিল যা কিছুটা সহায়ক ছিল। আমার ক্ষেত্রে, আমার একই ডিরেক্টরিতে দুটি ফাইল রয়েছে। আমি অন্য ফাইলটিতে একটি ফাইল আমদানির চেষ্টা করছি। যদি সেই ডিরেক্টরিতে আমার একটি init .py ফাইল থাকে তবে আমি একটি ভ্যালুআরর পাই: নন-প্যাকেজ ত্রুটিতে আপেক্ষিক আমদানির চেষ্টা করা। যদি আমি init .py ফাইলটি সরিয়ে ফেলি তবে আমি একটি ত্রুটি পেয়েছি যার নাম 'NAME' ত্রুটি নেই।
ব্যবহারকারী 1928764

আমার ক্ষেত্রে, আমার একই ডিরেক্টরিতে দুটি ফাইল রয়েছে। আমি অন্য ফাইলটিতে একটি ফাইল আমদানির চেষ্টা করছি। যদি সেই ডিরেক্টরিতে আমার একটি init .py ফাইল থাকে তবে আমি একটি ভ্যালুআরর পাই: নন-প্যাকেজ ত্রুটিতে আপেক্ষিক আমদানির চেষ্টা করা। যদি আমি init .py ফাইলটি সরিয়ে ফেলি তবে আমি একটি ত্রুটি পেয়েছি যার নাম 'NAME' ত্রুটি নেই। সত্যিই হতাশার বিষয়টি হ'ল আমার এই কাজটি হয়েছিল এবং তারপরে আমি .bashrc ফাইলটি মুছে ফেলাতে নিজেকে গুলি করেছিলাম, যা পাইথনপথকে কিছুতে সেট করেছে, এবং এখন এটি কাজ করছে না।
ব্যবহারকারী 1928764

উত্তর:


443

হ্যাঁ. আপনি এটি প্যাকেজ হিসাবে ব্যবহার করছেন না।

python -m pkg.tests.core_test

51
একটি গোচা: নোট করুন যে শেষে '.py' নেই!
মানসিকতা

497
আমি কোনও নিম্নগামীদের মধ্যে নই, তবে এই প্রশ্নোত্তর এবং জনপ্রিয়তার জনপ্রিয়তা দেখিয়ে আমি এটি আরও কিছুটা বিশদ ব্যবহার করতে পারি বলে মনে করি । উপরের শেল কমান্ডটি কার্যকর করার জন্য কোন ডিরেক্টরি থেকে স্টাফটি উল্লেখ করা হচ্ছে, আপনার __init__.pyসমস্ত __package__দিকটি নিচে নেওয়ার প্রয়োজন রয়েছে এবং এক্সিকিউটেবল স্ক্রিপ্টগুলির জন্য এই আমদানিগুলি অনুমোদনের জন্য (-রেনবার্ন দ্বারা নীচে বর্ণিত) -র পরিবর্তনের কৌশল প্রয়োজন (উদাহরণস্বরূপ শেবাং ব্যবহার করার সময় এবং করছেন ./my_script.pyইউনিক্স শেল এ) সমস্ত দরকারী হবে। এই পুরো ইস্যুটি আমার পক্ষে সংক্ষিপ্ত এবং বোধগম্য ডকুমেন্টেশন খুঁজে বের করতে বা খুঁজে পেতে বেশ জটিল ছিল।
মার্ক অ্যামেরি

16
দ্রষ্টব্য: আপনি pkgযখন সি এল এল থেকে এই লাইনটি কল করেন তখন আপনাকে ডিরেক্টরিটির বাইরে থাকতে হবে । তারপরে, এটি প্রত্যাশা অনুযায়ী কাজ করা উচিত। আপনি যদি ভিতরে থাকেন pkgএবং আপনি কল করেন তবে python -m tests.core_testএটি কার্যকর হবে না। কমপক্ষে এটি আমার পক্ষে হয়নি।
ব্লেয়ারজ

94
সিরিয়াসলি, আপনি কি উত্তর দিতে যাচ্ছেন তা ব্যাখ্যা করতে পারেন?
পিনোচিও

18
@MarkAmery প্রায় grok বের করার চেষ্টা আমার মন হারিয়ে কিভাবে এই সব কাজ, আছে PY ফাইলগুলির সাথে সাবডিরেক্টরি সঙ্গে একটি প্রকল্প মধ্যে আপেক্ষিক আমদানির __init__.pyফাইলগুলি এখনো আপনি পাওয়া চালিয়ে ValueError: Attempted relative import in non-packageত্রুটি। আমি কারও জন্য সত্যিই ভাল অর্থ প্রদান করব, কোথাও না, অবশেষে স্পষ্টভাবে ইংরাজীতে ব্যাখ্যা করতে যে এই সমস্ত কীভাবে কাজ করে।
অ্যাডজুনেক্টপ্রসফেসরফ্যালকন

635

Ignacio Vazquez- আব্রামের উত্তরটি বিস্তারিতভাবে বর্ণনা করতে :

পাইথন আমদানি প্রক্রিয়াটি __name__বর্তমান ফাইলটির সাথে সম্পর্কিত works আপনি যখন কোনও ফাইল সরাসরি চালনা করেন, তখন এর স্বাভাবিক নাম থাকে না, "__main__"পরিবর্তে এর নাম হিসাবে থাকে। সুতরাং আপেক্ষিক আমদানি কাজ করে না।

আপনি, ইগানসিওর পরামর্শ অনুসারে -mবিকল্পটি ব্যবহার করে এটি কার্যকর করতে পারেন । যদি আপনার প্যাকেজের কোনও অংশ থাকে যা স্ক্রিপ্ট হিসাবে চালানো বোঝায়, আপনি __package__সেই ফাইলটি প্যাকেজ শ্রেণিবিন্যাসের মধ্যে কী নাম থাকার কথা বলে তা জানাতে বৈশিষ্ট্যটি ব্যবহার করতে পারেন।

বিস্তারিত জানতে http://www.python.org/dev/peps/pep-0366/ দেখুন ।


55
সাবডিরেক্টরির python -m core_testমধ্যে থেকে আপনি চালাতে পারবেন না বুঝতে পেরে আমার জন্য কিছুটা সময় testsনিল - এটি পিতামাতার কাছ থেকে হওয়া উচিত, বা আপনাকে পিতামাতাকে এই পথে যুক্ত করতে হবে।
আরাম কোচার্যান

3
@ ড্যানি স্ট্যাপল: ঠিক নয়। __package__এক্সিকিউটেবল স্ক্রিপ্ট ফাইলগুলি একই প্যাকেজের মধ্যে থেকে অপেক্ষাকৃত অন্যান্য মডিউল আমদানি করতে পারে তা নিশ্চিত করতে আপনি ব্যবহার করতে পারেন । "পুরো সিস্টেম" থেকে তুলনামূলকভাবে আমদানির কোনও উপায় নেই। আপনি কেন এটি করতে চান তা আমি নিশ্চিত নই।
ব্রেণবার্ন

2
আমি বলতে চাইছি যদি __package__প্রতীকটি "প্যারেন্ট.চাইল্ড" এ সেট করা থাকে তবে আপনি "প্যারেন্ট.অর্থ_চাইল্ড" আমদানি করতে সক্ষম হবেন। সম্ভবত আমি এটি এত ভাল শব্দগুচ্ছ না।
ড্যানি স্ট্যাপল

5
@ ড্যানিস্ট্যাপল: আচ্ছা, এটি কীভাবে কাজ করে তা লিঙ্কযুক্ত ডকুমেন্টেশনে বর্ণনা করা হয়েছে। আপনি একটি স্ক্রিপ্ট থাকে তাহলে script.pyপ্যাকেজের মধ্যে pack.subpack, তারপর সেটিং এটা __package__করতে pack.subpackআপনাকে যা করতে দেওয়া হবে from ..module import somethingথেকে আমদানি করুন কিছু pack.module। নোট করুন, ডকুমেন্টেশন যেমন বলেছে, তবুও আপনাকে সিস্টেমের পথে শীর্ষ স্তরের প্যাকেজ থাকতে হবে। আমদানি করা মডিউলগুলির জন্য জিনিসগুলি ইতিমধ্যে কাজ করে। কেবলমাত্র __package__আপনাকে সেই আচরণটি সরাসরি-সম্পাদিত স্ক্রিপ্টগুলির জন্যও ব্যবহার করতে দেওয়া হয়।
ব্রেনবারন

3
আমি __package__সরাসরি সম্পাদন করা স্ক্রিপ্টটিতে ব্যবহার করি তবে দুর্ভাগ্যক্রমে, আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: "প্যারেন্ট মডিউল 'এক্সএক্সএক্সএক্স' লোড করা হয়নি, আপেক্ষিক আমদানি সম্পাদন করতে পারে না"
mononoke

202

আপনি import components.coreযদি বর্তমান ডিরেক্টরিটি এতে যুক্ত করেন তবে আপনি সরাসরি ব্যবহার করতে পারেন sys.path:

if __name__ == '__main__' and __package__ is None:
    from os import sys, path
    sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

35
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))এটিও কাজ করবে
অজয়

26
from os import sysপ্রতারণার মতো দেখাচ্ছে :)
উড়ন্ত ভেড়া

3
@ পাইওটর: এটি আরও ভাল হিসাবে বিবেচিত হতে পারে কারণ এতে সামান্য আরও স্পষ্টভাবে বোঝানো হয়েছে যেটির সাথে সংযুক্ত করা হচ্ছে sys.path- ডিরেক্টরিটির পিতামাতার বর্তমান ফাইলটি রয়েছে
মার্টিনিউ

8
@ ফ্লাইংশিপ: সম্মত, আমি কেবল একটি নিয়মিত ব্যবহার করব import sys, os.path as path
মার্টিনিউ

10
অবগতির জন্য, একটি ipython নোটবুক এই ব্যবহার করতে, আমি এই উত্তর অভিযোজিত: import os; os.sys.path.append(os.path.dirname(os.path.abspath('.')))। তারপরে import components.coreআমার জন্য সরাসরি কাজ করে, নোটবুকের পিতামহুল ডিরেক্টরি থেকে পছন্দসই হিসাবে আমদানি করা।
রেডিং ট্যাডপোল

195

এটি কীভাবে আপনি আপনার স্ক্রিপ্ট চালু করতে চান তার উপর নির্ভর করে।

আপনি যদি ক্লাসিক উপায়ে কমান্ড লাইন থেকে আপনার ইউনিট টেস্ট চালু করতে চান তবে তা হ'ল:

python tests/core_test.py

তারপরে, যেহেতু এই ক্ষেত্রে 'উপাদানগুলি' এবং 'পরীক্ষাগুলি' ভাই বোনের ফোল্ডার, আপনি সিসি.পথ মডিউলের সন্নিবেশ বা সংযোজন পদ্ধতি ব্যবহার করে আপেক্ষিক মডিউলটি আমদানি করতে পারেন । কিছুটা এইরকম:

import sys
from os import path
sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
from components.core import GameLoopEvents

অন্যথায়, আপনি আপনার স্ক্রিপ্টটি '-m' যুক্তি দিয়ে চালু করতে পারেন (নোট করুন যে এই ক্ষেত্রে আমরা একটি প্যাকেজ সম্পর্কে কথা বলছি এবং সুতরাং আপনাকে অবশ্যই '.py' এক্সটেনশনটি দিতে হবে না ):

python -m pkg.tests.core_test

এ জাতীয় ক্ষেত্রে, আপনি যেমনটি করছেন ঠিক তেমন আপেক্ষিক আমদানি ব্যবহার করতে পারেন:

from ..components.core import GameLoopEvents

আপনি শেষ পর্যন্ত দুটি পদ্ধতির মিশ্রণ করতে পারেন, যাতে আপনার স্ক্রিপ্টটি যেভাবেই বলা হোক না কেন এটি কাজ করবে। উদাহরণ স্বরূপ:

if __name__ == '__main__':
    if __package__ is None:
        import sys
        from os import path
        sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
        from components.core import GameLoopEvents
    else:
        from ..components.core import GameLoopEvents

3
আমি যদি ডিবাগিংয়ের জন্য পিডিবি ব্যবহার করার চেষ্টা করছি তবে আমি কী করব? যেহেতু আপনি python -m pdb myscript.pyডিবাগিং সেশনটি চালু করতে ব্যবহার করেন।
ড্যানি

1
@ এড্যানইনজাস্ট - এটি একটি ভাল প্রশ্ন যেহেতু আপনার কাছে দুটি প্রধান মডিউল থাকতে পারে না। সাধারণত ডিবাগ করার সময় আমি প্রথমে যেখানে আমি ডিবাগিংটি শুরু করতে চাই সেখানে নিজেই ডিবাগারে নেমে যেতে পছন্দ করি। আপনি import pdb; pdb.set_trace()কোডের মধ্যে একটি প্রবেশকরণ (ইনলাইন) করে এটি করতে পারেন।
মিগিলসন

3
insertপরিবর্তে ব্যবহার করা ভাল append? এটি,sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
স্পার্কএন্ডশাইন

2
সন্নিবেশ ব্যবহার করা আপেক্ষিক আমদানি শব্দার্থবিজ্ঞানের জন্য আরও ভাল মিল, যেখানে স্থানীয় প্যাকেজ নাম ইনস্টলড প্যাকেজগুলির চেয়ে বেশি প্রাধান্য পায়। বিশেষত পরীক্ষার জন্য, আপনি সাধারণত স্থানীয় সংস্করণটি পরীক্ষা করতে চান, ইনস্টলডটি নয় (যদি না আপনার পরীক্ষার অবকাঠামো পরীক্ষার অধীনে কোডটি ইনস্টল করে, তবে এই ক্ষেত্রে আপেক্ষিক আমদানি অপ্রয়োজনীয় হয় এবং আপনার এই সমস্যা হবে না)।
অ্যালেক্স দুপুয়ে

1
আপনার আরও উল্লেখ করা উচিত যে আপনি যখন মডিউল হিসাবে চালাবেন তখন কোর_স্টেস্টযুক্ত ডিরেক্টরিতে থাকতে পারবেন না (এটি খুব সহজ হবে)
জোসেফ গারভিন


10

যদি আপনার ব্যবহারের ক্ষেত্রে পরীক্ষা চালানোর জন্য হয় এবং এটি এটির মতো করে তোলে তবে আপনি নিম্নলিখিতটি করতে পারেন। আপনার পরীক্ষার স্ক্রিপ্টটি চালনার পরিবর্তে যেমন python core_test.pyপরীক্ষার কাঠামো ব্যবহার করুন pytest। তারপরে কমান্ড লাইনে আপনি প্রবেশ করতে পারেন

$$ py.test

এটি আপনার ডিরেক্টরিতে পরীক্ষা চালাবে। এটি @ ব্রেইন বার্ন দ্বারা চিহ্নিত করা __name__হওয়ার বিষয়টি প্রায় __main__ঘটেছিল। এরপরে, __init__.pyআপনার পরীক্ষা ডিরেক্টরিতে একটি খালি ফাইল রাখুন এটি পরীক্ষার ডিরেক্টরিটিকে আপনার প্যাকেজের অংশ হিসাবে তৈরি করবে। তাহলে আপনি করতে সক্ষম হবেন

from ..components.core import GameLoopEvents

তবে, আপনি যদি আপনার পরীক্ষার স্ক্রিপ্টটিকে একটি প্রধান প্রোগ্রাম হিসাবে চালনা করেন তবে জিনিসগুলি আবার ব্যর্থ হবে। সুতরাং শুধু পরীক্ষা রানার ব্যবহার করুন। সম্ভবত এটি অন্যান্য পরীক্ষার দৌড়াদির সাথেও কাজ করে nosetestsতবে আমি এটি পরীক্ষা করে দেখিনি। আশাকরি এটা সাহায্য করবে.


9

আমার কুইক-ফিক্সটি হ'ল ডিরেক্টরিটিতে পথে যুক্ত করা:

import sys
sys.path.insert(0, '../components/')

6
আপনার দৃষ্টিভঙ্গি সব ক্ষেত্রে কাজ করবে না কারণ '../' অংশটি ডিরেক্টরি থেকে সমাধান করা হয়েছে যা থেকে আপনি আপনার স্ক্রিপ্টটি চালাচ্ছেন (কোর_স্টেস্ট.পি)। আপনার পদ্ধতির সাথে আপনাকে কোর_ টেস্ট.পি স্ক্রিপ্ট চালানোর আগে সিডি 'টেস্টগুলি' করতে বাধ্য করা হবে।
জাইমান

7

ইস্যুটি আপনার পরীক্ষার পদ্ধতিটি সহ,

তুমি চেষ্টা করেছ python core_test.py

তারপরে আপনি এই ত্রুটিটি পাবেন ValueError: নন-প্যাকেজে আপেক্ষিক আমদানির চেষ্টা করা

কারণ: আপনি নন-প্যাকেজ উত্স থেকে আপনার প্যাকেজিং পরীক্ষা করছেন।

সুতরাং প্যাকেজ উত্স থেকে আপনার মডিউল পরীক্ষা।

যদি এটি আপনার প্রকল্প কাঠামো হয়,

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

সিডি পিকেজি

python -m tests.core_test # dont use .py

বা বাইরে থেকে পিকেজি /

python -m pkg.tests.core_test

একক .আপনি যদি একই ডিরেক্টরিতে ফোল্ডার থেকে আমদানি করতে চান তবে । প্রতিটি পদক্ষেপ পিছনে আরও একটি যুক্ত করুন।

hi/
  hello.py
how.py

ভিতরে how.py

from .hi import hello

যদি আপনি হ্যালো.পি থেকে কীভাবে আমদানি করতে চান তবে incase করুন

from .. import how

1
গৃহীত উত্তরের চেয়ে ভাল
গ্যাব্রিয়েলবিবি

উদাহরণস্বরূপ from .. import how, আপনি কীভাবে 'কীভাবে' ফাইল থেকে নির্দিষ্ট শ্রেণি / পদ্ধতি আমদানি করবেন। যখন আমি তার সমতুল্য from ..how import fooকরি তখন আমি "শীর্ষ স্তরের প্যাকেজ ছাড়িয়ে আপেক্ষিক আমদানির চেষ্টা করা" পাই
জেমস হুলস

3

পুরানো সুতো আমি বুঝতে পারলাম যে একটি যোগ __all__= ['submodule', ...]করার __init__.py ফাইল এবং তারপর ব্যবহার from <CURRENT_MODULE> import *লক্ষ্য মধ্যে কাজ করে জরিমানা।


3

আপনি ব্যবহার করতে পারেন from pkg.components.core import GameLoopEvents, উদাহরণস্বরূপ আমি পাইচার্ম ব্যবহার করি, নীচে আমার প্রকল্প কাঠামো চিত্রটি রয়েছে, আমি কেবল রুট প্যাকেজটি থেকে আমদানি করি, তারপরে এটি কার্যকর হয়:

এখানে চিত্র বর্ণনা লিখুন


3
এটি আমার পক্ষে কার্যকর হয়নি। আপনার কনফিগারেশনে আপনাকে কী পথ নির্ধারণ করতে হবে?
মোহাম্মদ মাহজুব

3

পাওলো যেমন বলেছিলেন, আমাদের কাছে দুটি অনুরোধের পদ্ধতি রয়েছে:

1) python -m tests.core_test
2) python tests/core_test.py

তাদের মধ্যে একটি পার্থক্য হল sys.path [0] স্ট্রিং। যেহেতু ব্যাখ্যাটি আমদানি করার সময় sys.path অনুসন্ধান করবে , তাই আমরা এটি করতে পারি tests/core_test.py:

if __name__ == '__main__':
    import sys
    from pathlib import Path
    sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
    from components import core
    <other stuff>

এবং আরও অনেক কিছু পরে, আমরা অন্যান্য পদ্ধতির সাথে কোর_স্টেট.পি চালাতে পারি:

cd tests
python core_test.py
python -m core_test
...

দ্রষ্টব্য, পাই 36 কেবলমাত্র পরীক্ষিত।


3

এই পদ্ধতিরটি আমার পক্ষে কাজ করেছে এবং কিছু সমাধানের চেয়ে কম বিশৃঙ্খলাযুক্ত:

try:
  from ..components.core import GameLoopEvents
except ValueError:
  from components.core import GameLoopEvents

অভিভাবক ডিরেক্টরিটি আমার পাইথনপথে রয়েছে এবং রয়েছে __init__.py ডিরেক্টরি এবং এই ডিরেক্টরিতে ফাইল রয়েছে।

উপরেরটি সর্বদা পাইথন 2 এ কাজ করেছিল তবে পাইথন 3 কখনও কখনও একটি আমদানি বা মডিউল নটফাউন্ডআরার (পরবর্তীটি পাইথন ৩. in এ নতুন এবং আমদানি-এর একটি উপক্লাস) আঘাত করে, সুতরাং নীচের টুইটটি অজগর 2 এবং 3 উভয় ক্ষেত্রেই আমার জন্য কাজ করে:

try:
  from ..components.core import GameLoopEvents
except ( ValueError, ImportError):
  from components.core import GameLoopEvents


1

যদি কেউ কোনও কাজের সন্ধান করে তবে আমি একজনকে হোঁচট খেয়েছি। এখানে কিছুটা প্রসঙ্গে। আমি একটি ফাইলে থাকা পদ্ধতিগুলির মধ্যে একটি পরীক্ষা করতে চেয়েছিলাম। আমি যখন এটি ভিতর থেকে চালান

if __name__ == "__main__":

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

আমি যা করেছি তা এখানে। আমি সবেমাত্র একটি লঞ্চার তৈরি করেছি, একটি বাহ্যিক প্রোগ্রাম যা প্রয়োজনীয় পদ্ধতিগুলি আমদানি করে এবং তাদের কল করে। যদিও, দুর্দান্ত সমাধান নয়, এটি কাজ করে।


0

এখানে একটি উপায় যা সকলকে বিস্মৃত করবে কিন্তু বেশ ভালভাবে কাজ করবে। পরীক্ষা চালানো:

ln -s ../components components

তাহলে কেবল আপনার মতো উপাদানগুলি আমদানি করুন।


0

এটি খুব বিভ্রান্তিকর এবং আপনি যদি পাইচার্মের মতো আইডিই ব্যবহার করেন তবে এটি কিছুটা বিভ্রান্তিকর। আমার জন্য কী কাজ করেছে: ১. পাইচার্ম প্রকল্পের সেটিংস তৈরি করুন (যদি আপনি কোনও ভিই বা পাইথন ডিরেক্টরি থেকে পাইথন চালাচ্ছেন) ২. আপনি যেভাবে সংজ্ঞায়িত করেছেন তাতে কোনও ভুল নেই। ফোল্ডার 1.file1 আমদানি ক্লাস থেকে এটি কোনও সময় কাজ করে

যদি এটি কাজ না করে, আমদানি ফোল্ডার 1.file1 ব্যবহার করুন 3.. আপনার পরিবেশের পরিবর্তনশীলটি সিস্টেমের মধ্যে সঠিকভাবে উল্লেখ করা উচিত বা এটি আপনার কমান্ড লাইন আর্গুমেন্টে সরবরাহ করা উচিত।


-2

আপনার কোডে রয়েছে if __name__ == "__main__"যা প্যাকেজ হিসাবে আমদানি করা হয় না, আপনি sys.path.append()সমস্যার সমাধান করতে আরও ভাল ব্যবহার করতে চাই d


আমি মনে করি না যে if __name__ == "__main__"আপনার ফাইলটিতে থাকা আমদানির সাথে সম্পর্কিত যে কোনও বিষয়ে একটি পার্থক্য তৈরি করে।
ব্যবহারকারী 48956
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.