如何在其他文件中导入Python方法?

时间:2017-05-22 05:52:46

标签: python python-3.x

我创建了一个具有以下文件夹结构的自定义库:

(*,*,*,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

1 个答案:

答案 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语句时,它会在某些目录中搜索代码。这些目录是模块搜索路径。搜索路径由以下内容组成:

  • 当前工作目录
  • PYTHONPATH环境变量
  • 系统默认值

您可以在运行时检查当前模块搜索路径:

import sys
print sys.path

您会注意到,在上面的示例中,我已将foo放在/someplace/bar /anotherplace/中。

如果我在/someplace/中运行python解释器,则import foo将成功(因为它位于当前工作目录中)。但是import bar会失败,因为/anotherplace/不在搜索路径上。

要使两个导入都起作用,两个源文件夹都必须位于搜索路径中。请注意,包的正确源文件夹是__init__.py之上的目录。在这种情况下,它应该是:

  • /someplace/
  • /anotherplace/