zoukankan      html  css  js  c++  java
  • Python中模块的发布与安装

    模块(Module)

       Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块。通俗的来说,模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。

    导入模块

    •    import: 引入具体模块,可以一次性引入多个模块,使用逗号隔开即可

                eg:import modlue1,module2,module3,.....moduleN ,   使用模块中的函数时,格式为:moduleName.funName()

    •  from ... import ... : 从模块中导入一个指定的部分到当前命名空间

             eg: from modduleName import name1 [,name2 [,name3 [,....nameN]]]

    •     from ... import * : 把一个模块的所有内容全都导入到当前的命名空间

            eg: from moduleName import *

    包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。

    一个包可以包含多个模块。

    假定我们的包的例子有如下的目录结构:

    Phone/
        __init__.py
        common_util.py
        Voicedta/
            __init__.py
            Pots.py
            Isdn.py
        Fax/
            __init__.py
            G3.py
        Mobile/
            __init__.py
            Analog.py
            igital.py
        Pager/
            __init__.py
            Numeric.py
    

    Phone 是最顶层的包,Voicedta 等是它的子包。 我们可以这样导入子包:

    import Phone.Mobile.Analog
    Phone.Mobile.Analog.dial()
    

    你也可使用 from-import 实现不同需求的导入

    模块制作

    首先定义函数方法文件,文件里面定义了多个函数方法可提供给外界使用。

    moudle里一般都会有一个__init__.py文件。有的__init__.py中是空白,有的却会有__all__参数。

    如果其他页面import 的时候如果__init__.py是空白的,可以直接import到moudle的所有函数。而如果__init__.py中定义了__all__,则import 的时候只会导入__all__部分定义的内容。

    模块发布

    •   模块的目录结构体:
    ├── setup.py
    ├── suba
    │   ├── aa.py
    │   ├── bb.py
    │   └── __init__.py
    └── subb
        ├── cc.py
        ├── dd.py
        └── __init__.py

            模块的目录结构中包含一个setup.py文件,用于定义模块名称、包含的模块等模块信息。

    •  setup.py中的内容:
    from distutils.core import setup
    
    setup(name="模块名称", version="版本", description="模块描述", author="模块作者", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'(此处主要是包含的模块内容)])
    • 构建模块
        Linux命令(当前位置位于模块文件夹):
    python setup.py build
    构建后目录结构
    .
    ├── build
    │   └── lib.linux-i686-2.7
    │       ├── suba
    │       │   ├── aa.py
    │       │   ├── bb.py
    │       │   └── __init__.py
    │       └── subb
    │           ├── cc.py
    │           ├── dd.py
    │           └── __init__.py
    ├── setup.py
    ├── suba
    │   ├── aa.py
    │   ├── bb.py
    │   └── __init__.py
    └── subb
        ├── cc.py
        ├── dd.py
        └── __init__.py
    • 生成发布压缩包
    Linux命令(当前位置位于模块文件夹):
          python setup.py sdist
    
    打包后,生成最终发布压缩包 moduleName-version.tar.gz , 目录结构
    .
    ├── build
    │   └── lib.linux-i686-2.7
    │       ├── suba
    │       │   ├── aa.py
    │       │   ├── bb.py
    │       │   └── __init__.py
    │       └── subb
    │           ├── cc.py
    │           ├── dd.py
    │           └── __init__.py
    ├── dist
    │   └── xwp-1.0.tar.gz
    ├── MANIFEST
    ├── setup.py
    ├── suba
    │   ├── aa.py
    │   ├── bb.py
    │   └── __init__.py
    └── subb
        ├── cc.py
        ├── dd.py
        └── __init__.py

    模块安装

    • 找到模块的压缩包
    • 解压
    • 进入文件夹
    • 执行命令sudo python setup.py install

    此时,该模块已经安装到系统中,可以直接使用import关键字进行导入模块。

    ps:如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径

  • 相关阅读:
    【Maven】构建子项目命令Maven clean/install modules
    【DB】Oracle批量导入CSV数据
    【DB】索引与性能
    【Postfix】邮件转存
    【Mybatis】Oracle Sequence序列的失序问题
    【Java】java.sql.SQLRecoverableException 解释
    【I/O】NAS 性能测试
    【Java】JVM线程状态查询
    【Oracle】记录一次数据库连接池性能瓶颈问题
    【JavaMail】
  • 原文地址:https://www.cnblogs.com/bywallance/p/6886519.html
Copyright © 2011-2022 走看看