发布自己的Python模块到Pypi官方仓库

背景: 以往使用idea/pycharm的时候,会在网上找一个激活码激活,后面发现一个idea的激活码可以激活整个全家桶. 但是激活之后实效性并不是很好,很快就会过期,过期又要找新的。 于是就在想能不能在命令行执行一行代码直接拿到最新的激活码用? 想到这里就想起来python可以通过一行代码在本地打开一个http服务, python -m http.server 80 . 只需要这一行命令就可以让局域网访问到本地资源。 那获取idea激活码是不是也可以用这种方式做?

image.jpeg

1、安装Python、pip工具

Mac自带python2, 但是有些机器没有安装pip, 所以需要先安装pip: brew install pip 即可~
windows可以在python官网下载安装包安装.


2、Python -m 是什么?

之前一直不太明白python -m 究竟是什么意思, 在网上查了也只是说把一个包当作模块运行, 究竟运行的是什么,如何运行也不是太理解. 刚好借这次机会窥探一下http.server究竟是怎么运行的

image.jpeg

找到了python内置的http包, 打开server.py之后可以看到这里有一个main函数,但理论上一般这种模块是不能留主函数在包里面的, 看到这里我好像突然明白了什么 main函数 -m
这里盲猜-m 代表的就是执行这个模块的main函数.


3、开始分析如何获取激活码, 使用python实现自动化获取

image.jpeg

之前一直用这个网站获取最新的激活码, 但是需要下载一个zip解压, 解压之后才能打开里面的文件看到激活码, 非常麻烦. 不过好在这个网站很稳定.
找到下载链接了,理论上只要用python每次下载最新的zip包之后自动解压,然后把文件内容输出激活码, 最后用-m的方式就可以一行命令获取到激活码了.

image.jpeg

咔咔咔一顿写,总算是通了. 现在需要将这个包放到pypi仓库,这样就可以随时随地获取到最新的激活码了.


4、上传代码到pypi的测试库

前提准备:

1、首先代码的根目录需要存在 LICENSE / README.md / setup.py 这三个文件

LICENSE 文件

Copyright (c) 2018 The Python Packaging Authority Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.

setup.py 文件, 具体参数可以参考: https://www.cnblogs.com/potato-chip/p/9106225.html

import setuptools
setuptools.setup(
    name="puffidea",
    version="0.0.3",
    author="puff",
    author_email="[email protected]",
    description="获取Jetbrains激活码",
    install_requires=['requests'],
    long_description=open("README.md", 'r').read(),
    long_description_content_type="text/markdown",
    url="[https://github.com/PeterPuffer/puffidea](https://github.com/PeterPuffer/puffidea)",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 2",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

从setup.py里面可以看到这里需要填github地址, 所以我们的模块可以先上传到GitHub上.

2、安装官方推送模块的工具 twine, 可以使用 pip install twine 安装

3、注册pypi测试仓库 / 正式仓库的账号

测试仓库注册地址: https://test.pypi.org/

正式仓库注册地址: https://pypi.org/

image.jpeg

注册完成后进行邮箱验证, 这样就可以将自己的模块推送到pypi仓库了~

4、测试仓库上传代码,进行模块测试

首先通过命令行进入项目根目录进行一次编译, 命令为: python setup.py sdist bdist_wheel


image.jpeg

编译完成后可以看到项目目录下逗了3个文件夹,而我们要上传的模块就在dict文件夹下面。

编译完成后, 就可以使用twine上传编译之后的包了, 具体命令: twine upload --repository-url https://test.pypi.org/legacy/ dist/*
因为上传的是测试仓库, 所以要指定测试仓库的地址. 之后是dist目录下的产物.

image.jpeg

模块安装成功之后可以实验一下是否好用
按照之前说的, -m执行


image.jpeg

妥了!!

5、将最终代码上传到pypi正是仓库

上传到正式仓库和上传到测试库的操作类似, 也是先将模块编译,之后上传dist目录下的文件, 只不过是上传的命令有所不同.
编译后上传的命令: twine upload dist/*



上传成功后, 就可以在pypi的官方仓库搜到自己的模块啦~

image.jpeg

赶紧卸载之前测试仓库的包,用正式仓库试试


image.jpeg

嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎!!

你可能感兴趣的:(发布自己的Python模块到Pypi官方仓库)