मैं एक पायथन स्क्रिप्ट करने की कोशिश कर रहा हूं जिसे इसे एकाधिक फ़ाइलों में विभाजित किया गया है, इसलिए मैं इसे बहुत लंबे समय तक फ़ाइल स्क्रिप्ट बनाने के बजाय इसे अधिक आसानी से बनाए रख सकता हूं ।पायथन आयात त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'x'
यहाँ निर्देशिका संरचना है:
wmlxgettext.py
<pywmlx>
|- __init__.py
|- (some other .py files)
|- <state>
|- __init__.py
|- state.py
|- machine.py
|- lua_idle.py
अगर मैं अपने प्रोजेक्ट (जहां wmlxgettext.py स्क्रिप्ट संग्रहीत किया जाता है) के मुख्य निर्देशिका तक पहुँचने और अगर मैं करने के लिए "आयात pywmlx" प्रयास करते समय मुझे आयात त्रुटि है (गुण त्रुटि: 'मॉड्यूल' ऑब्जेक्ट कोई विशेषता 'राज्य' है):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/programmi/my/python/wmlxgettext/true/pywmlx/__init__.py", line 9, in <module>
import pywmlx.state as statemachine
File "/home/user/programmi/my/python/wmlxgettext/true/pywmlx/state/__init__.py", line 1, in <module>
from pywmlx.state.machine import setup
File "/home/user/programmi/my/python/wmlxgettext/true/pywmlx/state/machine.py", line 2, in <module>
from pywmlx.state.lua_idle import setup_luastates
File "/home/user/programmi/my/python/wmlxgettext/true/pywmlx/state/lua_idle.py", line 3, in <module>
import pywmlx.state.machine as statemachine
AttributeError: 'module' object has no attribute 'state'
जब से मैं "परियोजना मुख्य निर्देशिका" pywmlx में हूँ होना चाहिए
यहाँ पूरा त्रुटि संदेश है PYTHONPATH पर (वास्तव में जब मुझे pywmlx/something.py आयात करने का प्रयास किया गया तो मुझे कोई परेशानी नहीं है)
मैं यह नहीं समझ पा रहा हूं कि मेरी त्रुटि कहां है और इस समस्या को हल करने के लिए कैसे।
# all following imports works well:
from pywmlx.wmlerr import ansi_setEnabled
from pywmlx.wmlerr import wmlerr
from pywmlx.wmlerr import wmlwarn
from pywmlx.postring import PoCommentedString
from pywmlx.postring import WmlNodeSentence
from pywmlx.postring import WmlNode
# this is the import that does not work:
import pywmlx.state as statemachine
यहाँ pywmlx/राज्य/__ init__.py स्रोत है:
यहाँ pywmlx/__ init__.py स्रोत है
from pywmlx.state.machine import setup
from pywmlx.state.machine import run
लेकिन मुझे लगता है कि असली पीईएमएमएलएक्स/राज्य निर्देशिका में संग्रहीत एक (या सभी) पायथन मॉड्यूल द्वारा उपयोग किए जाने वाले "आयात" में समस्या कुछ हद तक छिपी हुई है।
# State is a "virtual" class
from pywmlx.state.state import State
from pywmlx.state.lua_idle import setup_luastates
import pywmlx.nodemanip as nodemanip
def addstate(self, name, value):
# code is not important for this question
pass
def setup():
setup_luastates()
def run(self, *, filebuf, fileref, fileno, startstate, waitwml=True):
# to do
pass
अंत में यहाँ pywmlx/राज्य/lua_idle.py स्रोत है:
यहाँ pywmlx/राज्य/machine.py स्रोत है
import re
import pywmlx.state.machine as statemachine
# State is a "virtual" class
from pywmlx.state.state import State
# every state is a subclass of State
# all proprieties were defined originally on the base State class:
# self.regex and self.iffail were "None"
# the body of "run" function was only "pass"
class LuaIdleState (State):
def __init__(self):
self.regex = re.compile(r'--.*?\s*#textdomain\s+(\S+)', re.I)
self.iffail = 'lua_checkpo'
def run(xline, match):
statemachine._currentdomain = match.group(1)
xline = None
return (xline, 'lua_idle')
def setup_luastates():
statemachine.addstate('lua_idle', LuaIdleState)
क्षमा करें यदि मैं इतने सारे कोड और इतनी सारी फाइलें पोस्ट की गईं ... लेकिन मुझे डर है कि निर्देशिका में, फाइलें एक ही आयात समस्या से अधिक छुपाती हैं, इसलिए मैंने उन सभी को प्रकाशित किया, उम्मीद करते हुए कि मैं भ्रम से बचने में समस्या को समझा सकता हूं।
मुझे लगता है कि मुझे अजगर में आयात कैसे काम करता है, इस बारे में कुछ याद आती है, इसलिए मुझे उम्मीद है कि यह प्रश्न अन्य प्रोग्रामर के लिए भी उपयोगी हो सकता है, क्योंकि मुझे लगता है कि मैं अकेला नहीं हूं जिसने आधिकारिक दस्तावेज को समझने में समझना बहुत मुश्किल है आयात।
खोजों डन:
Not Useful: मैं पहले से ही स्पष्ट रूप से आयात x.y. उपयोग कर रहा हूँz हर समय मैं कुछ आयात करने के लिए
Not Useful जरूरत है: जहाँ तक मुझे पता है, pywmlx: प्रश्न आयात संबंधी त्रुटियों के बारे में पूछता है यहां तक कि अगर, यह के रूप में (1)
इसी कारणNot Useful के लिए उपयोगी नहीं लगती है मेरे परीक्षणों पर "वर्तमान कार्यशील निर्देशिका" के बाद से PYTHONPATH में स्थित होना चाहिए वह निर्देशिका है जिसमें मुख्य पायथन स्क्रिप्ट और pywmlx निर्देशिका शामिल है। मुझे सही अगर मैं जब संकुल का आयात गलत
क्या आप समस्याग्रस्त आयात को 'से बदलकर बदल सकते हैं। राज्य को राज्यमाचिन के रूप में आयात करें? –
क्या आपने पहले खाली __init__ फ़ाइलों के साथ प्रयास किया है? यदि यह काम करता है तो एलियासिंग (आयात के रूप में) का उपयोग न करने का प्रयास करें क्योंकि इससे नामस्थान संघर्ष हो सकता है। मुझे लगता है कि आप गड़बड़ नामस्थान के साथ परिपत्र आयात कर रहे हैं। हमेशा पूर्ण नाम का उपयोग करने का प्रयास करें (केवल आयात लिखें ..., आयात से नहीं)। – Serbitar
@Serbitar: मैं अपनी टिप्पणी "वोट" के लिए, क्योंकि अपने सुझाव बहुत अच्छी तरह से काम करता है चाहते हैं। __pywmlx/राज्य पर केवल __import pywmlx.state.machine__ साथ statemachine__ रूप __import pywmlx.state.machine की जगह/lua_idle.py__ बहुत अच्छी तरह से (काम करता है शायद, pywmlx.state.machine aliasing statemachine __pywmlx/\ द्वारा प्रयोग किया जाता अलियासिंग के साथ एक संघर्ष पैदा रूप में _ \ _ init \ _ \ _ py__ जहां __pywmlx.state__ एलियास किया गया __statemachine__ भी मैं अपनी टिप्पणी पर सकारात्मक वोट चिह्नित करने के लिए पता नहीं कैसे के रूप में:।।/मैं इसे – Nobun