这章给大家介绍,如何封装一个简单的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. mysql中emoji表情存储

    mysql中emoji表情存储 背景 在mysql 5.7.19,创建的数据库默认选择的编码是utf8 -- UTF-8 Unicode,因此字段默认的编码为utf-8,但在项目开发中存在一个需求:在 ...

  2. python打印图形

    i = 0 while i < 5: # print('*****') 效果与下行相同 print('*'*5) i+=1 print('\n\n') i = 1 while i < 6: ...

  3. A*算法知识讲解

  4. Fibnoccia 数列简单题

    In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, ...

  5. Java 添加、修改、读取、复制、删除Excel批注

    本文介绍通过Java程序来操作Excel批注的方法.操作内容包括批注添加(添加批注文本.背景色.字体.自适应等).修改.读取(文本.图片).复制.删除等. 工具:Free Spire.XLS for ...

  6. .net core webapi搭建(2)跨域

    Core WebAPI中的跨域处理 在使用WebAPI项目的时候基本上都会用到跨域处理 Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 如图所示 修改 Configure ...

  7. NIO&AIO编程模型

    NIO线程模型 什么是NIO线程模型? 上图是NIO的线程模型,  基于select实现,   这种线程模型的特点:  多条channel通过一个选择器和单挑线程绑定, 并且在这种编程模型中, Cha ...

  8. Python赋值没有返回值+笔试

    >>> def test(): i = 1 return i=2 SyntaxError: invalid syntax 原因是python 中赋值语句没有返回值,这里不是C++

  9. Docker安装之路

    从3月初到现在,一直在安装docker 的路上越走越远,大概就在1个小时前,我终于成功了,那一刻,我觉得我拥有了整个世界,于是乎,拥有了整个世界的我决定草率的并粗略的记录一下安装过程中遇到的我能记住的 ...

  10. [转]在C#中调用C语言函数(静态调用Native DLL,Windows & Microsoft.Net平台)

    原文:https://blog.csdn.net/yapingxin/article/details/7288325 对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P ...