打包自己写的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代码打包到发布步骤
- 编写完代码后,
需要检查项目目录结构
,推荐将项目目录做成这样:
将所有的项目代码全部放进一个文件夹中,文件名为你想要提交给pypi的库名字;创建LICENSE
,README.rst
,setup.py
的空文件,除此之外,你还可以创建requirements.txt
和test-requirements.txt
文件。本项目没有第三方依赖包。由于项目很小,自动化测试也没有做,后续会补上,所以自动化测试的测试依赖包也不需要。
PS:其实对于一个库,如果你要长久维护,自动测试肯定要加入。所以建议小伙伴们都去学会写自动化测试脚本。 代码打包工作主要依赖python的一个叫setuptools的包来完成,在进行下面操作前请使用pip安装它:
pip install setuptools
然后就是到pypi(https://pypi.python.org/pypi)上注册自己的用户, 点击“Register”,填写自己的用户名,密码,邮件地址后,进入邮箱验证。这样就成功了。
PS:记住自己的用户名和密码,后面上传的时候要输入的。- 准备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,目录架构如图所示,具体内容用……代替。
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安装了。
- 打包自己写的python库(Betubedl)并且发布到pypi上
- 如何将自己的Python代码打包发布到pypi上
- 如何将自己的Python代码打包发布到pypi上
- 将自己写的Python代码打包放到PyPI上
- python打包发布到pypi
- 转载:将自己写的Python代码打包放到PyPI上
- 把自己的python脚本打包上传到PYPI
- Python库打包到PyPI
- 在Pypi上发布自己的Python包
- 在Pypi上发布自己的Python包
- 把自己制作的Python open package发布到PyPI
- 自己写一个python第三方库并上传到pypi上
- python的模块管理与发布+如何在pypi上发布自己的模块
- python 打包发布pypi package
- 发布自己的python轮子——上传PyPI
- 上传自己写的package到Pypi (简单好用)
- 把自己的独立python模块上传到pypi上去
- python创建模块并发布到pypi
- Unity2D游戏入门教程(一)宝石迷阵(2)生成宝石地图
- 【编译错误解决方案】提示:“make mrproper”
- LeetCode 记录(c#版)
- 持续集成
- vue的常用的属性和方法及生命钩子
- 打包自己写的python库(Betubedl)并且发布到pypi上
- linux习题
- PAT乙级1022
- Java--map的遍历方式
- [LCT维护树的权值与形态]BZOJ3159.决战
- 【JAVASE_学习笔记】数据类型
- 不务正业-搜索
- redis服务器理解
- java第二天——java基本语法