2016-08-05 15 views
6

मुझे पाइथन जटिल में मॉड्यूल आयात करने में मिला, इसलिए मैं इसे साफ़ करने के लिए प्रयोग कर रहा हूं।आयात त्रुटि: पैकेज नामक कोई मॉड्यूल

PythonTest/ 
    package/ 
    __init__.py 
    test.py 

__init__.py की सामग्री::

package = 'Variable package in __init__.py' 
from package import test 

test.py की सामग्री: यहाँ मेरी फ़ाइल संरचना है जब मैं (PythonTest में) package से बाहर रहने, और python package/test.py निष्पादित

from package import package 
print package 

, मुझे मिलता है:

Traceback (most recent call last): 
    File "package/test.py", line 1, in <module> 
    from package import package 
ImportError: No module named package 

अपेक्षित आउटपुट Variable package in __init__.py है। मैं क्या गलत कर रहा हूं?


हालांकि, मैं इंटरैक्टिव मोड में उम्मीद उत्पादन प्राप्त कर सकते हैं:

sunqingyaos-MacBook-Air:PythonTest sunqingyao$ python 
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import package 
Package in __init__.py 
+0

ऐसा लगता है कि 'पैकेज' पैकेज के लिए मॉड्यूल खोज पथ स्थापित करने योग्य नहीं है। – user2357112

+0

@ user2357112 तो मुझे 'पायथनपथ' सेट करना चाहिए या 'sys.path' को संशोधित करना चाहिए? लेकिन इंटरैक्टिव मोड के तहत सबकुछ ठीक क्यों है? –

+0

मुझे लगता है कि आप अपनी फ़ाइल के समान निर्देशिका से इंटरैक्टिव मोड शुरू कर रहे हैं, ताकि पथ स्वचालित रूप से खोज पथ का हिस्सा बन जाए। एक पूरी तरह से अलग निर्देशिका से पायथन शुरू करने का प्रयास करें – WombatPM

उत्तर

5

पहले के देखते हैं कैसे संकुल और मॉड्यूल के लिए अजगर खोज। sys.path

A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH , plus an installation-dependent default.

यह खोज पथ है। इसलिए, यदि आपका मॉड्यूल/पैकेज sys.path में से एक में स्थित है, तो पाइथन दुभाषिया इसे खोजने और आयात करने में सक्षम है। डॉक्टर अधिक कहते हैं:

As initialized upon program startup, the first item of this list, path[0] , is the directory containing the script that was used to invoke the Python interpreter. If the script directory is not available (e.g. if the interpreter is invoked interactively or if the script is read from standard input), path[0] is the empty string, which directs Python to search modules in the current directory first.

मैंने उदाहरण के रूप में test.py संशोधित किया।

$ python package/test.py 
['/Users/laike9m/Dev/Python/TestPython/package', 
'/usr/local/lib/python2.7/site-packages/doc2dash-2.1.0.dev0-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/zope.interface-4.1.3-py2.7-macosx-10.10-x86_64.egg', 
'/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/colorama-0.3.3-py2.7.egg', 

जैसा कि आप देख, path[0]/Users/laike9m/Dev/Python/TestPython/package, जो निर्देशिका स्क्रिप्ट test.py कि अजगर दुभाषिया आह्वान करने के लिए इस्तेमाल किया गया था युक्त है:

import sys; import pprint 
pprint.pprint(sys.path) 

from package import package 
print package 

दो मामलों रहे हैं।

$ python           
Python 2.7.12 (default, Jun 29 2016, 14:05:02) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import package 
['', 
'/usr/local/lib/python2.7/site-packages/doc2dash-2.1.0.dev0-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/zope.interface-4.1.3-py2.7-macosx-10.10-x86_64.egg', 
'/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/colorama-0.3.3-py2.7.egg', 
... 

अब दूसरे मामले में, जब सहभागी लागू आता है "path[0] रिक्त स्ट्रिंग है, जो पहली मौजूदा निर्देशिका में मॉड्यूल खोज करने के लिए अजगर का निर्देशन है।" वर्तमान निर्देशिका क्या है? । /Users/laike9m/Dev/Python/TestPython/ (देखो यह मेरा मशीन पर पथ है, यह आपके मामले में PythonTest के लिए पथ के बराबर है)

अब आप जवाब पता:

  1. क्यों python package/test.pyImportError: No module named package दिया?

    क्योंकि दुभाषिया पैकेज को "देख" नहीं देता है। दुभाषिया के लिए पैकेज package, PythonTest के बारे में जागरूक होने के लिए sys.path में होना चाहिए, लेकिन ऐसा नहीं है।

  2. क्यों इंटरैक्टिव मोड में इस काम किया है?

    क्योंकि अब PythonTest, sys.path में है, इसलिए दुभाषिया पैकेज package पता लगाने में सक्षम है।

संबंधित मुद्दे