Python-import导⼊上级⽬录⽂件
假设有如下⽬录结构:
-- dir0
  | file1.py
  | file2.py
  | dir3
   | file3.py
  | dir4
   | file4.py
dir0⽂件夹下有file1.py、file2.py两个⽂件和dir3、dir4两个⼦⽂件夹,dir3中有file3.py⽂件,dir4中有file4.py⽂件。
1.导⼊同级模块
python导⼊同级模块(在同⼀个⽂件夹中的py⽂件)直接导⼊即可。
import xxx
如在file1.py中想导⼊file2.py,注意⽆需加后缀".py":
import file2
# 使⽤file2中函数时需加上前缀"file2.",即:
# file2.fuction_name()
2.导⼊下级模块
导⼊下级⽬录模块也很容易,需在下级⽬录中新建⼀个空⽩的__init__.py⽂件再导⼊:
from dirname import xxx
如在file1.py中想导⼊dir3下的file3.py,⾸先要在dir3中新建⼀个空⽩的__init__.py⽂件。
-- dir0
  | file1.py
  | file2.py
  | dir3
   | __init__.py
   | file3.py
  | dir4
   | file4.py
import语句再使⽤如下语句:
# plan A
from dir3 import file3
或是
# plan B
import dir3.file3
# import dir3.file3 as df3
但使⽤第⼆种⽅式则下⽂需要⼀直带着路径dir3书写,较为累赘,建议可以另起⼀个别名。
3.导⼊上级模块
要导⼊上级⽬录下模块,可以使⽤sys.path: 
import sys
sys.path.append("..")
import xxx 
如在file4.py中想引⼊import上级⽬录下的file1.py:
import sys
sys.path.append("..")
import file1
sys.path的作⽤:当使⽤import语句导⼊模块时,解释器会搜索当前模块所在⽬录以及sys.path指定的路径去需要import的模块,所以这⾥是直接把上级⽬录加到了sys.path⾥。
“..”的含义:等同于linux⾥的‘..’,表⽰当前⼯作⽬录的上级⽬录。实际上python中的‘.’也和linux中⼀致,表⽰当前⽬录。
4.导⼊隔壁⽂件夹下的模块
如在file4.py中想引⼊import在dir3⽬录下的file3.py。
这其实是前⾯两个操作的组合,其思路本质上是将上级⽬录加到sys.path⾥,再按照对下级⽬录模块的⽅式导⼊。
同样需要被引⽂件夹也就是dir3下有空的__init__.py⽂件。
-- dir
  | file1.py
  | file2.py
  | dir3
   | __init__.py
   | file3.py
  | dir4
   | file4.py
同时也要将上级⽬录加到sys.path⾥:
import sys
sys.path.append("..")
from dir3 import file3
5.常见错误及import原理:
在使⽤直接从上级⽬录引⼊模块的操作时:
from .. import xxx
经常会报错:
ValueError: attempted relative import beyond top-level package
这是由于相对导⼊时,⽂件夹实质上充当的是package,也就是包的⾓⾊(⽐如我们常⽤的numpy、pandas都是包)。如果python解释器没有认同该⽂件夹是package,那么这就是⼀个普通的⽂件夹,⽆法实现相对导⼊。
⽂件夹作为package需要满⾜如下两个条件:
1. ⽂件夹中必须存在有__init__.py⽂件,可以为空。
2. 不能作为顶层模块来执⾏该⽂件夹中的py⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。