IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python-Packages——如何创建一个自己的包? -> 正文阅读

[Python知识库]Python-Packages——如何创建一个自己的包?

Python-Packages

我们根据一些逻辑,创建一些文件夹、子文件夹来存放相应文件,从而我们能够更方便地管理文件。
同样的,python中的包(packages)也采取了模块化的逻辑结构。

  • 模块(module):实际上就是我们所写的每一个.py文件,其中能够包含多个对象,如类、函数等。
  • 包(package):包含多个相关模块的文件夹。

现在让我们来创建一个自己的包。

  • 创建一个文件夹,命名为“MyApp”,我将其放在了桌面上,路径为C:\Users\自己的用户名\Desktop
  • 在MyApp文件夹里创建一个子文件夹,名为‘mypackage’。
  • 在mypackage文件夹中创建一个空__init__.py文件。
  • 再在mypackage下创建greet.pyfunctions.py两个模块。并分别粘入下列代码:
#greet.py
def SayHello(name):
    print("Hello ", name)
#functions.py
def sum(x,y):
    return x+y

def average(x,y):
    return (x+y)/2

def power(x,y):
    return x**y

至此,我们就创建了一个叫做mypackage的包,结构如下:

在这里插入图片描述


从包中导入模块

  • 在MyApp中打开终端命令行,并且运行python
    在这里插入图片描述

C:\Users\用户名\Desktop\MyApp> python

  • 从mypackage包中导入functions模块,并运行它的power()函数。

>>> from mypackage import functions
>>> functions.power(2,10)
1024

  • 也可以从包里的模块中导入相应函数

>>> from mypackage.functions import sum
>>> sum(3,6)
9
>>> average(12,34)
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘average’ is not defined


__init__.py是一个包中的特殊文件,它存储着包的内容,并且有两个目的:

  • 当一个文件夹中包含__init__.py文件时,python的解释器会将其认作包。
  • __init__.py描述了从模块导入的特定资源。

通常__init__.py文件是空的。然而它可以被用来选择模块中特定的函数,从而在import包名之后就可以直接调用这些函数
例如:

# __init__.py
from .functions import average, power
from .greet import SayHello

__init__.py文件中加入如上代码后,就可以直接从包import相应函数了,相当于越过了包中模块的这一层逻辑结构。

>>> from mypackage import average, power, SayHello
>>> SayHello(‘World’)
>>> Hello World

Python中_init_.py是package的标志。init.py 文件的一个主要作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。在python中导入一个包时,实际上是导入了它的__init__.py文件,这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
如:

# package
# __init__.py
import re
import urllib
import sys
import os
# a.py
import package
print(package.re, package.urllib, package.sys, package.os)


全局安装一个包

一旦创建了包,就可以通过运行安装脚本将其安装为系统范围使用。脚本从setuptools模块调用setup()函数。

# setup.py
from setuptools import setup
setup(name='mypackage',
version='0.1',
description='Testing installation of Package',
url='#',
author='auth',
author_email='author@email.com',
license='MIT',
packages=['mypackage'],
zip_safe=False)
  • 在包的父文件夹"MyApp"中创建一个setup.py的文件,粘贴上述代码与此文件中。
    这个脚本文件从setuptools模块调用setup()函数,设置相关参数。

  • 在命令行的父文件夹路径中使用

python setup.py build

这时父文件夹MyApp中出现了build文件夹。
再在命令行输入

python setup.py sdist

这时MyApp文件夹中出现了dist文件夹。
其中可以安装和发布的压缩文件在dist文件夹中。

  • 现在使用 pip 工具来安装 mypackage 。
    确保命令行路径在包的父文件夹中。

pip install C:\xxx\MyApp\dist\mypackage-0.1.tar.gz

至此便安装成功。


总结

若想使用某包某函数,首先要了解这个包的逻辑结构。若想直接调用某函数,则需要直接import过这个函数,或者包中的__init__.py的文件已经帮你将相应函数import过。

总而言之

  • __init__.py中的代码用来越过逻辑结构层级。

  • 只需要根据逻辑结构,分层级地from A import B即可使用B( )
    import A.B,则不可使用B( ),只能使用A.B( )

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:24:12  更:2022-04-24 09:25:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:21:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码