Python-Packages
我们根据一些逻辑,创建一些文件夹、子文件夹来存放相应文件,从而我们能够更方便地管理文件。 同样的,python中的包(packages)也采取了模块化的逻辑结构。
- 模块(module):实际上就是我们所写的每一个.py文件,其中能够包含多个对象,如类、函数等。
- 包(package):包含多个相关模块的文件夹。
现在让我们来创建一个自己的包。
- 创建一个文件夹,命名为“MyApp”,我将其放在了桌面上,路径为
C:\Users\自己的用户名\Desktop 。 - 在MyApp文件夹里创建一个子文件夹,名为‘mypackage’。
- 在mypackage文件夹中创建一个空
__init__.py 文件。 - 再在mypackage下创建
greet.py 与functions.py 两个模块。并分别粘入下列代码:
def SayHello(name):
print("Hello ", name)
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包名之后就可以直接调用这些函数。 例如:
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文件中批量导入我们所需要的模块,而不再需要一个一个的导入。 如:
import re
import urllib
import sys
import os
import package
print(package.re, package.urllib, package.sys, package.os)
全局安装一个包
一旦创建了包,就可以通过运行安装脚本将其安装为系统范围使用。脚本从setuptools模块调用setup()函数。
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)
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过。
总而言之
|