手把手教你开展mofish库(摸鱼库)的打包发布

Python进阶者
• 阅读 1732

大家好,我是我是皮皮。

一、前言

前几天吴老板给我推荐了一个摸鱼库,竟然是Python库,给我惊了一下,感觉应缺斯汀。

手把手教你开展mofish库(摸鱼库)的打包发布

要知道之前他就已经写了一篇关于摸鱼的文章,感兴趣的小伙伴,可以前往:手把手教你使用Python打造一款摸鱼倒计界面。

如今他把这个摸鱼做成了一个Python库,关于这个库的使用之前已经发布了文章,可以前往:盘点一个名为摸鱼的Python库,一起来摸鱼吧!

在评论区看到了【有点意思】大佬的留言,如下图所示:

手把手教你开展mofish库(摸鱼库)的打包发布

大概意思是把自己写的代码,封装成Python库,人人都可用那种,这里给安排上,这篇文章就是讲如何打包发布的,一起来看看吧!

二、代码

首先准备好代码,这个代码,之前的文章就已经分享了,这里不再赘述,代码在这里了。

# -*- coding: utf-8 -*-
import datetime

import click
from zhdate import ZhDate as lunar_date

def get_week_day(date):
    week_day_dict = {
        0: '星期一',
        1: '星期二',
        2: '星期三',
        3: '星期四',
        4: '星期五',
        5: '星期六',
        6: '星期天',
    }
    day = date.weekday()
    return week_day_dict[day]

def time_parse(today):
    distance_big_year = (lunar_date(today.year, 1, 1).to_datetime().date() - today).days
    distance_big_year = distance_big_year if distance_big_year > 0 else (
            lunar_date(today.year + 1, 1, 1).to_datetime().date() - today).days

    distance_5_5 = (lunar_date(today.year, 5, 5).to_datetime().date() - today).days
    distance_5_5 = distance_5_5 if distance_5_5 > 0 else (
            lunar_date(today.year + 1, 5, 5).to_datetime().date() - today).days

    distance_8_15 = (lunar_date(today.year, 8, 15).to_datetime().date() - today).days
    distance_8_15 = distance_8_15 if distance_8_15 > 0 else (
            lunar_date(today.year + 1, 8, 15).to_datetime().date() - today).days

    distance_year = (datetime.datetime.strptime(f"{today.year}-01-01", "%Y-%m-%d").date() - today).days
    distance_year = distance_year if distance_year > 0 else (
            datetime.datetime.strptime(f"{today.year + 1}-01-01", "%Y-%m-%d").date() - today).days

    distance_4_5 = (datetime.datetime.strptime(f"{today.year}-04-05", "%Y-%m-%d").date() - today).days
    distance_4_5 = distance_4_5 if distance_4_5 > 0 else (
            datetime.datetime.strptime(f"{today.year + 1}-04-05", "%Y-%m-%d").date() - today).days

    distance_5_1 = (datetime.datetime.strptime(f"{today.year}-05-01", "%Y-%m-%d").date() - today).days
    distance_5_1 = distance_5_1 if distance_5_1 > 0 else (
            datetime.datetime.strptime(f"{today.year + 1}-05-01", "%Y-%m-%d").date() - today).days

    distance_10_1 = (datetime.datetime.strptime(f"{today.year}-10-01", "%Y-%m-%d").date() - today).days
    distance_10_1 = distance_10_1 if distance_10_1 > 0 else (
            datetime.datetime.strptime(f"{today.year + 1}-10-01", "%Y-%m-%d").date() - today).days

    time_ = [
        {"v_": 5 - 1 - today.weekday(), "title": "周末"},  # 距离周末
        {"v_": distance_year, "title": "元旦"},  # 距离元旦
        {"v_": distance_big_year, "title": "过年"},  # 距离过年
        {"v_": distance_4_5, "title": "清明节"},  # 距离清明
        {"v_": distance_5_1, "title": "劳动节"},  # 距离劳动
        {"v_": distance_5_5, "title": "端午节"},  # 距离端午
        {"v_": distance_8_15, "title": "中秋节"},  # 距离中秋
        {"v_": distance_10_1, "title": "国庆节"},  # 距离国庆
    ]

    time_ = sorted(time_, key=lambda x: x['v_'], reverse=False)
    return time_

@click.command()
def cli():
    """你好,摸鱼人,工作再累,一定不要忘记摸鱼哦 !"""
    from colorama import init, Fore
    init(autoreset=True)  # 初始化,并且设置颜色设置自动恢复
    print()
    today = datetime.date.today()
    now_ = f"{today.year}年{today.month}月{today.day}日"
    week_day_ = get_week_day(today)
    print(f'\t\t {Fore.GREEN}{now_} {week_day_}')
    str_ = '''
    你好,摸鱼人,工作再累,一定不要忘记摸鱼哦 ! 
    有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着。
    多喝点水,钱是老板的,但命是自己的 !
    '''
    print(f'{Fore.RED}{str_}')

    time_ = time_parse(today)
    for t_ in time_:
        print(f'\t\t {Fore.RED}距离{t_.get("title")}还有: {t_.get("v_")}天')
    tips_ = '''
    [友情提示] 三甲医院 ICU 躺一天平均费用大概一万块。
    你晚一天进 ICU,就等于为你的家庭多赚一万块。少上班,多摸鱼。\n
    '''
    print(f'{Fore.RED}{tips_}')
    print(f'\t\t\t\t\t\t\t{Fore.YELLOW} 摸鱼办')

if __name__ == '__main__':
    cli()

click 库的使用

注意到我们上面的文件代码用到了 click 库。

Python 内置了一个 Argparse 的标准库用于创建命令行, 但使用起来有些繁琐,Click 相比于 Argparse 可谓是小巫见大巫了。

安装

pip install click

click 的简单使用

官方文档的入门例子:

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name', help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()
  • @click.command() 使函数 hello 成为命令行接口。
  • @click.option 的第一个参数指定了命令行选项的名称。
  • click.echo 方法和 python 内置的 print 方法相似。

使用方法:

打印 10 个 皮老板。

$ python hello.py --count 10 --name 皮老板    # 指定 count 和 name 的值
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!
Hello 皮老板!

setuptool 打包发布

安装依赖

pip install setuptools
pip install twine

打包上传

python setup.py sdist
twine upload dist/*

登录 pypi 账户并发布 python 库

setup.py 示例

from setuptools import setup, find_packages

description = '你好,摸鱼人,工作再累,一定不要忘记摸鱼哦! 有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着。多喝点水,钱是老板的,但命是自己的!'

setup(
    name='mofish', # 库名
    version='1.0.0', # 版本号
    description=description, # 短简介
    long_description_content_type='text/markdown', 
    classifiers=[
        'Development Status :: 4 - Beta',
        'Environment :: Console',
        'Intended Audience :: Developers',
        'Intended Audience :: Information Technology',
        'Intended Audience :: System Administrators',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3 :: Only',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
        'Topic :: Internet',
        'Topic :: Software Development :: Libraries :: Python Modules',
        'Topic :: System :: Clustering',
        'Topic :: System :: Distributed Computing',
        'Topic :: System :: Monitoring',
        'Topic :: System :: Systems Administration',
    ],
    python_requires='>=3.7', # py 版本限制
    author='PY-GZKY', # 作者
    author_email='341796767@qq.com', # 邮件
    url='https://github.com/PY-GZKY/Mofish', # git
    license='MIT', # 开源协议
    packages=find_packages(), # 包
    include_package_data=True,
    entry_points="""
        [console_scripts]
        moyu=src.main:cli
    """, # 启动命令行脚本的文件
    install_requires=[
        'click>=6.7',
        'zhdate'
    ], # 限制安装库的版本

)

安装并使用

pip install mofish
moyu

代码仓库地址:

https://github.com/PY-GZKY/Mofish

手把手教你开展mofish库(摸鱼库)的打包发布

总结

大家好,我是皮皮。这篇文章主要是给大家盘点了一个Python库,基于这个库,本文介绍了如何把自己写的代码封装成Python库,打包上传,并且发布到pypi,到后面人人都可以用你的库。

最后感谢【吴老板】大佬给予的思路和代码支持,感谢【有点意思】大佬提的需求。

[友情提示] 三甲医院 ICU 躺一天平均费用大概一万块。你晚一天进 ICU,就等于为你的家庭多赚一万块。少上班,多摸鱼。

手把手教你开展mofish库(摸鱼库)的打包发布

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
2年前
盘点一个名为摸鱼的Python库,一起来摸鱼吧!
大家好,我是我是皮皮。一、前言前几天吴老板给我推荐了一个摸鱼库,竟然是Python库,给我惊了一下,感觉应缺斯汀。要知道之前他就已经写了一篇关于摸鱼的文章,感兴趣的小伙伴,可以前往:如今他把这个摸鱼做成了一个Python库,这里分享给大家,确实挺有趣的,每日没事出来摸摸鱼,也好!二、使用方法首先就是安装摸鱼库了,很简单,直接在命令行中输入安装指令:pip
Python进阶者 Python进阶者
2年前
selenium如何添加代理IP?
大家好,我是皮皮。一、前言前几天在Python钻石群有个叫【进击的python】的粉丝问了一个关于Python中selenium如何添加代理IP的问题,这里拿出来给大家分享下,一起学习。二、解决过程这里给出【PI】吴老板大佬的解答,一起来看看吧!直接上图了,如下图所示:他写这个已经是3年前的时候。当年还是个实习生呢,现在是吴老板了。三、总结大家好,我是
Python进阶者 Python进阶者
2年前
手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
大家好,我是Python进阶者。前言前几天雪球兄在Python交流群里分享了一个获取B站视频选集的Python代码,小编觉得非常奈斯,这里整理成一篇小文章,分享给大家学习。关于雪球兄,大家应该都熟悉了,之前他写过Python实战文章,好评如潮,没来得及看的小伙伴,可以戳这里了:之前也有给大家分享B站的一些文章,感兴趣的话可以看看这个文章,Python网络爬
Python进阶者 Python进阶者
2年前
手把手教你使用Python打造一款摸鱼倒计界面
大家好,我是吴老板。前言前段时间在微博看到一段摸鱼人的倒计时模板,感觉还挺有趣的。于是我用了一小时的时间写了个页面出来摸鱼办地址(当然是摸鱼的时间啦)。模板是这样的:摸鱼办公室🐟你好,摸鱼人,工作再累,一定不要忘记摸鱼哦!有事没事起身去茶水间去廊道去天台走走,别老在工位上坐着。多喝点水,钱是老板的,但命是自己的!🐟距离周末放假还有
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Python进阶者 Python进阶者
1个月前
盘点3种Python网络爬虫过程中的中文乱码的处理方法
大家好,我是Python进阶者。前几天给大家分享了一些乱码问题的文章,感兴趣的小伙伴可以前往:,这里再次给大家祭出网络爬虫过程中三种中文乱码的处理方案,希望对大家的学习有所帮助。前言前几天有个粉丝在Python交流群里问了一道关于使用Python网络爬虫过
Python进阶者 Python进阶者
9个月前
盘点一个通过python大批量插入数据到数据库的方法
大家好,我是皮皮。一、前言前几天在Python白银群【鶏啊鶏】问了一个Python数据存入数据库的问题,一起来看看吧。各位大佬我想请教下通过python大批量插入数据到数据库的方法目前我在用的操作是以下这个模式:sql''foriinlist:sql"in
Python进阶者 Python进阶者
9个月前
使用Python统计下桌面某个文件夹下(含多层子文件夹)具体文件的数量(方法二)
大家好,我是皮皮。一、前言前几天在Python最强王者群【东哥】问了一个Python自动化办公的问题,一起来看看吧。这个是他自己在实际工作中遇到的需求,正好遇到了这个问题,想着用Python来实现下。二、实现过程上一篇文章中已经分享了一个方法,这一篇文章继
Python进阶者 Python进阶者
9个月前
使用Python统计下桌面某个文件夹下(含多层子文件夹)具体文件的数量(方法三)
大家好,我是皮皮。一、前言前几天在Python最强王者群【东哥】问了一个Python自动化办公的问题,一起来看看吧。这个是他自己在实际工作中遇到的需求,正好遇到了这个问题,想着用Python来实现下。二、实现过程上一篇文章中已经分享了一个方法,这一篇文章继
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这