这章给大家介绍,如何封装一个简单的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的封装的更多相关文章

  1. 谈JavaScript代码封装

    前言 也算老生常谈的问题了,再深入搞一搞怎么玩儿封装,如果看到这篇文章的你,正好你也是追求完美的代码洁癖狂者,那么这篇文章相信非常适合你. 举一个例子,编写一个Person类,具有name和birth ...

  2. 浅谈RFID电子标签封装技术

    1RFID技术概述 1.1RFID技术概念 RFID是RadioFrequencyIdentification的缩写,即射频识别技术,俗称电子标签.RFID射频识别是一种非接触式的自动识别技术,它通过 ...

  3. Python3 简单封装 sqlite3 - SimpleToolSql

    #coding: utf-8 #Author:boxker #Mail:icjb@foxmail.com import sqlite3 import os class simpleToolSql(): ...

  4. Python之浅谈多态和封装

    目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...

  5. C#方法封装与重构

    C#作为一个完全面向对象的语言,有个特性很重要但是往往会不重视,而不重视的结果就会造成代码杂乱难以解读.维护.这个特性就是封装.      这里不是大谈C#的封装,我只讲一个,关于方法封装的一些问题. ...

  6. Python3与Python2的差异

    基于python3浅谈python3与python2的差异.由于现今主流Python3,但是之前用Python2做的项目,还得维护,所以作为python工作者,不免要了解其中差异,其中,Python2 ...

  7. 面向对象封装的web服务器

    import socket import re import os import sys # 由于前面太繁琐,可以用类封装一下,也可以分几个模块 class HttpServer(object): d ...

  8. Python3 多线程编程 - 学习笔记

    线程 什么是线程 特点 线程与进程的关系 Python3中的多线程 全局解释器锁(GIL) GIL是啥? GIL对Python程序有啥影响? 改善GIL产生的问题 Python3关于多线程的模块 多线 ...

  9. Memento pattern

    21.5 再谈备忘录的封装 备忘录是一个很特殊的对象,只有原发器对它拥有控制的权力,负责人只负责管理,而其他类无法访问到备忘录,因此我们需要对备忘录进行封装. 为了实现对备忘录对象的封装,需要对备忘录 ...

随机推荐

  1. 【一起学源码-微服务】Ribbon源码五:Ribbon源码解读汇总篇~

    前言 想说的话 [一起学源码-微服务-Ribbon]专栏到这里就已经全部结束了,共更新四篇文章. Ribbon比较小巧,这里是直接 读的spring cloud 内嵌封装的版本,里面的各种config ...

  2. 在nginx服务器里面搭建好node.js本地服务器后,利用Node.js的FS模块,实现简单数据的写入和读取

    先在server.js里面引入: var fs = require('fs');   然后写入  // 往writeme.txt文件 写入一些内容     fs.writeFile('./writem ...

  3. VMware 完成 27 亿美元的 Pivotal 收购 | 云原生生态周报 Vol. 34

    作者 | 汪萌海.王思宇.李鹏 业界要闻 VMware 完成 27 亿美元的 Pivotal 收购 VMware 在 12 月 30 日宣布,已完成 27 亿美元的 Pivotal 收购,同一天 Pi ...

  4. Linux下Docker的安装与使用

    yum安装Docker最新版和docker-compose(超级简单的安装方法) Install Docker 首先安装依赖 yum install -y yum-utils device-mappe ...

  5. JVM之堆的体系结构

    一.堆的体系结构 Heap 堆一个JVM 实例只存在一个堆内存,堆内存的大小是可以调节的.类加载器读取了类字节码文件后,需要把类.方法.常量.变最放到堆内存中,保存所有引用类型的真实信息,以便执行器执 ...

  6. 原生js里的offset、client、scroll三大家族

    offset家族 自己的,用于获取元素自身尺寸 offsetWidth 和 offsetHeight 获取元素自身的宽度和高度,包括内容+边框+内边距 offsetLeft 和 offsetTop 距 ...

  7. 三分钟网络基础-ARP协议

    什么是 ARP 协议 地址解析协议 ARP (Address Resolution Protocal):在同一局域网下,根据已知道的主机或路由器的 IP 地址,找出其相应的硬件地址. 高速缓存 每一个 ...

  8. 在Navicat新建Oracle表及用户

    1. 打开Navicat,链接Oracle, 连接成功. 2. Ctrl+Q,进入查询,创建表空间. 输入create tablespace test datafile 'D:\Oracle\test ...

  9. qt中的拖拽及其使用技巧

    关于qt中的拖放操作,首先可以看这篇官方文档:http://doc.qt.io/qt-5.5/dnd.html 一.QDrag 首先是创建QDrag,可以在mousePressEvent或者mouse ...

  10. python,finally的应用

    脚本执行过程中可能因为被测试的环境有改变导致中间某一部分无法继续执行下去 可以在最后一行加上finally来执行最后一句脚本 比如 最后执行退出 表示 无论中间过程失败还是成功,最终都会执行退出操作 ...