• python实现模块打包发布


    Wheel安装

    pip install wheel

    模块目录结构说明

    setup.py:打包配置文件
    setup.cfg:包含了构建时候的一些默认参数,无可以不添加该文件
    MANIFEST.in:额外需要打包的文件,无可以不添加该文件
    REANME.md:项目说明文档
    LICENSE.txt:项目许可说明文件,无可以不添加该文件

    setup.py参数介绍

    name : 打包起来的包的文件名
    version : 版本号,添加为打包文件的后缀名
    author : 作者
    author_email : 作者的邮箱
    py_modules : 打包的.py文件
    packages: 打包的python文件夹
    include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。
    package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.
    MANIFEST.in文件的语法为: include xxx
    /xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名) license : 支持的开源协议 description : 对项目简短的一个形容 ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。 ext_package : 定义extension的相对路径 requires : 定义依赖哪些模块 provides : 定义可以为哪些模块提供依赖 data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。
    如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中

    1

    [Public.py]
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import os
    import logging
    import traceback
    class Log(object):
        #日志
        path=os.path.abspath('./log')
        if not os.path.isdir(path):
            os.mkdir(path)
        logger = logging.getLogger("mylogging")
        data=datetime.date.today()
        filename=os.path.join(path,str(data)+".log")
    fmt='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s' 
    
        @classmethod     
        def error(cls,message):
            logging.basicConfig(level=logging.ERROR,
    format=cls.fmt,filename=cls.filename,filemode='a+')
            cls.logger.error(message)
    [test.py]
        #!/usr/bin/env python
        #-*- coding:utf-8 -*-
        import sys
        #sys.path.append('../subb')
        #from Public import Log
        from pu.subb.Public import Log
        class Add:
            def __init__(self):
                self.log=Log() 
                
            def add(self,a,b):
                return a+b
            
            def print_error(self,msg):
                self.log.error(msg)
            
        if __name__ == '__main__':  # 用来进行测试   
            add = Add()
            d=add.add(2,3)
            print(d)
            add.print_error('error')

    2.新建setup.py

    #from distutils.core import setup, find_packages
    from setuptools import find_packages
    from setuptools import setup
    setup(
        name='pu',
        version='1.2.0',
        description="option excel",
        author='liboye',               
        url="http://www.csdn.net",     #程序的官网地址
        license="LGPL",                #支持的开源协议
    packages= find_packages(),         #需要处理的包目录
    #packages= ['pu.suba','pu.subb'],
        install_requires = ["openpyxl"],      #安装依赖包
        #scripts=["scripts/test.py"],         #安装时需要执行的脚步列表   
        py_modules=['pu.suba.test', 'pu.subb.Public']     #打包的.py文件
        
        # 此项需要,否则卸载时报windows error,exe安装
        #zip_safe=False 
    )

    3.构建模块

    python setup.py build

    4.模块使用

    python setup.py install   #[安装]
    easy_install -m 包名       #[模块卸载]
    python setup.py --help-commands  #[获取帮助]
    python setup.py sdist             #[为模块创建一个源码包(*.tar.gz)]
    python setup.py bdist_wheel       #[制作python包为wheel文件]
    python setup.py bdist_wininst     #[dist目录生成一个exe文件]
    python setup.py bdist --help-formats  #[查看所有格式的支持]

    5上传pypi

    需要事先有账号密码,注册地址:https://pypi.org/

    有了账号密码在上传的时候输入即可

    twine upload dist/*

  • 相关阅读:
    rpm包方式安装oracle21c
    有限广播地址与直接广播地址
    忽略大小写查看文件夹下重复的文件方法
    No spring.config.import property has been defined 规格严格
    application.properties 转 yaml ( 在线) 规格严格
    PG快速构建海量数据方法 规格严格
    Postgresql 查看建表语句 命令 规格严格
    一文读懂PostgreSQL数据库透明数据加密 规格严格
    PG锁监控 规格严格
    Spring Cloud Config Client 规格严格
  • 原文地址:https://www.cnblogs.com/boye169/p/14815448.html
Copyright © 2020-2023  润新知