python初学之模块与包

本文详细介绍了Python中的模块和包,包括模块的定义、导入方式、第三方模块的安装与使用,以及自定义模块的创建。重点讲解了如何通过`import`和`from...import`导入模块,以及`__all__`的作用。此外,还阐述了包的概念,并分享了模块的制作与发布流程,包括创建setup.py文件、构建和发布模块到PyPI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、 模块

1、定义:

  • 模块说白了就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
  • 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块。

如:

2、如何导入模块:

**模块导入方式1:import 模块名1,模块名2和import 模块名.函数名

场景一:必须加上模块调用的原因 

因为可能存在这样一种情况:在多个模块中含有相同名称的函数, 如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。

所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

**模块导入方式2:from 模块名 import 函数名/变量名

场景二:如果只需要用到模块中的某个函数/变量/类。
 
通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,
 
但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖一 次引入。

**模块导入方式3:import 长模块名 as 短模块名和from 模块名import 长函数名 as 短函数名
场景3:如果导入的模块名/函数名/变量名过长时

如:import numpy as np

       import os.path as pth

       from random import randint as rint

**模块导入方式4:from 模块名 import*
场景3:把一个模块的所有内容全都导入
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

例如:

import random
import time
import functools
from random import randint as rint

特殊:模块中的 __all__有什么作用?

答:如果一个文件中有all变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入。

也就是:导入所有信息时, 判断模块中是否有__all__属性, 没有的话, 所有信息均可导入。 有的话,只有__all__列表里面指定的变量可以导入.

3、第三方模块:

(不是python官方提供的模块,需要通过工具安装)

第三方模块安装方式:
1) pip install 模块名
2)pip install -i https://pypi.douban.com/simple 模块名
3) 在pycharm的解释器环境中添加并实现安装

​​​例如​​​ :

import requests
import numpy as np
import matplotlib.pyplot as plt

4、自定义模块:

将自己写的.py文件封装成一个模块,则可以导入使用。

例如:

# 封装一个模块
name = '浅浅'
password = '1314'

def login():
    print('login.....')

def register():
    print('register.....')

if __name__ == '__main__':
    print('正在调用website模块......')
    # print(__file__) #打印文件的绝对路径
    # print(__doc__)  #打印模块的帮助文档
#导入上面的自定义模块
import website
website.login()
website.register()

可以看到,在导入自定义模块的时候,可以使用模块里的函数和变量

导入模块的过程,实质是执行模块内容的过程:

如整体调用后,结果如下:

# 封装一个模块
name = '浅浅'
password = '1314'

def login():
    print('login.....')

def register():
    print('register.....')

if __name__ == '__main__':
    print('正在调用website模块......')  

#导入上面的自定义模块
import website
website.login()
website.register()

运行结果:

可以看到,先执行了模块的内容,然后调用模块的login()和register()函数
然而有时候我们并不想要模块执行的结果,只想调用这个模块,那么可以:

 

___ main___ :模块的作用

  1. 如果当作模块导入时, 结果为模块名称, 这里是website
  2. 如果不是当作模块导入,结果为 ___ main___

所以:

  • 如果被当作模块导入时,不满足 if 语句,所以就不执行函数
  • 所以,我们在通常写代码调用函数时,最好加上这句if语句

二、包

1、 定义

包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰
一个普通的python应用程序目录结构:
 

注意:模块导入时:其实是在执行模块的内容,即运行一遍程序
就是一个普通目录,多了个初始化文件:__init__.py
导入包的时候其实就是在执行这个初始化文件
import * 理论上是希望文件系统找出包中所有的子模块,然后导入它们。 But 会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。 这个索引由 __ init __.py 定义 __ all __ 变量,该变量为一列表, 只会导入指定的内容

三、模块制作与发布

1、制作:

每个Python文件都可以作为一个模块,模块的名字就是文件的名字,所以python文件起名字最好起英文。

在实际工作中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效 果,这个开发人员会自行在py文件中添加一些测试信息。
为了避免这些测试信息在模块调用时执行,就需要使用 if __ name ==’ main __’: 语句

2、发布:

(1)为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样)

mkdir verifycode
mv verifycode.py verifycode

(2)在文件夹中创建一个名为 setup.py 的文件,内容如下:

from distutils.core import setup

setup(
    name='verifycode',      # 模块名称
    version='1.0.0',        # 版本
    author='作者名',         
    author_email='作者联系邮箱',
    description="模块表述",
    py_modules=['verifycode'] #这里是模块名,不需要 .py
)

(3)构建模块和发布文件:
python setup.py build
python setup.py sdist

进行解包
将发布安装到你的Python本地副本中:
python setup.py install

(4) pypi发布:(需要注册)
注册PyPI网站 http://pypi.python.org
向PyPI上传代码
python setup.py register
python setup.py sdist upload

四、 模块安装与使用

即:源码安装

  1. 找到模块的压缩包
  2. 解压
  3. 进入文件夹
  4. 执行命令sudo python setup.py install

这里具体饰演过程后面会进行更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值