python导包
阅读原文时间:2023年07月09日阅读:2

我们将完成特定功能的代码块放在一个.py结尾的文件中,这个文件被称为模块。在这个模块中可能包含变量,函数,类等等内容。

当我们从外部需要用到这个模块时,就需要将这个模块导入到我们当前环境。导入方式有以下几种。

import 模块

import 模块.函数

from 模块 import 函数

当被导入模块和,调用模块在同一级目录下是以上方式可以直接使用。当我们项目越来越大时,模块也越来越多,可能将多个不同的功能模块放在多个不同的目录下。我们将多个模块放在一个目录(假定目录名是A)下,A我们就称为包。简言之目录在python模块管理中被称为包。包通常包含模块,和一个__init__.py文件。__init__.py文件可以为空。

python中包的导入方式

from 包.模块 import 函数

from 包 import 模块

以上两种方式都是可行的。当然,在python3版本中,__init__.py 文件无强制要求,当包中无__init__.py文件时,其实也可以进行导包。

示例测试:

目录结构

core下包含三个文件:test.py Modle/module_1.py   module_2.py  ,Modle/__init__.py

module_1.py 添加以下代码

#!coding=utf-8
#Author : littleboss
#Datetime : 2022年6月12日, 0012 10:11
# Project  : rain

name_1 = "one day"

print("module_1 已经被导入")

def first0():
    print("导包 -> first0函数已经被执行")

def first1(a,b):
    c = a + b
    return c

def first2(arc):
    print(arc)

def first3(arc):
    from random import choice
    aaa = ["sun","rain","wind"]
    return choice(aaa)

class Student:
    def __init__(self, name, id, sex, age):
        """ student dealwith func"""
        self.name = name
        self.id = id
        self.sex = sex
        self.age = age

    def brithday_year(self):
        from _datetime import datetime
        year = datetime.now().strftime("%Y")
        year = int(year) - self.age
        return  year

module_2.py   添加以下代码

#!coding=utf-8
#Author : littleboss
#Datetime : 2022年6月13日, 0013 15:22
# Project  : rain

def one_1():
   print("module_2")

def one_2(ars):
    print(ars)

print("moudle_2.py 我执行啦")

这样,我们就创建好了一个包。

Modle
     ┠── __init__.py
     ┠── module_1.py
     ┗━━  module_2.py

python包的导入

import core.module_2

#输出:
D:\anaconda3\envs\python3.6\venv\Scripts\python.exe D:/PycharmProjects/rain/test.py
moudle_2.py 我执行啦

Process finished with exit code 0

from core.module_2 import one_2
one_2("python 练习")

执行结果:
D:\anaconda3\envs\python3.6\venv\Scripts\python.exe D:/PycharmProjects/rain/test.py
moudle_2.py 我执行啦
python 练习

__init__.py 添加

#!coding=utf-8
#Author : littleboss
#Datetime : 2022年6月13日, 0013 21:12
# Project  : rain

print("导入 Modle包")

import core.Modle
print(core.Modle)
print(type(core.Modle))

#输出结果:
#D:\anaconda3\envs\python3.6\venv\Scripts\python.exe D:/PycharmProjects/rain/test.py
导入 Modle包

Process finished with exit code 0

可见导包的本质,实际还是模块。

from core.Modle import module_1
module_1.first0()

输出结果:
导入 Modle包
module_1 已经被导入
导包 -> first0函数已经被执行