背景

在我们安装 Python 库的时候,通常我们都是pip install xxx

真是又酷炫又方便

那么,当我们自己写了一些自认为不错的库,想要分享给大家使用(或者是想要装X时)能不能也能做到这样呢?

环境需求已经写好能正常使用的库/方法/项目 (可本地调用)

步骤创建一个这样的目录结构,我们接下来的命令都在 example_pkg/__init__.py 目录进行

/packaging_tutorial

/example_pkg

__init__.py

2. 编辑 example_pkg/__init__.py ,写入以下内容

name = "example_pkg"

3. 创建 packaging_tutorial/setup.py

setup.py 是 setuptools 的构建脚本,用于告知 setuptools 我们要上传到PYPI的库的信息(库名、版本信息、描述、环境需求等)

下面是 setup.py 的示例

import setuptools

with open("README.md", "r") as fh:

long_description = fh.read()

setuptools.setup(

name="example-pkg-your-username",

version="0.0.1",

author="Example Author",

author_email="author@example.com",

description="A small example package",

long_description=long_description,

long_description_content_type="text/markdown",

url="https://github.com/pypa/sampleproject",

packages=setuptools.find_packages(),

classifiers=[

"Programming Language :: Python :: 3",

"License :: OSI Approved :: MIT License",

"Operating System :: OS Independent",

],

)

参数解析name:库名

version:版本号

author:作者

author_email:作者邮箱(如:别人发现了bug或者提建议给我们添加功能联系我们用的)

description:简述

long_description:详细描述(一般会写在README.md中)

long_description_content_type:README.md中描述的语法(一般为markdown)

url:库/项目主页,一般我们把项目托管在GitHub,放该项目的GitHub地址即可

packages:使用setuptools.find_packages()即可,这个是方便以后我们给库拓展新功能的(详情请看官方文档)

classifiers:指定该库依赖的Python版本、license、操作系统之类的

4. 创建 packaging_tutorial/README.md ,向其写入自己对该库的简介、描述

# Example Package

This is a simple example package. You can use

[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)

to write your content.

5. 创建 packaging_tutorial/LICENSE ,对于每一个创建的库来说 LICENSE 是很重要的,这告诉大 家我们的库能用在什么方面(商用?之类的)还有免责啊之类的;一般来说我们选择MIT

MIT License

Copyright (c) [year] [fullname]

Permission is hereby granted, free of charge, to any person obtaining a copy

of this software and associated documentation files (the "Software"), to deal

in the Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

copies of the Software, and to permit persons to whom the Software is

furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

LIABILITY, 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 THE

SOFTWARE.

MIT LICENSE 的大概意思是软件可以随便用,随便改

可以免费,可以收费

软件的源文件里必须有这个许可证文档

我提供这个软件不是为了犯法,你要用它来犯法,那与我无关

你用这个软件犯事了,责任全在你自己,与其他贡献者无关

关于 setup.py 和 和 的写法,大家可以参照我先前写的 maida 库,地址我会放在文末。

选择自己的 LICENSE 可以点击下方链接

6. 确保我们已安装最新setuptools 和 wheel和twine ,下面是安装/更新命令

python3 -m pip install --user --upgrade setuptools wheel twine

7. 打包的我们的库/项目

python3 setup.py sdist bdist_wheel

此时在当前目录我们会看到以下:

dist/

example_pkg_your_username-0.0.1-py3-none-any.whl

example_pkg_your_username-0.0.1.tar.gz

8. 使用 twine 将打包好的库/项目上传到PYPI

(需用到PYPI帐号密码)(此时只是上传到PYPI测试服,还不能 pip install 这个库/项目)

python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

我们会看到如下界面:

Uploading distributions to https://test.pypi.org/legacy/

Enter your username: [your username]

Enter your password:

Uploading example_pkg_your_username-0.0.1-py3-none-any.whl

100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s]

Uploading example_pkg_your_username-0.0.1.tar.gz

100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s]

上传成功之后,我们可以去PYPI的测试服查看是否上传成功,能上传成功的话就说明肯定也能成功上传到PYPI正式服(附:PYPI测试服地址)

PYPI测试服的管理员会不定期删除上边的库,正式投入使用还是得上传到正式服。

由于我先前有上传库到测试服,我们可以尝试搜索看看

若是想测试下上传到测试服的库能否使用,可以使用如下命令

python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-your-username

大致会出现以下:

Collecting example-pkg-your-username

Downloading https://test-files.pythonhosted.org/packages/.../example-pkg-your-username-0.0.1-py3-none-any.whl

Installing collected packages: example-pkg-your-username

Successfully installed example-pkg-your-username-0.0.1

若是从测试服安装的我们的库能正常使用,那么我们就可以开始行动把它上传到PYPI正式服供大家使用了。(之所以特地提出这一步,是因为第一次上传库时,我们总会因为目录结构不会、未打包成库可正常使用打包了却不能用等等原因导致上传的是个“失败的库”,这样能避免别人会安装到我们的失败库)

简单测试是否能正常使用直接如下即可,但具体里边的功能能否正常用我们还需调用一下,此处不做介绍

>>> import example_pkg

>>> example_pkg.name

'example_pkg'

9. 【重头戏】将库上传到 PYPI正式服

twine upload dist/*

上传成功后该库即可直接pip安装

上传PYPI示例库LZC6244/maida​github.com

如果对目录结构或者其他有什么不清楚的可以参考我这个库(结构较简单适合初学者),或者我们平时使用的库(譬如本人平时经常使用 scrapy 也可以去 scrapy 主页参考大佬的写法)

2019.9.16更新

安装自己库的依赖库

setup(

...

install_requires=[

'你的库依赖的第三方库(也可以指定版本)',

# exapmle

'pyautogui',

'Django >= 1.11, != 1.11.1, <= 2',

],

)

官方文档传送门

原创文章,转载请保留或注明出处!

python打包库_Python 打包自己的库到 PYPI (可pip安装)相关推荐

  1. 如何制作并使用python发布的模块压缩包和whl包,并进行pip安装和使用教程,加上传Pypi,上传之后又如何增删whl项目

    如何制作并使用python发布的模块压缩包和whl包,并进行pip安装和使用教程 0 对于python中包概念的理解 一 创建setup.py文件 # 打包成模块压缩包 from distutils. ...

  2. python自然语言处理库_Python自然语言处理工具库(含中文处理)

    自然语言处理(Natural Language Processing,简称 NLP),是研究计算机处理人类语言的一门技术.随着深度学习在图像识别.语音识别领域的大放异彩,人们对深度学习在 NLP 的价 ...

  3. python爬虫requests库_python爬虫使用Requests库 - pytorch中文网

    在入门教程中我们介绍了urllib库和urllib2的用法,同时我们了解一些爬虫的基础以及对爬虫有了基本的了解.其实在我们生产环境中,使用Request库更加方便与实用,同时我们这需要短短的几行代码就 ...

  4. python可视化神器_python可视化神器——pyecharts库

    pyecharts是什么? pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果很是棒,pyec ...

  5. python怎么用第三方库_python怎么引用第三方库?

    Python及第三方库安装教程 一.Python安装教程 第一步:下载Python安装包 第二步:安装 第三步:测试 第四步:运行 二.第三方库安装教程 第一步:下载安装包 第二步:安装 第三步:测试 ...

  6. python从网络时间服务器获取并打印当前时间以及pip安装ntplib的一次体验

    首先需要安装ntplib,科一通过pip安装. ubuntu下科一通过如下指令安装pip: $ sudo apt-get install python-pip 使用如下指令安装ntplib: $ su ...

  7. 好用的python打包软件_Python打包exe文件方法汇总【4种】

    title: Python打包exe文件方法 copyright: true top: 0 date: 2018-08-11 21:08:21 tags: 打包 categories: Python进 ...

  8. python 打包图标_Python打包成exe文件很难?一分钟即可学会,并添加图标!

    环境 1.python 3.7 2.pyinstaller 下载方式: 2.1 python安装(略) 2.2 安装pyinstaller 打开DOS窗口输入以下命令: pip install pyi ...

  9. python如何扩展库_python的常用扩展库以及使用方式

    一.常用库(标准库+扩展库) 标准库 说明 math 数学模块 random 随机数以及随机化相关模块 datetime 日期时间模块 ​collections 包含更多扩展性序列的模块 functo ...

最新文章

  1. 自动化测试框架cucumber_BDD测试框架之Cucumber使用入门
  2. springboot 单元测试
  3. 《数据库SQL实战》查找当前薪水详情以及部门编号dept_no
  4. 北航成教计算机课程,成教生:从问题学生到北航计算机本科生
  5. Evernote,有道云笔记以及Ms Onenote 2011
  6. CUDA学习(二十九)
  7. seaborn—sns.scatterplot绘制散点图
  8. ZeroClipboard插件——复制到剪切板
  9. 【315天】每日项目总结系列053(2017.12.17)
  10. springcloud之config配置中心
  11. [原创] 阿里巴巴平台型产品经理 实习生面试经历
  12. keil5工程函数无法跳转到函数定义解决方法
  13. Python使用Opencc库完成字符繁简体转换
  14. 酷睿i5 12500h怎么样 i512500h是标压吗
  15. 如何管理计算机中文件,如何管理文件 -电脑资料
  16. 桌上有一空盘,最多允许存放一只水果。爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。用wait、signal操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
  17. 基于SSH框架的二手物品交易网(Struts)
  18. 文本处理(一)全角转半角及正则匹配
  19. uni-app 系统打印、AirPrint、支持ipad、打印图片 pdf webView文档
  20. 如何使用MATLAB将两张或者多张figure图形合并到一个figure图形里进行对比

热门文章

  1. 为.netcore助力--WebApiClient正式发布core版本
  2. C#的未来:简化参数空值验证
  3. 你必须知道的容器监控 (2) cAdvisor
  4. 做“是非题”的正确姿势
  5. 程序员35岁不转型就退休,是真的吗?
  6. VS Code 1.37 发布!多达数十个图标迎来全新设计
  7. 联手微软,Docker公司将推出Docker Desktop for WSL 2
  8. Dapper的正确使用姿势
  9. 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
  10. 现身说法:实际业务出发分析百亿数据量下的多表查询优化