自作pip包流程详解

自作pip包流程详解

1. 配置环境
主要是需要安装Python版本在3.4以上,安装pip工具,并确保pip,setuptools和wheel是最新的,一般满足条件。也可以用以下指令更新以下:

成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的福安网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

python -m pip install --upgrade pip setuptools wheel

详情见官网链接

2.制作pip包
1)创建工程文件目录及文件
在目录内分别新建LICENCE、README.md(markdown文件)、requirements.txt、setup.py(链接大神的配置模板)文件,注意文件尾缀。其中setup.py可以自己编写,可以根据超链接下载自己改写,也可以复制,指令:(git clone https://github.com/kennethreitz/setup.py) 复制后在网上修改。

所建目录及文件详见下图:
自作pip包流程详解
setup.py中参数配置
样例代码:
from futureimport print_function
from setuptools import setup, find_packages
import sys

setup(
name="utilsss",
version="0.1.3",
author="vip", #author_email="huhongping123@163.com",
br/>author_email="huhongping123@163.com",
description="vip Python lib Framework.",
license="MIT",
url="https://github.com/huhongping/vip_utils",
packages=find_packages(),
include_package_data=True,

install_requires=[

],
zip_safe=True,

)
重要参数解释:
1.name
name = “utilsss”,这个name参数后边的就是你的项目代码所在目录,也是你pip要上传的项目名称,其他人用pip install xxx来安装时,后边的xxx就是你的这个magetool

2.version
version = “0.1.0”,你工具的版本号,后期你工具更新了,要用pip来更新包的时候,会更新比当前版本号高的新版本。

下边是pip 更新包的命令

pip install --upgrade <包的名字>
pip install -U <包的名字>

3.packages
packages = find_packages(),这个参数是导入目录下的所有init.py包

4.install_requires
install_requires = [],这是一个数组,里边包含的是咱的pip项目引用到的第三方库,如果你的项目有用到第三方库,要在这里添上第三方库的包名,如果用的第三方版本不是最新版本,还要有版本号。

更多参数详解如下:

参数说明备注
name 包名称
version 包版本
author 程序的作者
author_email 程序的作者的邮箱地址
maintainer 维护者
maintainer_email 维护者的邮箱地址
url 程序的官网地址
license 程序的授权信息
description 程序的简单描述
long_description 程序的详细描述
platforms 程序适用的软件平台列表
classifiers 程序的所属分类列表
keywords 程序的关键字列表
packages 需要处理的包目录(通常为包含 init.py 的文件夹)
py_modules 需要打包的 Python 单文件列表
download_url 程序的下载地址
cmdclass 添加自定义命令
package_data 指定包内需要包含的数据文件
include_package_data 自动包含包内所有受版本控制(cvs/svn/git)的数据文件
exclude_package_data 当 include_package_data 为 True 时该选项用于排除部分文件
data_files 打包时需要打包的数据文件,如图片,配置文件等
ext_modules 指定扩展模块
scripts 指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下
package_dir 指定哪些目录下的文件被映射到哪个源码包
requires 指定依赖的其他包
provides 指定可以为哪些模块提供依赖
install_requires 安装时需要安装的依赖包
entry_points 动态发现服务和插件,下面详细讲
setup_requires 指定运行 setup.py 文件本身所依赖的包
dependency_links 指定依赖包的下载地址
extras_require 当前包的高级/额外特性需要依赖的分发包
zip_safe 不压缩包,而是以目录的形式安装

2)编写核心代码
在工程目录下新建一个utilsss的package,默认自带一个init.py文件,即调用该包就自动执行该文件。然后在包里面新建一个自己想要拥有的函数。
接下来我们就可以编写自己的代码了,要注意源代码文件夹(仓库里的my_package文件夹)的名字与setup.py里配置的包名(Name)要一致。
另外在重新上传之前我们要修改version.py里的版本号,以免覆盖了以前的上传(相信会有人是需要之前版本的库的)。
本目录包含文件:
core.py
init.py
version.py(非必须)

3.打包项目
在代码编写完成,自已测试后没有问题了,就可以打包了。
命令窗口输入:
$ python setup.py sdist # 生成类似 utilsss-0.1.3.tar.gz,支持 pip

经过以上步骤已经可以生成一个pip可安装的工程包,安装非常简单。
直接在命令窗口输入:

pip install .\dist\utilsss-0.1.3.tar.gz

4.上传到PyPi服务器

1)创建 PyPI账号
非常简单,直接通过官网注册 https://pypi.python.org/pypi?..., 但是需要验证邮件并确认激活。
之前我在pypi注册时弄了双因素验证(解释),有需要的同学,可以弄个,加强账号安全。
2)创建用户验证文件 ~/.pypirc
在自己的用户目录下新建一个空白文件命名为.pypirc,内容如下:

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username =
password =

3)用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。

注册你的包
你需要到PyPI注册并验证你的包,之后才能开始真正上传,注册的方式有以下几种。

使用命令python setup.py register,最简单但官网不推荐,因为使用的是HTTP未加密,有可能会被***人嗅探到你的密码。
通过PyPI网站提交表单完成注册验证。
安装 pip install twine 然后在通过命令 twine register dist/mypkg.whl 完成注册。
4)上传并完成发布
正常情况下,直接使用第一条命令即可,也可以使用tuine这个第三方较为安全的提交方式。

使用命令:python setup.py sdist upload,还是和上面一样,简单但有安全隐患,目前已淘汰。
使用 twine: twine upload dist/*

可能遇到的错误

Upload failed (403): Invalid or non-existent authentication information.
错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc。请参阅上文。

Upload failed (403): You are not allowed to edit 'xxx' package information
你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register

Server response (401): Incomplete registration; check your email
你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。

Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.

error: No dist file created in earlier command
你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如:

python setup sdist upload
error: Upload failed (499): Client Disconnected
这应该是网络问题,多重试几次。

Upload failed (400): File already exists
文件已经存在了,你每一次上次都应该更新版本号。

官网参考文档
https://packaging.python.org/...

(后续会继续补充完善使更加容易明白操作)


本文名称:自作pip包流程详解
标题路径:http://pwwzsj.com/article/ipjgjp.html