ImportError:没有名为包的模块

ImportError:没有名为包的模块,第1张

ImportError:没有名为包的模块

首先,让我们看看Python如何搜索包和模块。

sys.path

字符串列表,用于指定模块的搜索路径。从环境变量初始化

PYTHONPATH
,再加上与安装有关的默认值。

那就是搜索路径。因此,如果您的模块/包位于之一

sys.path
,则python解释器可以找到并导入它。医生说更多:

在程序启动时进行初始化,该列表的第一项

path[0]
是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果解释器是交互式调用的,或者从标准输入中读取了脚本),
path[0]
则为空字符串,该字符串将Python首先引导到当前目录中的搜索模块。

我以修改

test.py
为例。

import sys; import pprintpprint.pprint(sys.path)from package import packageprint package

有两种情况:

$ 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]
is
/Users/laike9m/Dev/Python/TestPython/package
是目录,其中包含
test.py
用于调用Python解释器的脚本。

$ 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 darwinType "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]
是空字符串,它指示Python首先在当前目录中搜索模块”。当前目录是什么?
/Users/laike9m/Dev/Python/TestPython/
((这是我机器上的路径,相当于
PythonTest
您的情况下的路径)

现在您知道答案了:

  1. 为什么
    python package/test.py
    importError: No module named package

因为解释器没有“看到”包。为了使解释器知道package

package
PythonTest
必须位于中
sys.path
,但不是。

  1. 为什么以交互方式工作?

因为现在

PythonTest
sys.path
,所以解释器能够找到包
package



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5646129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存