chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190313 - 模块和包引用的简单介绍 - bailian #31

Open 15175036183 opened 5 years ago

15175036183 commented 5 years ago

模块和包的介绍

模块的定义:实质就是以.py结尾的python文件,用来从逻辑上组织python文件(函数、类、变量、实现一个功能)

导入模块的本质:就是把python文件解释一遍

包的定义:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)

导入包的本质就是执行该包下面的__init__.py文件
导入模块
D:\Users\hlj\PycharmProjects\untitled\day02\moudle_test\moon.py

def run():
    print("兔子跑得是真快!")

在moudle_main.py文件下引入moon模块

D:\Users\hlj\PycharmProjects\untitled\day02\moudle_test\moudle_main.py

import moon
moon.run()
D:\Users\hlj\PycharmProjects\untitled\day02\moudle.py

def cat():
    print("这是moudle里的cat方法")

在moudle_main.py文件里引用moudle模块

D:\Users\hlj\PycharmProjects\untitled\day02\moudle_test\moudle_main.py

import sys,os
print(sys.path) #打印环境变量
print(os.path.abspath(__file__))#获取当前文件的绝对路径
#要想找到导入的模块,必须要找到该模块所在的目录,D:\Users\hlj\PycharmProjects\untitled\day02
#这时就可以用os.path.dirname()函数,回退到上一级目录,直到回退到要导入模块的上一级目录

a = os.path.dirname(os.path.abspath(__file__))
x = os.path.dirname(a)
print(x)

#找到x目录后,引用append()追加函数,将x目录追加到环境变量里
sys.path.append(x)
print(sys.path)
from day02 import moudle
moudle.cat()

导入包

package_test是一个包,该包下包含init.py文件和test1.py模块,导包时,就是执行init.py文件

D:\Users\hlj\PycharmProjects\untitled\day02\package_test\__init__.py

# import test1
def logger():
    print("这里是package_test模块")

def test():
    print("这个是模块中的test方法")
logger()
test()
from .test1 import *    #从当前目录下引入所有的方法
D:\Users\hlj\PycharmProjects\untitled\day02\package_test\test1.py

def eat():
    print("I like eat apple")
def laohu():
    print("I love you")

在moudle_index.py文件下要引用package_test包下的test1模块下的laohu()方法

D:\Users\hlj\PycharmProjects\untitled\day02\moudle_index.py

from day02 import package_test
package_test.test1.laohu()
.py文件和要导入的包在同一目录下的例子

p_test.py文件下要引入package_test包下的test1模块下的eat()方法

D:\Users\hlj\PycharmProjects\untitled\day01\p_test.py
#跨目录导包和跨目录导模块原理相同

import sys,os
# import package_test
print(sys.path)
x = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(x)
sys.path.append(x)
print(sys.path)
from day02 import package_test
package_test.test1.eat()