正如官方文件所说:
When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.path.
它将在sys.path
中从第一个包搜索到最后一个包
但我遇到一个例子不符合这一点
以下是一个例子:
当我安装了烧瓶时:
>>> import flask
>>> flask.__path__
['/home/yixuan/.local/lib/python3.6/site-packages/flask']
如果我在我的自定义目录(即/home/yixuan/temp)下创建一个dirflask
,那么我运行以下命令:
>>> import sys
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/yixuan/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> sys.path.insert(0, '/home/yixuan/temp')
>>> sys.path
['/home/yixuan/temp', '', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/yixuan/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> import flask
>>> flask.__path__
['/home/yixuan/.local/lib/python3.6/site-packages/flask']
(这是两个独立的口译员会话!)
我不知道为什么烧瓶包装不是我的定制烧瓶目录。在sys.path
中/home/yixuan/.local/lib/python3.6/site-packages
放在/home/yixuan/temp
之后,根据我的理解,这是不正常的,不是吗?如果是,是什么原因导致这种情况发生
没有
__init__.py
(flask/
)文件的目录是命名空间包,而不是常规包(flask/__init__.py
)或模块(flask.py
)。虽然名称空间包是按sys.path
的顺序记录的,但它们仅在没有找到任何常规包或模块时使用见sys.path documentation关于进口的说明。Flask现在是python 3安装的一部分
相关问题 更多 >
编程相关推荐