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/*

原文地址:https://www.cnblogs.com/boye169/p/14815448.html