谈python3的封装
这章给大家介绍,如何封装一个简单的python库
首先创建一个以下型式的文件结构
rootFile/
setup.py
example_package/
__init__.py
example_module.py
example_package2/
__init__.py
example_module.py
其中的两个__init__.py可以是一个空文件,但是它是导入package所必需的文件,用来,所以请务必创建,__init__.py中可以编写Python代码,但是不建议这么做,因为实际的逻辑可以在模块中实现,__init__.py应尽量轻。
输入在你的python文件中分别添加以下内容
# rootFile/example_package/example_module.py:
class module_class:
def __init__(self):
pass
def print_hello():
print('This is my first module')
myName = 'jobsofferings'
def printMyName():
print(myName)
# rootFile/example_package/example_package2/example_module.py:
class module_class:
def __init__(self):
pass
def print_hello():
print('This is my second module')
myName = 'jobsofferings'
def printMyName():
print(myName)
# setup.py:
import setuptools
setuptools.setup(
name="rootFile",
version="0.0.1",
author="jobsofferings",
author_email="youremail@xxx.com",
description="example package",
packages=['example_package','example_package.example_package2'],
)
name是程序包的名称。该名称可以是任何名称,只要仅包含字母、数字、 _ 和 - 。若您想将此程序包上传至pypi.org,请务必使用您的用户名进行更新,因为这样可以确保您不会尝试上传与上传软件包时已经存在的软件包名称相同的软件包。
version是软件包的版本。
author和author_email用于标识软件包的作者,分别用来标明作者名称与邮箱。
description是该软件包的简短描述。
long_description是程序包的详细说明。这在Python软件包索引的软件包详细信息软件包中显示。在这种情况下,通常的模式是从README.md加载详细描述。
long_description_content_type告诉索引用于长描述的标记类型,在此情况下,它是Markdown语言
packages是应该包含在分发软件包中的所有Python导入软件包的列表。无需手动列出每个程序包,我们可以使用find_packages()自动发现所有程序包和子程序包。以上示例我们使用了手动列出的方式。
classifiers为您的软件包提供额外信息。
这时候,我们就可以着手将我们的package打包了
进入管理员环境下的命令行工具中,进入rootFile文件夹位置,可以复制下这个文件地址,cd进入。执行:
Python setup.py install
若命令行中打印出的信息显示无误,则您的package已经打包完成,我们在同一磁盘的其他文件夹中创建一个test.py进行测试
# test.py:
import example_package.example_module as module1
import example_package.example_package2.example_module as module2 module1.module_class.print_hello()
module1.printMyName()
print(module1.myName) module2.module_class.print_hello()
module2.printMyName()
print(module2.myName)
运行test.py
输出:
>>> This is my first module
>>> jobsofferings
>>> jobsofferings
>>> This is my second module
>>> jobsofferings
>>> jobsofferings
则说明您的package已经打包完成,由于通过包管理工具setuptools发布,您可以在您的python安装目录下找到这个打包文件,后缀为.egg,但egg包不一定是扩展名是egg的,其实在linux里面是不区分扩展名的。在理想情况中,egg 是一个使用zip 压缩的文件,类似于java中的jar包,其中包括了所有需要的包文件。
您也可以在rootFile下找到这个egg文件,但事实上将dist文件夹删掉之后,还是可以使用这个package,因为import导入的搜索路径为程序主目录、PYTHONPATH目录、标准链接库目录、.pth文件目录,所以程序会到您的python安装目录下找到这个打包文件。
进入命令行工具中,输入where python可以找到您的python安装路径,进入./Lib/site-packages,在这个文件夹中就可以看到您的打包文件。
谈python3的封装的更多相关文章
- 谈JavaScript代码封装
前言 也算老生常谈的问题了,再深入搞一搞怎么玩儿封装,如果看到这篇文章的你,正好你也是追求完美的代码洁癖狂者,那么这篇文章相信非常适合你. 举一个例子,编写一个Person类,具有name和birth ...
- 浅谈RFID电子标签封装技术
1RFID技术概述 1.1RFID技术概念 RFID是RadioFrequencyIdentification的缩写,即射频识别技术,俗称电子标签.RFID射频识别是一种非接触式的自动识别技术,它通过 ...
- Python3 简单封装 sqlite3 - SimpleToolSql
#coding: utf-8 #Author:boxker #Mail:icjb@foxmail.com import sqlite3 import os class simpleToolSql(): ...
- Python之浅谈多态和封装
目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...
- C#方法封装与重构
C#作为一个完全面向对象的语言,有个特性很重要但是往往会不重视,而不重视的结果就会造成代码杂乱难以解读.维护.这个特性就是封装. 这里不是大谈C#的封装,我只讲一个,关于方法封装的一些问题. ...
- Python3与Python2的差异
基于python3浅谈python3与python2的差异.由于现今主流Python3,但是之前用Python2做的项目,还得维护,所以作为python工作者,不免要了解其中差异,其中,Python2 ...
- 面向对象封装的web服务器
import socket import re import os import sys # 由于前面太繁琐,可以用类封装一下,也可以分几个模块 class HttpServer(object): d ...
- Python3 多线程编程 - 学习笔记
线程 什么是线程 特点 线程与进程的关系 Python3中的多线程 全局解释器锁(GIL) GIL是啥? GIL对Python程序有啥影响? 改善GIL产生的问题 Python3关于多线程的模块 多线 ...
- Memento pattern
21.5 再谈备忘录的封装 备忘录是一个很特殊的对象,只有原发器对它拥有控制的权力,负责人只负责管理,而其他类无法访问到备忘录,因此我们需要对备忘录进行封装. 为了实现对备忘录对象的封装,需要对备忘录 ...
随机推荐
- Arrays.asList() 导致的java.lang.UnsupportedOperationException异常
Arrays.asList() 只支持遍历和取值 不支持增删改 继承至AbstractList内部类
- Springboot Jackson配置根本方案, 日期格式化, 时区设置生效
当项目集成配置的功能越来越多, 说不准哪个配置就影响到了什么. 比如你启用了EnableMvC, 默认配置文件配置的一些文件就失效了. 虽然约定大于配置,让springboot可以极简化构建, 但不熟 ...
- ASP.NET Core Web程序托管到Windows 服务
前言 在 .NET Core 3.1和WorkerServices构建Windows服务 我们也看到了,如何将workerservices构建成服务,那么本篇文章我们再来看看如何将web应用程序托管到 ...
- 手动滑稽之golang-vmware-driver广告篇
本来在Windows 7 + Tiny Linux 4.19 + XFS + Vmware Workstation 15 (PRO) 下篇dockerの奥义之后的UEFI补完延迟了... 虽然用efi ...
- bootstrapValidator JS修改内容无法验证
需求: form表单输入中有坐标,坐标可以输入也可以从地图中获取,验证插件使用的是 bootstrapValidator 问题: 当输入错误的值时会触发验证,有错误提示.当在地图上选择坐标,通过js修 ...
- java: integer number is too large
今天想定义一个类常量,结果如下面那样定义,确报错了.error is: Integer number too large public static final Long STARTTIME = 14 ...
- html+css 知识点总结 day1(01-08)
01 初步认识浏览器 02 浏览器内核 IE 内核:Trident, win10 Edge 内核:EdgeHTML Firefox(火狐浏览器) 内核:Ge ...
- 如何添加.pch文件
1.Create a pch , call name is project+xxx.pch For example: DuoME-PrefixHeader.pch 2.在project——>Bu ...
- 清晰架构(Clean Architecture)的Go微服务: 事物管理
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...
- CF6B President's Office 题解
看到大致思路一致的题解,决定发一篇运用STL不用dfs的题解 好久不发题解,心里不爽 思路: 1.输入的同时找到总统桌子的位置,用vector<pair <int,int> ...