python的包

2023-10-30

什么是模块:xxx。py文件
社么是包:多个模块组成的文件夹
为啥要使用模块:
让我下次直接使用,不需要再重写,或者方便多人开发

1、新建一个文件夹testModel,

在此文件夹中创建一个名为 __init__.py的文件,此时python解释器就认为它是一个包,

2、引用这个包的方法:

我先在我创建的testModle中创建一个新的模块 aa.py,简单写入测试内容:

def AA():
  print('你已经成功引入这个包')

我们在这个包的外面新建一个test.py
执行以下代码,或者用交互的方式执行,

import testModle.aa
testModle.aa.AA()

如果出现以下结果,说明testModle这个包已经创建,并执行成功。

如果aa模块有多个def函数我们可以用testModle.aa.函数名调用所需要的函数,有没有一种方法可以直接写函数名调用呢?

这里介绍另一种引入方式(以引入随机数函数为例:)

from  random import randint
num = randint(1,10)
print(num)

我们只导入了random包里面的randint方法,如果要导入两个
可以这样写from random import randint,randrange,如果导入多个则可以from random import*
,但是不建议这样用,原因是:
如果你导入了两个不同的模块,但是这两个模块中存在相同的方法(函数),那么后引入的那个模块中的方法就会覆盖前面模块中相同的方法

总结:

经过测试发现from random import*好像只能导入模块不能导入包,

导入包,

from testModel import *
AA()
Bb()

这样总是出错,但是导入模块就可以随便用里面的方法,只写方法明就ok,如下:

from aa import *
AA()
A2()

3.__init__.py
这个文件可以写入__all__
假如你的包中有两个模块 :aa,bb。
from random import *:直接导入random包的所有模块,但是你只想要aa模块导入,除了 from random import aa 这种方法还可以用__all__
在文件__init__.py中加入代码:

__all__ = ['aa']

all属性由列表构成,它规定了模块的所有可见方法,会使属性列表之外的成员全部私有化。

只有在执行语句 from module import * 时,all属性才会起作用。此时所有枚举的成员被import,而其他成员被私有化。

但是在__init__.py中加入__all__,之后model也可以用import * ,这样写的

__all__ = ['aa','bb']

以下代码又可以用了,

from testModel import *
aa.AA()
bb.bb()

这里有点疑问,未0完待续。。。。

3.制作一个自己的包

根据上面建的包,现在应该是这样的目录结构:

testModel
├── aa.py
├── bb.py
└── __init__.py

接下来在testModel里面建个文件 :setup.py
在这个文件中写入:

from distutils.core import setup

setup(name="lxy", version="1.0", description="lxy's module", author="wenwen", py_modules=['aa', 'bb'])

以交互的方式运行setup.py,输入以下代码:

python setup.py build

执行结果:

running build
running build_py
creating build
creating build\lib
copying aa.py -> build\lib
copying bb.py -> build\lib

这样标识执行成功,你的目录变成一下结构:

testModel
├── aa.py
├── bb.py
├── __init__.py
├── setup.py
└── build
    └── lib
     ├──aa.py
         └──bb.py

接下来执行:

linux 环境: python setup.py sdist
win环境:python setup.py bdist_wininst

你会发现多了个dist文件夹,里面有安装程序(tar.gz或者。exe),这就是你真正做完的包

testModel
├── MANIFEST
├── aa.py
├── bb.py
├── __init__.py
├── setup.py
├── build
    └── lib
     ├──aa.py
         └──bb.py
         └── build
└── dist
    └──lxy-1.0.tar.gz

包做完之后就可以开始安装了:

模块安装、使用
1.安装的方式

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

注意:

如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径

2.模块的引入

在程序中,使用from import 即可完成对安装的模块使用

from 模块名 import 模块名或者*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的包 的相关文章

随机推荐

  • 第十四届蓝桥杯模拟赛(第三期)——Java版

    第一题 请找到一个大于 2022 的最小数 这个数转换成十六进制之后 所有的数位 不含前导 0 都为字母 A 到 F 请将这个数的十进制形式作为答案提交 public class Main public static void main S
  • MacBook m1pro在conda环境关于架构出现过的问题

    回想一下十月份的时候刚拿到电脑做了点啥 刚开始没有进行转换架构的虚拟环境的设置 导致好像是安装pyqt5 一直失败 总之查了半天 最后指向似乎是架构问题 然后利用https www bilibili com read cv13742031
  • vue3项目引入typescript总结

    tsconfig json详细配置 根选项 include 指定被编译文件所在的目录 exclude 指定不需要被编译的目录 extends 指定要继承的配置文件 files 指定被编译的文件 references 项目引用 是 TS 3
  • 使用python-pyhdfs连接hdfs时报错

    一 问题描述 raise ConnectionError e request request ConnectionError HTTPConnectionPool host a port 50075 Max retries exceeded
  • python爬虫js逆向学习(三)

    1 问题分析 1 1 查询条件设置后进行点击事件 可抓取到ajax请求的获取的数据包 1 2 对数据包请求过程进行分析 发现Formdata及respopnse都是加密的且formdata中的参数每次刷新后都不同 1 3 既然参数及相应数据
  • 哈希桶的实现

    上一篇博客中介绍了用闭散列法的二次探测和开链法构造哈希表的原理即实现方式 构造哈希表的闭散列法之二次探测地址 http blog csdn net qq 36221862 article details 73488162 下面介绍另一种方法
  • QT__TCP

    QTcpSocket断开自动重新连接 auto connect after disconnected 转载于 http blog csdn net owldestiny article details 8452605 QTcpSocket断
  • 小程序引入vant-weapp

    小程序引入第3方样式库
  • 灰度直方图OpenCV

    recognition cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include pch h include
  • Java实现判断是否为最新版本方法

    判断是否为最新版本方法 将版本号根据 切分为int数组 比较 param localVersion 本地版本号 param onlineVersion 线上版本号 return 是否为新版本 throws IllegalArgumentEx
  • NumPy模块:Python科学计算神器之一

    欢迎来到我的博客 作者 秋无之地 简介 CSDN爬虫 后端 大数据领域创作者 目前从事python爬虫 后端和大数据等相关工作 主要擅长领域有 爬虫 后端 大数据开发 数据分析等 欢迎小伙伴们点赞 收藏 留言 关注 关注必回关 上一篇文章已
  • nginx反向代理(前端 开发环境、测试环境、生产环境 解决方案)

    什么是Nginx Nginx engine x 是一个高性能的HTTP和反向代理服务 也是一个IMAP POP3 SMTP服务 Nginx是由伊戈尔 赛索耶夫为俄罗斯访问量第二的Rambler ru站点 俄文 开发的 第一个公开版本0 1
  • 团队耗时半年,整理两份非常夯实算法工程师基本功。

    这几年来 圈子内越来越卷的话题持续不下 再加上大厂程序员 被毕业 再就业 的新闻层出不穷 贩卖给人们的焦虑也越来越多 2016年 深度学习的春天是不是要来了 2017年 人工智能是不是一个泡沫 2018年 算法岗是否值得进入 2019年 如
  • pandas使用datetime作为索引并用groupby调用tseries.offsets时间位移分组

    import numpy as np import pandas as pd from datetime import datetime from pandas tseries offsets import Day MonthEnd sj
  • 路由控制配置network命令解析

    network命令 1 命令功能 network命令用来配置BGP将IP路由表中的路由以静态方式加入到BGP路由表中并发布给对等体 undo network命令用来删除指定的以静态方式加入到BGP路由表中的路由 缺省情况下 BGP不将IP路
  • C# 获取系统Icon、获取文件相关的Icon

    1 获取系统Icon 工具下载SystemIcon exe using System using System Collections Generic using System ComponentModel using System Dat
  • 什么是DDoS攻击?

    DDoS攻击是目前最常见的网络攻击方式之一 其见效快 成本低的特点 让DDoS这种攻击方式深受不法分子的喜爱 DDoS攻击经过十几年的发展 已经 进化 的越来越复杂 黑客不断升级新的攻击方式以便于绕过各种安全防御措施 一 什么是DDoS攻击
  • QT实例 - 实现http通信

    QT实现通过HTTP与服务器进行交互 原文链接 https blog csdn net hwc3737 article details 108367037 添加依赖 在项目的 pro文件中添加 QT network 引入相关头文件 incl
  • 生命在于学习——指纹混淆技术学习

    一 前言 本篇文章仅为学习笔记记录 不得用于违规用途 本篇文章为安全社公众号的Poker安全所发 本文仅为学习复现 二 介绍 指纹混淆技术 顾名思义 就是迷惑指纹扫描识别技术 三 思路 作者的思路 1 伪装CMS 作者第一个想到的就是wor
  • python的包

    什么是模块 xxx py文件 社么是包 多个模块组成的文件夹 为啥要使用模块 让我下次直接使用 不需要再重写 或者方便多人开发 1 新建一个文件夹testModel 在此文件夹中创建一个名为 init py的文件 此时python解释器就认