目录
(2)from 包名.模块名..... import 变量名或者函数名
(3)from 包名.模块名... import 变量名1,变量名2........
(1)在demo04的dmeo04_test01中导入demo03的demo03_test01()
当脚本运行的时候,可以正常执行,但是在别的地方运行,路径会发生变化,运行就可能出错
2.要想调用包下的所有模块,在包下的__init__.py文件中写:
2.在命令行中写:python3 setup.py build build
3.在命令行中写:pytohn3 setup.py sdist dist 把刚才的东西打成一个压缩包
cd.. (setup.py的路径) pyhhon3 setup.py install
一、包 package
文件夹,包含一个__init__.py文件的文件夹
二、包的导入
1.导入原则
凡是在导入时带点的,点的左边就是一个包
2.导入方式
import....方式 | import 包名.模块名 | |
form .....import ..方式 | from 包名.模块名..... import 变量名或者函数名 | from后import 引入的模块,必须明确的一个不能带点,否则会有语法错误 |
from 包名.模块名... import 变量名1,变量名2........ | ||
from 包名.模块名.... import 模块名 |
||
from 包名.模块名 import * | 不能导入模块中的所有东西,只能导入__init__.py的东西 |
在demo01下的demo01_test02导入demo01_test01,并调用demo01_test01中的函数与变量
(1)import 包名.模块名
# import 包名.模块名
import python1224.demo01.demo01_test01
# 调用方式:模块名.变量名或函数
python1224.demo01.demo01_test01.test001()
python1224.demo01.demo01_test01.test01()
(2)from 包名.模块名..... import 变量名或者函数名
# from 包名.模块名.... import 变量名或函数名
from python1224.demo01.demo01_test01 import test01
test01()
from python1224.demo01.demo01_test01 import test001
test001()
(3)from 包名.模块名... import 变量名1,变量名2........
# from 包名.模块名..... import 变量名,函数名
from python1224.demo01.demo01_test01 import test01, test001
test01()
test001()
(4)from 包名.模块名.... import 模块名
# from 包名.模块名.... import 模块名
from python1224.demo01 import demo01_test01
# 调用方式:模块名.变量名或函数名
demo01_test01.test01()
demo01_test01.test001()
(5)from 包名.模块名 import *
- 要想调用demo02里面的所有模块,必须在demo02下的__init__.py中定义名字,在__init__.py中写入__all__
-
在根目录下的其他模块导入时就没有问题了
三、包的绝对导入和相对导入
(同级目录下的包与包之间的相互调用)
1.绝对导入
以根目录为起点
2.相对导入
一个点(.) | 表示当前目录 |
两个点(..) | 表示上一级目录 |
(1)在demo04的dmeo04_test01中导入demo03的demo03_test01()
(2)在根目录下的demo02_包.py下执行:
如果是相对导入,一个模块必须要有包结构,且只能导入它的顶层模块内部的模块,
如果一个模块被直接运行,则它自己的顶层模块,不存在层次结构,所以找不到其他相对路径
四、import 导入自定义包的子模块
(包下的模块相互调用)
1.在子包调用的时候不能直接用import,
当脚本运行的时候,可以正常执行,但是在别的地方运行,路径会发生变化,运行就可能出错
测试一下路径:
2.解决方法:
把test02()的当前目录:___________dmeo05添加到path里面
(1)pycharm本身
file---->settiings------>Project day02----->Project Structure----->找到demo05
------>右键:sources------>Apply------->ok
这样设置完之后,会发现:
- test01下面的红线没有了
- 在demo02_包中运行不出错了
(2)手动添加路径
五、import 包名
1.只导入到包名,不能调用包下的所有模块
2.要想调用包下的所有模块,在包下的__init__.py文件中写:
from . import test01,tets02