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


159

আমি একটি মডিউল লিখেছি ( my_mod.pyফোল্ডারে থাকা একটি ফাইল ফাইল my_module)। বর্তমানে, আমি cool_script.pyফোল্ডারে থাকা ফাইলটিতে কাজ করছি cur_proj। আমি ফাইল ব্যবহার করে পাইচার্মে ফোল্ডারটি খুললাম - খোলা (এবং আমি ধরে নিই, এটি একটি পাইচার্ম প্রকল্প)।

প্রজেক্টভিউতে (সিএমডি -7), আমি আমার প্রকল্পটি দেখতে পাচ্ছি cur_proj(লাল রঙে) এবং "বাহ্যিক গ্রন্থাগারগুলি" এর অধীনে আমি দেখতে পাচ্ছি my_module। Cool_script.py এ, আমি লিখতে পারি

from my_module import my_mod as mm

এবং পাইচার্ম এমনকি আমার_মোডের জন্য পরামর্শ দেয়। এ পর্যন্ত সব ঠিকই.

যাইহোক, যখন আমি cool_script.py চালানোর চেষ্টা করি তখন পাইচার্ম আমাকে "আমার_মডিউল নামে কোনও মডিউল" বলে না

এটি আমার কাছে অদ্ভুত বলে মনে হচ্ছে, কারণ

ক) টার্মিনালে (ওএস ১০.০.২) পাইথন-এ, আমি মডিউলটি কোনও সমস্যা করতে পারি না - .বাশার্কে পাইথনপ্যাথে একটি সম্পর্কিত এন্ট্রি রয়েছে

খ) পাইচর্মে - সেটিংস - প্রকল্প কার_প্রজ - প্রকল্প দোভাষী - পাইগন ইন্টারপ্রেটারের পাশে কগওয়েল - আরও - নির্বাচিত ইন্টারপ্রিটার আইকনটির জন্য পথ দেখান, পাইথনপথ থেকে পাথগুলি উপস্থিত হয় (যেমন আমার মনে হয় তাদের উচিত)

সুতরাং, আমি শীতল_স্ক্রিপ্ট.পি চালানোর চেষ্টা করার সময় আমি ত্রুটিটি কেন পাই? - আমি কী মিস করছি?

মন্তব্য:

সংযোজন 2015-ফেব্রুয়ারি-25

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

সুতরাং এটি এখন কাজ করে - তবে কেন ?

আরও প্রশ্ন উঠেছে:

  • "বিষয়বস্তু শিকড়" কী এবং "উত্স শিকড়" কি? এবং পাইথনপথে কিছু যুক্ত করা কেন এটিকে কোনওভাবে ভেঙে দেয়?
  • আমি কি সমস্ত সময় এই দুটি অপশনটি চেক করে রাখতে পারি (একইভাবে ডিফল্ট ক্ষেত্রেও, না শুধুমাত্র প্রকল্প নির্দিষ্ট কনফিগারেশনগুলি (রান / ডিবাগ কনফিগারেশন ডায়ালগের বাম প্যানেল))?

2
আপনি ইতিমধ্যে এটি চেষ্টা করে থাকতে পারেন তবে অন্যান্য প্যাকেজগুলি থেকে মডিউলগুলি আমদানি করার সময় প্যাকেজের নাম অন্তর্ভুক্ত করুন from foldername.mymodule import mymethod। আর একটি জিনিস আমাকে করতে হ'ল হ'ল যে সমস্ত ফোল্ডারে আপনার মডিউলটি পেতে আপনি খালি _init .py ফোল্ডারটি যুক্ত করতে পারেন তাই আপনার ক্ষেত্রে from parentfolder.childfolder.mymodule ...যদি দুটি ফোল্ডারে আর ডি আই দরকার হয়। ফোল্ডারগুলি একে অপরের সাথে সম্পর্কিত যেখানে নির্ভর করে আপনার sys.pathএই উত্তরে
ziddarth

4
আমার আপনার সমস্যা ছিল। : নিম্নলিখিত পোস্টে আমার সমস্যা সমাধান করা stackoverflow.com/questions/21236824/...
user3155053

আপনি কি সনাক্ত করেছেন যে কেন এই চেকবক্সগুলি চেক করা প্রকৃতপক্ষে সেগুলি পরীক্ষা করার বিপরীতে কাজ করে?
নীতিশ ইনপুটসুট অফহ্যাপিনেস

কি আমার জন্য কাজ নির্বাচন সরিয়ে হয় Enable Django Supportসেটিংসে Languages & Frameworks -> DjangoPyCharm এর প্রো সংস্করণে হবে। এটি একটি জ্যাঙ্গো কনসোল খোলার ফলে আমদানি সমস্যাগুলির কারণ হয়েছিল।
এরিক ব্লুম

উত্তর:


323

যদি আপনার নিজস্ব মডিউল একই পথে হয় তবে আপনাকে অবশ্যই সেই পথটি চিহ্নিত করতে হবে Sources Root। প্রকল্পের এক্সপ্লোরারটিতে আপনি যে ডিরেক্টরিটি আমদানি করতে চান তাতে ডান ক্লিক করুন। তারপরে সিলেক্ট Mark Directory Asকরে সিলেক্ট করুন Sources Root

আশা করি এটা কাজে লাগবে.


9
এটি আমার পক্ষে কাজ করেছে তবে ফোল্ডারটিকে উত্সরূপ হিসাবে চিহ্নিত করার আগে আমি আগে তৈরি রন কনফিগারেশনটি মুছতে এবং পুনরায় তৈরি করতে হয়েছিল।
গ্রিচ 14

2
__init__.pyপাইথনকে ডিরেক্টরিগুলি প্যাকেজযুক্ত
বিয়াটিরিজ ফোনসেকা

আপনি যদি পিচার্ম ব্যবহার না করে থাকেন তবে কীভাবে আপনি এটি করবেন? আমি ঠিক একই সমস্যা মধ্যে চলছে।
বুদেউইজন আসমান

@ বিটেরিজফোনসেকা হ্যাঁ আমি করেছি। আমি এটিকে মহাশূন্যে কাজ করতে পারি না, তবে আমি পাইচার্ম ইনস্টল করেছি এবং উত্তরটি এখানে চেষ্টা করেছি এবং এটি পুরোপুরি সূক্ষ্মভাবে কাজ করেছে, সুতরাং রুট প্যাকেজ হিসাবে সঠিক ডিরেক্টরিটি উল্লেখ করার সাথে এর অবশ্যই কিছু করার দরকার আছে।
বুদেউইজন আসমান

@ বাউডিউইজনআসমান আপনি .এই প্যাকেজটি স্থানীয় যে তা নির্দিষ্ট করতে প্যাকেজ নামের আগে ব্যবহারের চেষ্টা করতে পারেন
বিয়াটিরিজ ফনসেকা

37

আপনি যদি যান

-> সেটিং -> প্রকল্প: আমার_প্রজেক্ট -> প্রকল্প কাঠামো,

যে ডিরেক্টরিতে উত্স কোড উপলব্ধ রয়েছে এবং এটি "উত্স" হিসাবে চিহ্নিত করুন (আপনি এটি একই উইন্ডোতে দেখতে পারেন)। উত্স কোড সহ ডিরেক্টরিটি নীল হতে হবে। এখন আপনি একই ডিরেক্টরিতে থাকা মডিউলগুলিতে আমদানি করতে পারেন।


3
আমি বুঝতে পারি এটি একটি পুরানো পোস্ট তবে এটি আমার জন্য ধন্যবাদ ধন্যবাদ।
মাইক - এসএমটি

1
একই উত্তরটি বহুবার মুখোমুখি এবং উপেক্ষা করা হয়েছে, এবার চেষ্টা করে দেখুন!
এ.আমেতোভ

29

পাইচর্ম সম্প্রদায় / পেশাদার 2018.2.1

আমার এখনই এই সমস্যাটি ছিল এবং আমি @ বিতেরিজ ফনসেকা এবং জুলি জুলি যেভাবে নির্দেশ করেছেন সেভাবেই আমি এটি সমাধান করতে সক্ষম হয়েছি।

আপনি যদি File-> Settings-> Project: YourProjectName-> এ যান তবে আপনি Project Structureবর্তমানে যে প্রকল্পে কাজ করছেন তার একটি ডিরেক্টরি বিন্যাস থাকবে You আপনাকে আপনার ডিরেক্টরিগুলি দিয়ে যেতে হবে এবং সেগুলি Sourceআপনার সমস্ত উত্স ফাইলের ডিরেক্টরি হিসাবে চিহ্নিত করতে হবে either , বা হিসাবে একটিResource ফাইলগুলির ফোল্ডার যা আমদানি করার জন্য কঠোর।

আপনি এটিও নিশ্চিত করতে চাইবেন যে আপনি __init__.pyফাইলগুলি আপনার সংস্থান ডিরেক্টরিতে বা সত্যিকারের যে কোনও জায়গা থেকে আমদানি করতে চান, এবং এটি পুরোপুরি সূক্ষ্মভাবে কাজ করবে।

আমি আশা করি এই উত্তরটি কাউকে সহায়তা করবে এবং আশা করি জেটব্রেইনস এই বিরক্তিকর বাগটি ঠিক করবে।


2
এটি পাইচার্ম প্রফেশনাল এর সাথে নির্দিষ্ট নয় , বরং এই বৈশিষ্ট্যটি পাইচর্ম কমিউনিটি সংস্করণেও উপলব্ধ । প্রোজেক্ট স্ট্রাকচারে মডিউলটি অন্তর্ভুক্ত ডিরেক্টরিটি ডান-ক্লিক করুন এবং তারপরে Mark Directory asপ্রসঙ্গ মেনু থেকে নির্বাচন করুন Sources Root
অস্তিত্বা শ্রীবাস্তব

1
আপনি কি এই উত্স রুটের অর্থটি বলতে দয়া করে পরামর্শ দিতে পারেন। যদিও এটি আমার সমস্যার সমাধান করেছে তবে আমি কেন এটি করছি তা বেশিরভাগই বুঝতে পারেনি।
ব্যবহারকারী3341078

8

আমি যা চেষ্টা করেছি তা হ'ল আমার ফাইলগুলি যেখানে অবস্থিত তা উত্স।

যেমন E:\git_projects\My_project\__init__.py is my location.

আমি ফাইল -> সেটিং -> প্রকল্প: আমার_প্রজেক্ট -> প্রকল্পের কাঠামোতে গিয়ে উল্লিখিত স্থানে সামগ্রীর মূল সংযোজন করেছি E:\git_projects\My_project

এটা আমার জন্য কাজ করে।


2
উত্স প্রকল্প কাঠামোর ফোল্ডারটি আমার জন্য কাজ করেছিল। ধন্যবাদ.
মাইক্রোস

ধন্যবাদ @ বীরেন্দ্র প্যাটেল এবং @ মাইক্রোস। আমার পাইচার্ম প্রকল্প চলছে /home/my_user/git_projects/this_git_project/this_pycharm_project/। আমি /home/my_user/git_projects/this_git_project/সামগ্রীর মূল /home/my_user/git_projects/this_git_project/this_pycharm_project/হিসাবে এবং একমাত্র উত্স ফোল্ডার হিসাবে যুক্ত করেছি এবং সবশেষে শেষ হয়েছে।
কেএলজ

3

my_moduleএকটি ফোল্ডারটি মডিউল নয় এবং আপনি কোনও ফোল্ডার আমদানি করতে পারবেন না, my_mod.pyএকই ফোল্ডারে যাওয়ার চেষ্টা করুন cool_script.pyএবং এর পরে করুন import my_mod as mm। এটি কারণ পাইথন কেবলমাত্র বর্তমান ডিরেক্টরিতে দেখায় sys.pathএবং তাই এটি my_mod.pyএকই ডিরেক্টরিতে না থাকলে খুঁজে পাবে না

অথবা আপনি অন্যান্য ডিরেক্টরি থেকে কীভাবে আমদানি করবেন তা বলার জন্য এখানে একটি উত্তর খুঁজতে পারেন ।

আপনার অন্যান্য প্রশ্নের হিসাবে, আমি পাইচার্ম ব্যবহার করি না বলে আমি জানি না।


আপনি একটি ফোল্ডারে একটি init .py তৈরি করতে পারেন , পাইথন ইন্টারপ্রেটারটি পাইথন প্যাকেজ হিসাবে পড়বে: মাইকগ্রুচি.com
ফনসেকা

3

আমি "পাইথনপথে সোর্স রুট যুক্ত করুন" এর সাথে ত্রুটিটি পাচ্ছিলাম। আমার সমস্যা আমি একই নামের দুটি ফোল্ডার ছিল, মত ছিল project/subproject1/thing/srcএবং project/subproject2/thing/srcআমি তাদের উভয়ের উৎস রুট হিসাবে চিহ্নিত ছিল। আমি যখন "thing"ফোল্ডারের একটির নাম পরিবর্তন করেছি "thing1"(যে কোনও অনন্য নাম), এটি কাজ করে।

হতে পারে যদি পাইচার্ম স্বয়ংক্রিয়ভাবে নির্বাচিত উত্সের শিকড় যুক্ত করে, এটি সম্পূর্ণ পথ ব্যবহার করে না এবং তাই একই নামের সাথে ফোল্ডারগুলি মিশ্রিত করে।


2

পাইথন দোভাষী যখন আপনার কোডটি খুঁজে না পান তখন এটি ঘটতে পারে। এই অবস্থানটিতে আপনার কোডটি খুঁজতে আপনাকে পাইথনের স্পষ্টভাবে উল্লেখ করতে হবে।

তাই না:

  • আপনার পাইথন কনসোলে যান
  • sys.path.extend(['your module location'])পাইথন কনসোলে যোগ করুন ।

তোমার ক্ষেত্রে:

  • আপনার পাইথন কনসোলে যান,
  • শুরুতে, নিম্নলিখিত কোডটি লিখুন:

    import sys
    sys.path.extend([my module URI location])
  • একবার আপনি এই বিবৃতিটি লিখে ফেললে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

    from mymodule import functions

এর মতো পথ যুক্ত করতে কিছুটা কুৎসিত হলেও এটি আমার পক্ষে কাজ করেছিল।
ফ্লোরিয়ান ব্লুম

এটি পাইচার্ম দ্বারা করা উচিত, স্বয়ংক্রিয়ভাবে কনসোল খোলার সময় তার মধ্যে নির্ভরতা (অন্যান্য প্রকল্প) এবং বর্তমান প্রকল্পের উত্স কোড সম্বলিত ডিরেক্টরিগুলির জন্য ডিরেক্টরিগুলির জন্য sys.path.extend কমান্ড অন্তর্ভুক্ত করা উচিত। তবে এটি স্বয়ংক্রিয়ভাবে করবেন না
ফ্যাবিব

2

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

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


আশ্চর্যজনকভাবে, এটি আমার প্রয়োজন ছিল, Invalidate Cache/Restartদু'বার করেও !
জোশ ফ্রাইডল্যান্ডার

1

সামগ্রীর শিকড়গুলি আপনার প্রকল্পের কোডটি ধারণ করে এমন ফোল্ডার হয় যখন উত্সের শিকড়গুলিও একই হিসাবে সংজ্ঞায়িত হয়। আমি যে পার্থক্য বুঝতে পেরেছি তা হ'ল সোর্স রুটগুলিতে কোডটি কনটেন্ট রুটে কোডের আগে তৈরি হয়েছিল।

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

আপডেট - সমস্যা কেবল তখন ভার্চুয়াল এনভায়রনমেট ব্যবহার করার সময় দেখা দেয় এবং কেবল সরবরাহকৃত টার্মিনালের মাধ্যমে প্রকল্পটি নিয়ন্ত্রণ করার সময়। কারণ টার্মিনালটি এখনও ডিফল্ট সিস্টেম পাইথোনপথের মাধ্যমে কাজ করে এবং ভার্চুয়াল এনভির মতো নয়। পাইথন জ্যাঙ্গো কন্ট্রোল প্যানেলটি দুর্দান্ত কাজ করে।


1

সোর্স রুট হিসাবে চিহ্নিত ডিরেক্টরিকে চিহ্নিত না করেই এই সমস্যার সমাধানটি রান কনফিগারেশনগুলি সম্পাদনা করা এবং এক্সিকিউশনে "ইনড্রপ ইন রিডাইরেক্ট" বিকল্পটি নির্বাচন করুন এবং আপনি চালনা করতে চান এমন স্ক্রিপ্ট চয়ন করুন। এটি কাজ করে কারণ এটির পরে এমন আচরণ করা হয় যে স্ক্রিপ্টটি এই ডিরেক্টরিতে ইন্টারেক্টিভভাবে চালিত হয়েছিল। তবে পাইথন এখনও মডিউলের নামটিকে ত্রুটিযুক্ত করে "x নামে কোনও মডিউল নয়" চিহ্নিত করবে:

থেকে ইনপুট পুনর্নির্দেশ:

দোভাষী যখন আমদানি বিবৃতি কার্যকর করে, এটি নিম্নলিখিত উত্সগুলি থেকে একত্রিত ডিরেক্টরিগুলির একটি তালিকায় x.py অনুসন্ধান করে:

  1. যে ডিরেক্টরি থেকে ইনপুট স্ক্রিপ্টটি চালিত হয়েছিল বা বর্তমান ডিরেক্টরি যদি ইন্টারপ্রিটার ইন্টারেক্টিভভাবে চালিত হয়
  2. সেট করা থাকলে পাইথনপথ পরিবেশে পরিবর্তনশীল থাকা ডিরেক্টরিগুলির তালিকা।
  3. পাইথন ইনস্টল করার সময় কনফিগার করা ডিরেক্টরিগুলির ডিরেক্টরি নির্ভর একটি ডিরেক্টরি আমার ক্ষেত্রে উবুন্টুতে usr / lib / python3.6 রয়েছে।

0

পাইচার্ম 2017.1.1

  1. ক্লিক করুন View->ToolBar &View->Tool Buttons
  2. বাম ফলকে Projectদৃশ্যমান হবে, এটিতে ডান ক্লিক করুন এবং টিপুন Autoscroll to source এবং তারপরে আপনার কোডটি চালান।

এটি আমার পক্ষে কাজ করেছে।


0

ln -s। someProject

আপনার যদি কিছু ডাইরেক্টরি / কিছুপ্রজেক্টডির এবং দুটি ফাইল থাকে, file1.py এবং file2.py, এবং file1.py এই লাইনটি দিয়ে আমদানির চেষ্টা করে

কিছুপ্রজেক্টডির আমদানি ফাইল 2 থেকে

আপনি কিছু প্রোজেক্টডিরকে উত্স ডিরেক্টরি হিসাবে মনোনীত করেছেন এমনকি এটি পছন্দসমূহ, প্রকল্প, প্রকল্প কাঠামো মেনুটিকে সামগ্রীর মূল হিসাবে প্রদর্শন করা হলেও এটি কাজ করবে না। প্রকল্পটি উপরের শো হিসাবে সংযুক্ত করে এটি কাজ করার একমাত্র উপায় (ইউনিক্স কমান্ড, ম্যাকটিতে কাজ করে, উইন্ডোজের ব্যবহার বা সিনট্যাক্স সম্পর্কে নিশ্চিত নয়)। কিছু ব্যবস্থা আছে যেখানে পাইচার্ম সংস্করণ নিয়ন্ত্রণ থেকে চেকআউট বা কনটেক্সট রুট হিসাবে যুক্ত হয়ে স্বয়ংক্রিয়ভাবে এটি সম্পাদন করে, যেহেতু একটি নির্ভরশীল প্রকল্পে পাইচার্ম দ্বারা নরম লিঙ্কটি তৈরি করা হয়েছিল। সুতরাং, কেবল একই অনুলিপি করা সত্ত্বেও ডিরেক্টরিটির অদ্ভুত প্রতিলিপি বিরক্তিকর এবং প্রয়োজনীয়তা বিভ্রান্ত করছে। এছাড়াও নির্ভরতা যেখানে স্বয়ংক্রিয় তৈরি হয়েছিল, এটি সংস্করণ নিয়ন্ত্রণের অধীনে নতুন ডিরেক্টরি হিসাবে প্রদর্শিত হবে না। সম্ভবত .idea ফাইলের তুলনা আরও প্রকাশ করবে।


-1

আমার জন্য যে উত্তরটি কাজ করেছিল তা হ'ল ওপি তার 2015 আপডেটে যা উল্লেখ করেছে: আপনার পাইথন রান কনফিগারেশনে এই দুটি বাক্সটি আনচেক করুন :

  • "পাইথনপথে সামগ্রীর শিকড় যুক্ত করুন"
  • "পাইথনপথে উত্সের শিকড় যুক্ত করুন"

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

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