打包自己写的python库(Betubedl)并且发布到pypi上

来源:互联网 发布:秦丝生意通 mac os 编辑:程序博客网 时间:2024/05/17 22:57

前言

笔者和媳妇在上Professor Lim的ML课的时候,他给我媳妇一个topic,研究BCI方向的,毕业论文研究通过BCI建立AD患者的脑电模型,并且最终能够分析和预测一个人是否有可能患上AD,可能性有多少。媳妇在Youtube上找到了BCI的教程,正好那几天要回国,准备在国内学习一部分,但是国内又上不去Youtube。我知道肯定有很多翻墙软件能够使用,也知道通过一个别人做的下载器的方式能够下载视频,但是为了表现我是程序员,大言不惭地说:“我自己写个python库给你下载,还方便”,于是我自己就写了一个python库。
简单的介绍一下我写的Betubedl库,具体的我会重新写一篇博客。Betudedl库是一个轻量级的python库,没有第三方依赖,目的在于从youtube上下载你想要的视频或者电影之类的。源码参考pytube库的架构和思想。现在可以通过pip install Betubedl 下载安装到本地运行库中使用。
废话说了一堆,这篇博客记录的是我将本地调试好的python代码发布到pypi平台上的一切步骤。

一、 了解pip和pypi

作为python开发者,要不知道pip这个包管理工具,那可就要炸了。pip 是一个现代的,通用的 Python 包管理工具。提供了对Python 包的查找、下载、安装、卸载的功能。
而PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库。所以这两者在我看来,就是父子关系。PyPI带领着pip这个包管理器为python的开源资源库夜以继日地忙碌着。
pip的安装去这里按照步骤就可以完成:https://pip.pypa.io/en/stable/installing/

二、python代码打包到发布步骤

  1. 编写完代码后,需要检查项目目录结构,推荐将项目目录做成这样:
    项目目录结构
    将所有的项目代码全部放进一个文件夹中,文件名为你想要提交给pypi的库名字;创建LICENSEREADME.rstsetup.py的空文件,除此之外,你还可以创建requirements.txttest-requirements.txt文件。本项目没有第三方依赖包。由于项目很小,自动化测试也没有做,后续会补上,所以自动化测试的测试依赖包也不需要。
    PS:其实对于一个库,如果你要长久维护,自动测试肯定要加入。所以建议小伙伴们都去学会写自动化测试脚本。
  2. 代码打包工作主要依赖python的一个叫setuptools的包来完成,在进行下面操作前请使用pip安装它:

    pip install setuptools

  3. 然后就是到pypi(https://pypi.python.org/pypi)上注册自己的用户, 点击“Register”,填写自己的用户名,密码,邮件地址后,进入邮箱验证。这样就成功了。
    PS:记住自己的用户名和密码,后面上传的时候要输入的。

  4. 准备setup.py文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性等等,下面是我自己包的一个setup.py文件的内容,基本上只需要在这个上面修改就行了,具体如下:
from __future__ import print_functionfrom setuptools import setup, find_packagesimport syssetup(    name="Betubedl",    version="0.2.0",    author="Rick",    author_email="loveweihaitong@foxmail.com",    description="A Python library for downloading YouTube videos.",    long_description=open("README.rst").read(),    license="MIT",    url="https://github.com/WEIHAITONG1/better-youtubedl",    packages=['Betubedl'],    classifiers=[        "Environment :: Web Environment",        'Intended Audience :: Developers',        'License :: OSI Approved :: MIT License',        'Natural Language :: Chinese',        'Operating System :: MacOS',        'Operating System :: Microsoft',        'Operating System :: POSIX',        'Operating System :: Unix',        'Topic :: Multimedia :: Video',        "Topic :: Internet",        "Topic :: Software Development :: Libraries :: Python Modules",        'Programming Language :: Python :: 2.6',        'Programming Language :: Python :: 2.7',        'Programming Language :: Python :: 3.3',        'Programming Language :: Python :: 3.4',        'Programming Language :: Python :: 3.5',        'Programming Language :: Python :: 3.6',    ],    zip_safe=True,)

上面的这些字段需要注意的是:
a) version - 这个简单,就是包的发布的版本,可以直接写在这,也可以 从其他地方引用过来。
b) long_description - 必须是rst(reStructuredText )格式的,因为这 个里面的内容是显示在pypi包首页上,具体rst的语法可以参考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html;
我的long_description是同目录下的README.rst的内容,
同时这个README也是我的github项目首页。
c) packages - 申明你的包里面要包含的目录,比如 ['mypackage', 'mypackage_test'] 可以是这种使用我的示例,让setuptools自动决定要包含哪些包
d) install_requires - 申明依赖包,安装包时pip会自动安装。格式如下(我上面的setup.py没有这个参数,因为我不依赖第三方包):

install_requires=[        'Twisted>=13.1.0',        'w3lib>=1.17.0',        'queuelib',        'lxml',        'pyOpenSSL',        'cssselect>=0.9',        'six>=1.5.2',        'parsel>=1.1',        'PyDispatcher>=2.0.5',        'service_identity',    ]

5.. 准备requirements.txt 和 test-requirements.txt,这个申明包的依赖包和自动化测试的测试依赖包,具体格式示例如下:

mock>=2.0.0flake8>=3.2.1eventlet>=0.19.0nose2>=0.6.5cov_core>=1.15.0virtualenv>=15.1.0

准备这个两个文件不是必须的。但是,有了它们,用户可以自己手动安装依赖包:

pip install -r requirements.txt

6.. 准备一个项目的README.rst文件, README这种文件其实也非常重要,其重要程度不小于任何一个文件。你写的库或者python代码,必须说明清楚5个W,因为别人并不知道你在干什么。写注释和写README在我看来,是区分一个优秀程序员和水货的重要的标志。我只写了个简单的README,目录架构如图所示,具体内容用……代替。
README.rst目录架构

7.准备好上面的步骤,一个包就基本完整了,剩下的就是打包了(cd到包的根目录):
打包一个wheels格式的包,使用下面的命令搞定:

python setup.py bdist_wheel --universal

这样会在dist文件夹下生成一个whl文件。
8. 上传生成的包。可以使用setuptools,或者twine上传,我使用的是twine。听说使用setuptools上传时,用户名和密码是明文或者未加密传输,安全起见,我还是使用twine。
使用twine上传,先安装twine:

pip install twine

然后使用命令:

twine upload dist/*

命令行会提示你输入前面注册的用户名和密码。
9. 现在所有的步骤都完成了,在正常情况下都不会出错;现在你的库在任何地方可以通过pip安装了。

原创粉丝点击