Python语言中import的使用很简单,直接使用import module_name
语句导入即可。这里我主要写一下"import"的本质。
模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量、函数、类),本质就是*.py文件。文件是物理上组织方式"module_name.py",模块是逻辑上组织方式"module_name"。
包(package):定义了一个由模块和子包组成的Python应用程序执行环境,本质就是一个有层次的文件目录结构(必须带有一个__init__.py文件)。
import本质(路径搜索和搜索路径)
"import module_name" 的本质是将"module_name.py"中的全部代码加载到内存并赋值给与模块同名的变量写在当前文件中,这个变量的类型是'module';<module 'module_name' from
"from module_name import name" 的本质是导入指定的变量或方法到当前文件中。
"import package_name"导入包的本质就是执行该包下的__init__.py文件,在执行文件后,会在"package_name"目录下生成一个"__pycache__ / __init__.cpython-35.pyc" 文件。
在模块导入的时候,默认现在当前目录下查找,然后再在系统中查找。系统查找的范围是:sys.path下的所有路径,按顺序查找。
python 在不同层级目录import 模块的方法
有一个文件夹/home/a, 里面有个模块叫b.py, 我怎么把他import到程序里?
1).
import sys;
sys.path.append("/home/a/")
import b
2).
在目录里面增加__init__.py文件,里面可以写import时执行的代码,当然也可以留空就可以.
import
home.a.b
3).
from
home.a.b
import
*
前提 home、a中都包括__init__.py
一、同级目录下的调用
程序结构如下:
-- src
|-- mod1.py
|-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用
import mod1
或
from mod1 import *;
二、调用子目录下的模块
程序结构如下:
-- src
|-- mod1.py
|-- lib
| |-- mod2.py
|-- test1.py
这时看到test1.py和lib目录(即mod2.py的父级目录),如果想在程序test1.py中导入模块mod2.py ,可以在lib件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口),然后使用:
from lib import mod2
或
import lib.mod2
三、调用上级目录下的文件
程序结构如下:
-- src
|-- mod1.py
|-- lib
| |-- mod2.py
|-- sub
| |-- test2.py
这里想要实现test2.py调用mod1.py和mod2.py ,做法是我们先跳到src目录下面,直接可以调用mod1,然后在lib上当下建一个空文件__init__.py ,就可以像第二步调用子目录下的模块一样,通过from lib import mod2进行调用了。具体代码如下:
import sys
import os
# 得到当前根目录
o_path = os.getcwd() # 返回当前工作目录
sys.path.append(o_path) # 添加自己指定的搜索路径
import mod1
from lib importmod2
补充
os.getcwd() ——返回运行脚本的路径(不含文件名.后缀)
该函数不需要传递参数,它返回当前的目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。
os.getcwd()获取的当前最外层调用的脚本路径,即getPath所在的目录也可描述为起始的执行目录,A调用B,起始的是A,那么获取的就是A所在的目录路径。(即被A调用运行了,返回A脚本的路径)
os.path.abspath(__file__) ——返回该脚本文件的绝对路径(含文件名.后缀)
os.path.dirname(os.path.abspath(__file__))返回该文件绝对路径——(即返回了路径,不含文件名.后缀)
os.path.abspath(path) 返回path规范化的绝对路径。
os.path.dirname():去掉脚本的文件名,返回目录。
os.path.dirname(os,path.realname(__file__)):指的是,获得你刚才所引用的模块 所在的绝对路径,__file__为内置属性。
模块的分类
1内建模块
可以通过 "dir(__builtins__)" 查看Python中的内建函数
非内建函数需要使用"import"导入。Python中的模块文件在"安装路径\Python\Python35\Lib"目录下。
2第三方模块
通过"pip install "命令安装的模块,以及自己在网站上下载的模块。一般第三方模块在"安装路径\Python\Python35\Lib\site-packages"目录下。