পাইথন স্ক্রিপ্ট চালানোর চেষ্টা করার সময় "ImportError: কোনও মডিউল নামকরণ করা হয়নি"


144

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

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


4
আপনার আরও তথ্য দেওয়া দরকার। আপনি যখন "স্ক্রিপ্ট চালান" বলবেন, আপনি কি শেল স্ক্রিপ্ট বলতে চান? আপনি কী আমদানি করতে পারবেন না এটি এমন কোন মডিউল? সেই মডিউলটি কোথায় অবস্থিত? আপনার লিপিটি কোথায় অবস্থিত?
ব্রেণবার্ন

2
যদি আপনি "কী চলছে" এর একটি সুনির্দিষ্ট উত্তর চান, তবে -vবিকল্পটি দিয়ে পাইথনটি শুরু করুন এবং আপনি দেখতে পাবেন যে অজগরটি আপনি যে মডিউলগুলি আমদানি করছেন তা খুঁজে পাচ্ছেন (বা নেই)।
ফ্যাটালঅরর

আপনি কি আমদানির চেষ্টা করছেন? দুটি অজগর স্ক্রিপ্ট একই ডিরেক্টরিতে আছে?
পিনোভাইস 20:13

2
আপনি যে কোডটি চালাচ্ছেন তা, স্ট্যাক ট্রেসের সম্পূর্ণ পাঠ্য এবং ত্রুটিটি তৈরি করার জন্য আপনি ঠিক কী পদক্ষেপ নিচ্ছেন তা দয়া করে আমাদের জানান। যখন সঠিক সমস্যাটি কী তা আমরা জানি না তখন সহায়তা করা বরং কঠিন difficult
MattDMo

5
আমি অনুমান করি যে এটি বেশিরভাগ ব্যবহারকারীর সমস্যা, এমনকি প্রশ্নটি প্রথম জিজ্ঞাসা করার 4 বছর পরেও।
ওসেলোট

উত্তর:


183

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

import os
os.getcwd() 

আপনি দেখতে পাবেন যে এটি সত্য।

তবে, যাক আপনি আইপিথন নোটবুক ব্যবহার করছেন, রান করুন os.getcwd()এবং আপনার বর্তমান কার্যকরী ডিরেক্টরিটি সেই ফোল্ডারের পরিবর্তে আপনি নোটবুকটিকে আপনার আইপিথন_নোটবুক_কনফিগ.পি ফাইল (সাধারণত c.NotebookManager.notebook_dirসেটিংস ব্যবহার করে ) থেকে অপারেটিং করতে বলেছিলেন ।

সমাধানটি হ'ল পাইথ টু আপনার মডিউলটির সাথে পাইথন ইন্টারপ্রেটার সরবরাহ করা। সবচেয়ে সহজ সমাধানটি হল আপনার sys.path তালিকায় সেই পাথ যুক্ত করা। আপনার নোটবুকে, প্রথমে চেষ্টা করুন:

import sys
sys.path.append('my/path/to/module/folder')

import module-of-interest

যদি এটি কাজ করে না, আপনি আপনার হাতে অন্য একটি সমস্যা পেয়েছেন যা পাথ টু-আমদানির সাথে সম্পর্কিত নয় এবং আপনার সমস্যা সম্পর্কে আপনার আরও তথ্য সরবরাহ করা উচিত।

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


1
পিএসএ: আপনি কারণ আপনার jupyter-নোটবুক এই ত্রুটির পেয়ে থাকেন এই তাই প্রশ্ন এসেছ, তারপর নিচে দেখুন, stackoverflow.com/a/27944947/127971 দুর্ভাগ্যবশত, প্রশ্ন একটি একক উত্তরের জন্য নির্দিষ্ট যথেষ্ট নয়।
মাইকেল 25

@ মাইকেল যে উত্তরটি সাধারণ ক্ষেত্রে পাইথন মডিউলগুলি আমদানি সম্পর্কে; যখন দোভাষী দম্পতিগুলি মডিউলগুলি আমদানি করার জন্য, নোটবুকটি না না অনুসন্ধানের জন্য ডিরেক্টরি অনুসন্ধান করেন তখন ডান্ডার init.py ফাইলটি প্রয়োজন। নোটবুক ইন্টারপ্রেটার ওয়ার্কিং ডিরেক্টরি এবং পাইথনপ্যাথ সেটিং সম্পর্কে উপরের উত্তরটি সঠিক।
বোল্টজমানব্রেন

আমি বলেছিলাম যে প্রশ্নের শব্দের কারণে একাধিক সঠিক উত্তর হবে। আমি এই উত্তরটি বোঝাচ্ছি না এটি সঠিক নয় । তবে যদি জুপিটার-নোটবুক ব্যবহার করা হয়, আপনি কেবল ফাইলটি স্পর্শ করতে যাচ্ছেন __init_.py, তাই না? ... আর, না পরিবর্তন করতে চান যাচ্ছে PYTHONPATHনা কল sys.path.append, এমনকি যদি তারা সঠিক (সঠিক?)। আমার অর্থ, এগুলির মধ্যে আমার কাছে কয়েক ডজন ডিরেক্টরি ডাব্লু / কোড রয়েছে এবং আমি সেগুলি সমস্তগুলিতে যোগ করতে যাচ্ছি না - বা অন্য ব্যবহারকারীদের তাদের জুপিটার কনফিগারেশন ফাইলে আশা করি, যদিও এটি একটি ডিরেক্টরি থাকে।
মাইকেল 25

16

__init__.pyপাইথন প্রকল্পটি চালানোর সময় ফোল্ডারের নীচে নামের সাথে একটি খালি পাইথন ফাইল তৈরি করুন যা ত্রুটি দেখায়।


1
' Init.py ' দ্বারা আপনার বোঝানো হয়েছে '_ init_ .py ', তাই না? আমি _ init_ .py কে খালি ফাইল হিসাবে তৈরি করেছি এবং এটি আমার পক্ষে কাজ করে। অনেক ধন্যবাদ. তবে কেন এটি দরকার? আমার আইপথন নোটবুকের মতো একই ডিরেক্টরিতে পাইথন স্ক্রিপ্ট দেওয়ার আগে এবং আমদানিটি ঠিকঠাক কাজ করছিল।
এডুয়ার্ডো রেইস

3
প্রকৃতপক্ষে init .py ব্যবহার করা হয় অজগরটিকে নির্দেশ করার জন্য যে সেই স্থানে কিছু প্যাকেজ রয়েছে indicate তবে কেবলমাত্র এটির অধীনে আপনি যা তৈরি করেছেন তা উপ-মডিউলগুলি খুঁজে পেতে পারে। যদি আপনি ' init .py' তৈরি না করেন মানে অজগরটি জানেন না যে এতে কোনও প্যাকেজ রয়েছে। উদাহরণস্বরূপ: "মাইফোল্ডার.মাইপ্যাকেজ আমদানি মাইমডিউলস" থেকে উদাহরণস্বরূপ, আপনার এখানে init .py শুরু করা উচিত এখানে কিছু প্যাকেজ রয়েছে তা জানানোর জন্য পাইথনটি নির্দেশ করুন। অন্যথায় এটি জানেন না।
মহিদিন বিন মোহাম্মদ

1
হ্যাঁ, নিখুঁত উত্তর। অজগর ২.7 এ এটি প্রয়োজন, তবে 3
আগপে গ্যাল্লো

এটি আমার জন্য অজগর 3 এ সমস্যার সমাধান করে।
রিক মনিকা

আইপিএনবি ফাইলের উপ-ডিরেক্টরিতে পাইথন উত্স সহ জুপিটার নোটবুক ব্যবহার করে আমার ক্ষেত্রেও সমস্যাটি স্থির করে; উদাহরণস্বরূপ, foo.ipynbব্যবহার করে bar/baz.py, খালি bar/__init__.pyফাইল যুক্ত করুন যাতে নোটবুকটি ব্যবহার করতে পারেfrom bar.baz import MyClass
মাইকেল

13

তারা উভয় একই দোভাষী ব্যবহার করছেন তা নিশ্চিত করুন। উবুন্টুতে আমার সাথে এটি ঘটেছিল:

$ ipython3 -c 'import sys; print(sys.version)'
3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]

$ python3 -c 'import sys; print(sys.version)'
3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]

এবং sys.pathউভয় দোভাষীর মধ্যে পৃথক ছিল। এটি ঠিক করতে, আমি পাইথন ৩.৩ সরিয়েছি।


একগুচ্ছ পাইথন সম্পর্কিত স্টাফ ইনস্টল করতে মিনিকোন্ডা ব্যবহার করে আমিও ঠিক এই সমস্যাটি পেয়েছি। বান্ডিলযুক্ত উবুন্টু পাইথন ২.7 মিনিকোন্ডার পাইথন ২.7 থেকে আলাদা এই উত্তরটি আমাকে সমস্যাটি সমাধান করার অনুমতি দিয়েছে
বিএফএফ

4
এটা আমার সমস্যা ছিল। আমি পাইথন ২.7.১১ এ আপগ্রেড করেছি কিন্তু আমার আইপথন ইন্টারেক্টিভ শেলটি এখনও ২.7.৫ ব্যবহার করছে। আমার কেবলমাত্র pip install --upgrade ipythonসর্বশেষতম সংস্করণটি পেতে চালানো দরকার এবং তারপরে এটি স্বয়ংক্রিয়ভাবে ডিফল্ট হিসাবে ২. 2..১১ ব্যবহার করে used
Abundnce10

আমার আইপিথনটি 7.4.0 হয় যদিও এরকম পাইথনের কোনও সংস্করণ নেই।
অ্যাডারচক্স

@ অ্যাডারচক্স দোভাষী সংস্করণ পেতে আইপথনে এটি চালান:import sys; sys.version
z0r

7

মূল কারণ পাইথন এবং আইপিসনের সিএস.প্যাথগুলি আলাদা।

দয়া করে লুসিপার্ক লিঙ্কটি দেখুন , সমাধানটি আমার ক্ষেত্রে কার্যকর হয়। ওপেনসিভি দ্বারা ইনস্টল করার সময় এটি ঘটে

conda install opencv

এবং আইপিসনে আমদানি ত্রুটি পেয়েছে, এই সমস্যাটি সমাধানের জন্য তিনটি পদক্ষেপ রয়েছে:

import cv2
ImportError: ...

1. নিম্নলিখিত কমান্ড সহ পাইথন এবং আইপাইথনে পাথ পরীক্ষা করুন

import sys
sys.path

পাইথন এবং জুপিটার থেকে আপনি আলাদা ফলাফল পাবেন। দ্বিতীয় পদক্ষেপ, sys.path.append চেষ্টা-এবং-ত্রুটি করে কেবল মিস করা পথটি ঠিক করতে ব্যবহার করুন।

2. অস্থায়ী সমাধান

আইপিথনে:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

ImportError:..সমস্যা সমাধান

3. স্থায়ী সমাধান

একটি আইপিথন প্রোফাইল তৈরি করুন এবং প্রাথমিক সংযোজন সেট করুন:

বাশ শেলের মধ্যে:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py

Vi তে, ফাইলটিতে যুক্ত করুন:

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]

সম্পন্ন


'আইপিথন প্রোফাইল তৈরি করুন' .... হ্যাঁ! এটিই একমাত্র (স্থায়ী) সমাধান যা প্রতিস্থাপন পাঠ্যপথ এবং পাইথনপথ থেকে পড়েনি জুপিটার নোটবুককে সম্বোধন করে ... প্রতিটি ফাইলের (ইউক) শুরুতে অগোছালো sys.path বিবৃতি অবলম্বন না করে। আপনাকে ধন্যবাদ জেসি
জনল_10

6

করা sys.path.append('my-path-to-module-folder')কাজ করবে, তবে প্রতিবার মডিউলটি ব্যবহার করতে চাইলে আইপিথনে এটি না করা export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"আপনি নিজের ~/.bash_profileফাইলটিতে যুক্ত করতে পারেন ।


2

আইপথন ইনস্টল করার আগে, আমি ইজি_ইনস্টল দিয়ে মডিউলগুলি ইনস্টল করেছি; বলুন sudo easy_install mechanize

আইপথন ইনস্টল করার পরে, মডিউলগুলি সনাক্ত করতে আইপিথনের জন্য আমাকে ইজি_সনস্টল পুনরায় চালাতে হয়েছিল।


2

অনুরূপ সমস্যা ছিল, এর python3পরিবর্তে কল করে এটি ঠিক করুন python, আমার মডিউলগুলি পাইথন ৩.৫ এ ছিল।


2

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

নীচে আমার প্রকল্পের ডিরেক্টরি কাঠামোটি রয়েছে:

/project/apps/..
/project/tests/..

আমি কমান্ডের নীচে চলছিলাম:

>> cd project

>> python tests/my_test.py

উপরের কমান্ড চালানোর পরে আমি ত্রুটি নীচে পেয়েছি

no module named lib

আমার_টেষ্ট.পি-তে lib আমদানি করা হয়েছিল

আমি sys.path মুদ্রণ করেছি এবং বুঝতে পেরেছি যে প্রকল্পে আমি যে কাজ করছি তার পথ সিএস.পথ তালিকায় পাওয়া যায় না ys

আমি আমার স্ক্রিপ্টের শুরুতে কোডের নিচে যুক্ত করেছি my_test.py

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

এটি সমাধানের ভাল উপায় কিনা তা আমি নিশ্চিত নই তবে হ্যাঁ এটি আমার পক্ষে কাজ করে।


আপনি যদি সর্বদা একই অবস্থান থেকে স্ক্রিপ্ট চালান তবে এটি কাজ করবে। অন্যথায়, আপনি os.getcwd()স্ক্রিপ্টটি যে ডিরেক্টরিটি চালিত করেছিলেন সেই ডিরেক্টরিটি পেয়ে যাওয়ায় স্ক্রিপ্ট ফাইলটি যেখানে থাকে সেই ডিরেক্টরিটি নয় , আপনি সমস্যার মধ্যে পড়ে যাবেন ।
নাথন আর্থার

1

আমি এটি ঠিক করেছি:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)

1

আমি দেখতে পেয়েছি যে এই সমস্যার সমাধান এখানে ব্যাপকভাবে নথিভুক্ত করা হয়েছিল:

https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

মূলত, আপনাকে অবশ্যই জপিটার পরিবেশের মধ্যে প্যাকেজগুলি ইনস্টল করতে হবে, যেমন শেল কমান্ড জারি করে:

!{sys.executable} -m pip install numpy

একটি অনুমোদিত পূর্ণ উত্তরের জন্য দয়া করে উপরের লিঙ্কটি চেক করুন।


0

আমি এই বৈষম্যের আরও একটি উত্স খুঁজে পেয়েছি:

আমি আইপিথন স্থানীয়ভাবে এবং সাধারনত ভ্যুচুয়াল্নভসে ইনস্টল করেছি। আমার সমস্যাটি হ'ল, আইপিথন দিয়ে একটি নতুন তৈরি ভার্চুয়ালেনভের অভ্যন্তরে সিস্টেম আইপথনটি বেছে নেওয়া হয়েছিল, যা ভার্চুয়ালেনভ (২.7.x বনাম ৩.৩.x) এর পাইথন ও আইপথনের চেয়ে আলাদা সংস্করণ ছিল এবং উদ্দীপনা তৈরি হয়েছিল।

আমি মনে করি যে যখনই বাইনারি থাকবে এমন কোনও কিছু ইনস্টল করার জন্য স্মার্ট জিনিসটি yourvirtualenv/binহ'ল তাত্ক্ষণিকভাবে চালানো rehashবা আপনি যে কোনও শেল ব্যবহার করছেন তার জন্য অনুরূপ যাতে সঠিক পাইথন / আইপথন বাছাই করা যায়। ( pipইনস্টল করার পরে উপযুক্ত হুক রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে ...)


0

স্ক্রিপ্ট না করে সমাধান:

  1. স্পাইডার খুলুন -> সরঞ্জাম -> পাইথনপথ পরিচালক
  2. "পথ যোগ করুন" ক্লিক করে পাইথন পাথগুলি যুক্ত করুন। উদাহরণস্বরূপ: 'সি: \ ব্যবহারকারীগণ \ ব্যবহারকারী \ অ্যাপডাটা \ স্থানীয় \ প্রোগ্রামগুলি \ পাইথন \ পাইথন 37 \ লিবি \ সাইট-প্যাকেজগুলি
  3. পদক্ষেপ 2 এ সেট করা পাইথনপথগুলি ব্যবহার করার জন্য অন্যান্য প্রোগ্রামগুলিকে (যেমন: বৃহস্পতি নোটবুক) অনুমতি দেওয়ার জন্য "সিঙ্ক্রোনাইজ করুন ..." ক্লিক করুন।
  4. জুপিটারটি খোলা থাকলে পুনরায় চালু করুন

0

এটি সম্ভবত হয় বিভিন্ন পাইথন সংস্করণ আপনার সিস্টেমে ইনস্টল দ্বারা সৃষ্ট , অর্থাত্ python2 বা python3

কমান্ডটি চালান $ pip --versionএবং পাইপন 3x$ pip3 --versionকোন পাইপটি এসেছে তা যাচাই করতে । যেমন আপনার নীচের মত সংস্করণ তথ্য দেখতে হবে:

pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

তারপরে example.pyনিচের কমান্ড দিয়ে স্ক্রিপ্টটি চালান

$ python3 example.py

0

ডিরেক্টরিটি আমার সাথে ঘটেছিল utils। আমি এই ডিরেক্টরিটি আমদানি করার চেষ্টা করছিলাম:

from utils import somefile

utilsঅজগরটিতে ইতিমধ্যে একটি প্যাকেজ। আপনার ডিরেক্টরিটির নামটি অন্যরকম কিছুতে পরিবর্তন করুন এবং এটি ঠিক কাজ করা উচিত।


0

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

python3 .....

পরিবর্তে

python

0

এই উত্তরটি যদি এই প্রশ্নের ক্ষেত্রে প্রযোজ্য তবে

  1. আপনি আপনার কোড পরিবর্তন করতে চান না
  2. আপনি স্থায়ীভাবে পাইথনপথ পরিবর্তন করতে চান না

অস্থায়ীভাবে পাইথনপথ পরিবর্তন করুন

নীচের পথ আপেক্ষিক হতে পারে

PYTHONPATH=/path/to/dir python script.py

0

sys.path.append আমদানি করুন ('/ ব্যবহারকারী / {ব্যবহারকারী} / লাইব্রেরি / পাইথন/3.7/lib/python/site-packages') আমদানি করুন


-1

এটি সরান pathlibএবং পুনরায় ইনস্টল করুন। sitepackagesফোল্ডারে পাথলিব মুছুন এবং পাইপ কমান্ড ব্যবহার করে পাথলিব প্যাকেজটি পুনরায় ইনস্টল করুন:

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