পাইথন একই ফোল্ডারে মডিউলটি খুঁজে পাচ্ছে না


98

আমার অজগর কোনওভাবে একই ডিরেক্টরিতে কোনও মডিউল খুঁজে পাবে না। আমি কি ভুল করছি? (পাইথন 2.7)

সুতরাং আমার দুটি ডিরেক্টরি সহ '2014_07_13_টেস্ট' একটি ডিরেক্টরি রয়েছে:

  1. পরীক্ষা.পি
  2. হ্যালো.পি

হ্যালো.পি:

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

def hello1():
    print 'HelloWorld!'

এবং টেস্ট.পি:

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

from hello import hello1

hello1()

তবুও পাইথন আমাকে দেয়

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 4, in <module>
ImportError: No module named hello

কোনো সমস্যা?


4
আপনি কীভাবে স্ক্রিপ্টটি কার্যকর করছেন? এছাড়াও আউটপুটটি কীimport sys; sys.path
সালেম

4
চেষ্টা করুন>>> import test
মার্টিনিউ

@ ক্যাসি_ফিল আপনি কি আপনার প্রোগ্রামটি ডিরেক্টরি থেকে চালাচ্ছেন, ফাইলগুলি কোথায় উপস্থিত রয়েছে? আমদানির জন্য, এটি কোনও বিষয় নয়, যে আমদানি এবং আমদানি করা ফাইলগুলি একটি ডিরেক্টরি ভাগ করে। গুরুত্বপূর্ণটি হল, আপনার পাইথন ইন্টারপ্রেটারের বর্তমান ডিরেক্টরি সঠিকভাবে সেট করা আছে।
জান ভ্লকিনস্কি

উত্তর:


80

আপনার কোডটি ঠিক আছে, আপনার সন্দেহ হয় আপনার সমস্যাটি আপনি এটি কীভাবে চালু করছেন।

আপনাকে আপনার '2014_07_13_test' ডিরেক্টরি থেকে অজগরটি চালু করতে হবে।

কমান্ড প্রম্পটটি খুলুন এবং আপনার '2014_07_13_ সেরা' ডিরেক্টরিতে 'সিডি' করুন।

এই ক্ষেত্রে:

$ cd /path/to/2014_07_13_test
$ python test.py

আপনি যদি ডিরেক্টরিতে এটির মতো 'সিডি' না করতে পারেন তবে এটি sys.path এ যুক্ত করতে পারেন

টেস্ট.পিতে:

import sys, os
sys.path.append('/path/to/2014_07_13_test')

অথবা পাইথনপথ সেট / সম্পাদনা করুন

এবং সব ঠিক করা উচিত ...

... ঠিক আছে আপনার 'শেবাং' লাইনগুলি (আপনার উভয় ফাইলের প্রথম লাইন) নিয়ে কিছুটা ভুল হয়েছে, '#' এবং 'এর মধ্যে কোনও স্থান থাকা উচিত নয়!'

আপনার আরও ভাল শেবাং ব্যবহার করা উচিত।

এছাড়াও আপনার প্রতিটি ফাইলের শেবাং লাইন লাগবে না ... কেবলমাত্র আপনার শেল থেকে এক্সিকিউটযোগ্য ফাইল হিসাবে চালানোর ইচ্ছা।


অনেক ধন্যবাদ, যে সমস্যা! দুর্ভাগ্যক্রমে, সাব্লাইমরেপল (যা আমি ব্যবহার করি) এখনই ফোল্ডার থেকে পাইথন শুরু করার পক্ষে সমর্থন করে না, তাই মনে হচ্ছে এখনই আমি
পথের

পরবর্তী পাঠকরা দয়া করে পৃষ্ঠার নীচে অবধি পড়ুন অন্যান্য খুব দরকারী উত্তরগুলি দেখতে, যেমন আপেক্ষিক আমদানিতে jfn থেকে একটি ।
হংকবোঝু

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

105

আপনার আমদানিকে পরীক্ষা.পিতে পরিবর্তন করুন:

from .hello import hello1

23
অন্য কেউ যদি এটি পরে খুঁজে পান তবে এটিকে আপেক্ষিক আমদানি বলা হয় এবং অজগর 2.5 তে যুক্ত করা হয়েছিল: ডকস.পিথন.অর্গ
পিপি

9
সম্পূর্ণ মডিউলটি আমদানি করতেfrom . import hello
ST7

আমি মনে করি এটি সেরা গৃহীত উত্তরের চেয়ে ভাল সমাধান। আমি সম্পূর্ণ মডিউল আমদানিটি ব্যবহার করি, যেমনটি এসটি 7 উল্লেখ করেছে:from . import local_module
জিন এম

25

আমারও একই সমস্যা ছিল, আমি স্পষ্টভাবে ফাইলের ডিরেক্টরিটিকে পথের তালিকায় যুক্ত করে সমাধান করেছি:

import os
import sys

file_dir = os.path.dirname(__file__)
sys.path.append(file_dir)

এর পরে, একই ডিরেক্টরি থেকে আমদানি করতে আমার কোনও সমস্যা হয়নি।


4
এটি কাজ করার সময়, আপেক্ষিক আমদানি ব্যবহার করে ডাব্লু ডাব্লুএন থেকে দেওয়া উত্তরটি অনেক ক্লিনার সমাধান ছিল।
রাশ শুল্টজ

16

আমি যে জেনেরিক সমাধানটি ব্যবহার করি তা এখানে। এটি একই ফোল্ডারে মডিউলগুলি থেকে আমদানির জন্য সমস্যাটি সমাধান করে:

import os.path
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

এটি মডিউলের শীর্ষে রাখুন যা "xxxx নামক কোনও মডিউল" ত্রুটিটি দেয়


4
এটি ".." এর সাথে "../ .." প্রতিস্থাপন করে প্যারেন্ট ডিরেক্টরি থেকে মডিউল লোড করতে সহায়তা করেছে। অনেক ধন্যবাদ!
নিকোলা আর।

4
হয় ফাইল ফাইল আমদানি করতে অথবা বর্তমান মডিউল যেখানে আমরা মডিউল আমদানি করছি নাম অথবা এটি ধ্রুবক
মনোজ

9

আমার ক্ষেত্রে পাইথন এটি সন্ধান করতে অক্ষম ছিল কারণ আমি কোডটি হাইফেন সহ একটি মডিউলের ভিতরে রেখেছি my-module। যখন আমি এটিতে পরিবর্তন করেছিলাম my_moduleএটি কাজ করে।


1

আমি এই ইস্যু মধ্যে দৌড়ে। আমার একই ডিরেক্টরিতে তিনটি ফোল্ডার ছিল তাই আমাকে কোন ফোল্ডারটি নির্দিষ্ট করতে হয়েছিল। উদাঃ ফোল্ডার আমদানি স্ক্রিপ্ট থেকে


0

নিম্নলিখিতটি ওপি-র সমস্যাটি সমাধান করে না, তবে শিরোনাম এবং ত্রুটিটি হ'ল আমি যা सामना করেছি।

আপনার প্রকল্পের একটি থাকে setup.pyতাতে স্ক্রিপ্ট, আপনি যে প্যাকেজ যেখানে আপনি থাকেন ইনস্টল করতে পারেন সঙ্গে python3 -m pip install -e .বা python3 setup.py installবা python3 setup.py develop, এবং এই প্যাকেজটি ইনস্টল করা হবে, কিন্তু (যখন প্যাকেজ ইম্পোর্ট কোডে পরিবর্তন দেখা যাবে তাই) এখনও সম্পাদনাযোগ্য। এটি একটি না থাকে setup.py, তা জানার জন্য

যাইহোক, ওপি-এর সমস্যার মুখোমুখি সমস্যাগুলি কি আর উপস্থিত নেই বলে মনে হচ্ছে?

ফাইল one.py:

def function():
    print("output")

ফাইল two.py:

#!/usr/bin/env python3

import one
one.function()
chmod +x two.py # To allow execution of the python file
./two.py # Only works if you have a python shebang

Command line output: output

অন্যান্য সমাধানগুলি 'নোংরা' বলে মনে হচ্ছে

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


0

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

হয়, টার্মিনাল থেকে চালানোর চেষ্টা করুন, প্রথমে আপনি সঠিক ডিরেক্টরিতে যাচ্ছেন তা নিশ্চিত করুন।

সিডি path to the root folder where all the modules are

অজগর script.py

অথবা যদি সম্পাদক থেকে VsCode [F5] চালানো হয় তবে সেখানে সম্পূর্ণ ফোল্ডারটি খুলুন এবং পৃথক ফাইলগুলি নয়।

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