文章目录

  • 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']
>>>