文章目录
- import用法
- import module_name
- from package_name import module_name
- 绝对导入和相对导入
- import moudle_name as a
- from module_name import (function1, variable1, class2)
- 让模块可用
import用法
import module_name
直接插入模块,模块在当前目录和sys.path目录列表中的目录,模块内函数或属性的调用方式
module_name.function
module_name.property
注意不要直接使用import导入当前目录的模块,当存在嵌套导入的场景时容易出现找不到模块的场景(各个嵌套的模块不在一个目录内),所以稳健的方法是将模块的目录加到sys.path中
from package_name import module_name
插入摸个包中的模块
绝对导入和相对导入
绝对导入:
上面的import module_name和from package_name import module_name都是绝对导入,导入的模块或包需要在sys.path或者当前执行目录下
相对导入:
- from . import module_name #导入和自己同目录下的模块。
- from .package_name import module_name #导入和自己同目录的包的模块。
- from … import module_name #导入上级目录的模块。
- from …package_name import module_name #导入位于上级目录下的包的模块。
每多一个点就多往上一层目录。
import moudle_name as a
模块名称太长或者会出现冲突时使用
from module_name import (function1, variable1, class2)
导入部分函数或变量,当元素过多时可以使用括号
让模块可用
sys.path包含一个目录列表,解释器将在这些目录中查找模块。
因此有两种常用的方法
- 1.将模块放在正确的位置
推荐放在site-packages目录中,注意sys.path会包含脚本目录,所以同级目录下的模块可以相互调用
[root@CSDN /home/Sudley/Python]#python test.py
['/home/Sudley/Python', #脚本当前目录
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib64/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/gtk-2.0']
[root@CSDN /home/Sudley/Python]#python3 test.py
['/home/Sudley/Python', #脚本当前目录
'/usr/local/lib/python36.zip',
'/usr/local/lib/python3.6',
'/usr/local/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/site-packages']
[root@CSDN /home/Sudley/Python]#python3
Python 3.6.8 (default, May 26 2019, 10:58:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys,pprint
>>> pprint.pprint(sys.path)
['', #直接在Python shell中查看path发现第一个元素是空的
'/usr/local/lib/python36.zip',
'/usr/local/lib/python3.6',
'/usr/local/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/site-packages']
>>>
- 2.告诉解释器到哪里查找
上面方法一知道Python会到sys.path目录列表里面找模块,所以想在新的目录下查找模块时可以直接在sys.patn中追加目录,比如使用sys.path.append(’~/python’),但这方法其实不常见,(你需要在每次执行Python时都执行一遍)
推荐做法是在PYTHONPATH环境变量中添加,比如linux下执行
export PYTHONPATH=${PYTHONPATH}:~/python
[root@CSDN /home/Sudley/Python]#export PYTHONPATH=${PYTHONPATH}:~/python
[root@CSDN /home/Sudley/Python]#python3
Python 3.6.8 (default, May 26 2019, 10:58:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys,pprint
>>> pprint.pprint(sys.path)
['',
'/home/Sudley/Python', #设置了PYTHONPATH后这里还会直接将当前执行目录添加到sys.path目录列表
'/root/python', #此处是新增的目录
'/usr/local/lib/python36.zip',
'/usr/local/lib/python3.6',
'/usr/local/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/site-packages']
>>>