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) 复制后在网上修改。
所建目录及文件详见下图:
setup.py中参数配置
样例代码:
from future import 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 = <username>
password = <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/...
(后续会继续补充完善使更加容易明白操作)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。