前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3之模块、包

Python3之模块、包

作者头像
py3study
发布2020-01-13 11:13:48
4300
发布2020-01-13 11:13:48
举报
文章被收录于专栏:python3python3
一、模块

1.模块的导入方式

代码语言:javascript
复制
import random,time
#导入多个模块
#使用,如:random.randint(1,10)
#使用,如:time.sleep(1)

from random import randint
#使用,如:randint(1,10)

from random import *
#导入所有功能
#使用,如:uniform(1,2)
#但不建议这样用,
# 因为当导入多个模块时,可能有同名的方法,这时只会调用最后导入的模块中的方法

import random as rd
#当某些模块名较长时,可以将模块重命名

注意: 1.当导入模块时,最先在当前路径下查找,没找到才会到系统中查找,所以py文件不要与模块名重名 2.当导入模块时,实际上是先把模块程序执行一遍,所以当想将自己的py文件作为自定义模块时,测试部分的代码前应加上如下语句:

代码语言:javascript
复制
#此处为实现某些功能的程序

if __name__ == '__main__':
    #此处调用功能进行应用
    '''
    当本程序调用上面的功能时,__name__会返回字符串'__main__';当被别的程序导入调用时,会返回“模块的名字”
    '''

2.模块中的__all__ 当使用from xx import *时,为防止导入其他不必要的东西,可以在自定义的模块中加上 __all__ = [‘函数名’,’全局变量名’,’类名等等’](注意名称必须用字符串形式放在列表中) 这时,from x import *时,只会导入列表中指定的功能

举个栗子:

代码语言:javascript
复制
'''
#yyy.py中的代码

__all__ = ["fun1"]

def fun1():
    print("---fun1---")
def fun2():
    print("---fun2---")
'''
from yyy import *
import yyy as test
fun1()
try:
    fun2()
except Exception as exc:
    print("调用fun2()异常:",exc)
print("*********"*6)
test.fun2()

运行结果:

代码语言:javascript
复制
F:\python_projects\venv\Scripts\python.exe F:/python_projects/test.py
---fun1---
调用fun2()异常: name 'fun2' is not defined
******************************************************
---fun2---

进程已结束,退出代码0

运行结果可见:由于__all__ = ["fun1"]中没有”fun2”,所以尽管导入了所有,但是也只能调用fun1函数。当然,可以通过import yyy方式 调用。

二、包

包就是将多个模块放在文件夹中,这个文件夹就是包;当然,这个文件夹与日常文件夹有点不同 不同之处在于,该文件夹下除其他文件外,还有一个__init__.py文件,如图所示。 当有这个文件时,就可以在包和需要导入包的程序处于同一目录的情况下,调用包中的模块了。不过仅限于使用from test_all import test_all_1,test_all_2(不能用from test_all import *),使用时也需要像test_all_1.fun1()这样调用

这里写图片描述
这里写图片描述

包内文件 __init__.py在导入(import)包时,会自动执行。 所以,解决上述问题的方法为:在__init__.py中写如下代码:

代码语言:javascript
复制
__all__ = ["test_all_1","test_all_2"]
#该句的作用是:可以用from test_all import *导入列表中指定的所有模块
#这时就可以用"test_all_1.fun1()"形式调用函数了,但是不能通过import test_all导入

from . import test_all_1,test_all_2
#加上该句,则可以通过import test_all导入,然后通过test_all.test_all_1.fun1()调用

在完成上述步骤后,还有一个问题,就是“包和需要导入包的程序必须处于同一目录”才可以导入,接着往下

三、模块的发布与安装

下面是完整的包文件夹:

这里写图片描述
这里写图片描述

图左边为文件夹内容 新建了一个mymodule文件夹:包含一个setup.py文件以及前面的test_all文件夹,setup.py中需写入,代码:

代码语言:javascript
复制
from distutils.core import setup

setup(name="XiaoDong",version="1.0",description="XiaoDong's module",author="XiaoDong",
      py_modules=['test_all.test_all_1','test_all.test_all_2'])
'''
name为一会儿生成的.tar.gz包的名字;
version为版本号
description为对库的介绍
author为开发人员名字
还有其他的参数,比如邮箱等,详情可以到官网https://docs.python.org/3/distutils/index.html查看
'''

然后,在windows命令行中,切换到mymodule文件夹中,执行python setup.py build,注意:我只装了python3,这样生成的库只能python3用;要生成python2的库,就用python2执行。 接着,再执行python setup.py sdist,就完成了

这里写图片描述
这里写图片描述

这时发现,mymodule文件夹下生成了一些文件,如图:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

图 图中的“XiaoDong-1.0.tar.gz”就是python库了,可以随便发给别人安装使用

将“XiaoDong-1.0.tar.gz”解压:

这里写图片描述
这里写图片描述

然后,在命令行切换目录到setup.py文件夹下,执行python setup.py install

这里写图片描述
这里写图片描述

此时就安装成功了,可以在任意py文件中调用了

这里写图片描述
这里写图片描述

更详细发布python模块请看官方文档(https://docs.python.org/3/distutils/index.html)


文章主要是本人在学习python过程中的一些笔记,便于后期复习,所以某些地方不会很详细。由于个人水平的限制,若有错误的地方,还请指正。代码部分是在python3.7环境下测试。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、模块
  • 二、包
  • 三、模块的发布与安装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档