提要
在Python 中不能像 java 那样可以直接在一个项目下直接导包,先提前说一个概念:模块; 模块是一个完整的 Python 文件,以 .py 结尾,有的时候需要将一个模块 在父级目录导入子级目录、子级目录之间同级导入、子级目录导入父级的模块。如果是在 pycharm 中写代码是可以直接导入的,但是单独 使使用Python 解释器去运行,也就是在 cmd 中 : Python 模块ming.py 这种方式运行有可能回报错, xx.py 的模块找不到问题
目录介绍
Python 中一个目录下如果存在__init__.py 表示这个目录是一个包,没有这个文件说明是一个目录;这个文件可以为空(我们测试的时候全部为空)
目录
test1
│ m1.py 用于存放父级同级调用的代码
│ m2.py 用于调用父级同级目录代码、调用子级目录、
│ init.py
│
├─a
│ │ x1.py 用于存放子级目录测试代码
│ │ y1.py
│ │ init.py
│
├─b
│ │ test.py 用于测试子级目录相互调用、子级目录调用父级目录代码
│ │ init.py
1、父级目录相互调用、父级调用子级目录
父级目录
子目录
m1.py
def tm1():
print("这:是m1")
m2.py
# 同级调用: 直接导入即可,但是在 pycharm 中会会出现红线报错但是不影响运行
from m1 import tm1
tm1()
# 父级目录调用子级目录 : 从子目录往下寻找即可,但是在pycharm 中会会出现红线报错但是不影响运行
from a.x1 import fun
fun()
# 父级目录导入整个子级目录
from a import x1
x1.fun()
x1.py
def fun():
print("这是子目录a的fun")
cmd中运行
2、子目录的同级调用、子目录调用父级目录
b => test.py
# 子级目录调用同级的子级目录:pycharm 中会会出现红线报错但是不影响运行
import sys
sys.path.append("..")
from a import x1
x1.fun()
# 子级目录调用父级目录
import sys
sys.path.append("../../") # pycharm 中可以不加这个,但是在 cmd 中必须要加这个才行
from test1 import m1
m1.tm1()
其中 “…/” 表示上一级目录