我创建了一个具有以下文件夹结构的自定义库:
(*,*,*,255)
现在我想在以下文件夹结构中使用DS
-lib
-init__.py
-db.py
-dispatch.py
-links.py
下的文件:
lib
当我apps
- framework
-- test.py
from DS.lib.dispatch import *
时,它会出错:
test.py
更新
from lib.db import Links ImportError: No module named 'lib'
dispatch.py
答案 0 :(得分:1)
这个主题还有我在这里解释的内容,但是在文件系统上的python包和模块的简单情况下,它的工作原理大致如下。鉴于以下文件:
模块是一个简单的.py
文件。这些文件可以位于文件系统的任何位置,而不必位于包中。模块通常包含类和函数声明。运行/导入模块时,将执行函数/类定义之外的任何代码。
<强> /someplace/foo.py 强>
def func():
print "I am foo.func"
print "I run at module import"
包是一个包含__init__.py
的目录。包也可以位于文件系统的任何位置。导入包时会执行__init__.py
模块,并且该模块的内容将成为包的内容。
<强> / anotherplace /酒吧/ __初始化__。PY 强>
def func():
print "I am bar.func"
print "I run at package import"
包中包含模块或其他子包。子模块不会自动导入。
<强> /anotherplace/bar/child.py 强>
def func():
print "I am bar.baz.func"
print "I run at module import"
可以从其他模块导入模块和包。
当python看到import
语句时,它会在某些目录中搜索代码。这些目录是模块搜索路径。搜索路径由以下内容组成:
您可以在运行时检查当前模块搜索路径:
import sys
print sys.path
您会注意到,在上面的示例中,我已将foo
放在/someplace/
和bar
/anotherplace/
中。
如果我在/someplace/
中运行python解释器,则import foo
将成功(因为它位于当前工作目录中)。但是import bar
会失败,因为/anotherplace/
不在搜索路径上。
要使两个导入都起作用,两个源文件夹都必须位于搜索路径中。请注意,包的正确源文件夹是__init__.py
之上的目录。在这种情况下,它应该是:
/someplace/
/anotherplace/