参考文档
https://packaging.python.org/guides/using-manifest-in/《官方文档》
https://segmentfault.com/a/1190000008663126 betacat《发布你自己的轮子 - PyPI打包上传实践》
https://mp.weixin.qq.com/s/D3aCyUeXdOpIZbQImVwPYg 清风python《花了两天,终于把 Python 的 setup.py 给整明白了》
步骤1 创建并配置setup.py 和MANIFEST.in
设置setup.py 如果想把模块当成工具,那么需要用entry_points定义命令行窗口启动模块的入口
from setuptools import setup, find_packages
setup(
name="UIMonkey2077",
version="0.2.3",
keywords=["pip", "UIMonkey", "python", "layUI"],
description="uimonkey tool",
long_description="uimonkey tool",
license="MIT",
url="https://github.com/TangSir61/UIMonkey2021.git",
author="TangSir61",
author_email="zzzsjztz@qq.com",
# packages=find_packages(), # 这个参数是导入目录下的所有__init__.py包
packages=['UIMonkey2077'],#这里一定一定要把自己的所有包放在setup。py文件的同级目录下,比如UIMonkey2077,不能写成['utils','services'....],这样会在site-package目录下生成分散的目录
include_package_data=True,
platforms="any",
# install_requires=['uiautomator2', 'tornado'],
python_requires='>=3.6',
zip_safe=True,
# 定义命令行窗口 启动模块的入口(把模块当成工具)
entry_points={
'console_scripts': [
'UIMonkey2077 = UIMonkey2077.__main__:main'
]
}
设置MANIFEST.in,global-include * 比较简单,包含所有文件----解决工程内静态文件不能上传的问题
global-include *
步骤2 打包
工程cmd输入python setup.py sdist,会在dist生成一个tar包
C:\Users\tangwenbo6\IdeaProjects\UIMonkey2021>python setup.py sdist
或者使用
python setup.py sdist bdist_wheel ,会在dist生成两个包,一个tar包一个whl包
步骤3 注册pypi账号与上传dist中上一步生成的两个包到testpypi
- 安装 pip install twine 然后在通过命令 twine register dist/mypkg.whl 完成注册
- 上传到pypi :python -m twine upload --repository testpypi dist/*
C:\Users\tangwenbo6\IdeaProjects\UIMonkey2021>python -m twine upload --repository testpypi dist/*
Uploading distributions to https://test.pypi.org/legacy/
Enter your username: tangwenbo6
Enter your password:
Uploading UIMonkey2077-0.1.1.tar.gz
1%|▍ | 8.00k/1.38M [00:00<00:49, 29.0kB/s] 8%|
步骤4 下载使用自己的包
pip install -i https://test.pypi.org/simple/ UIMonkey2077
如果是指定版本,可以使用下面的命令
pip install -i https://test.pypi.org/simple/ UIMonkey2077==0.2.0
注意事项
-
注意:setup中‘<’符号需要去掉
username =
password = -
注意:命令行 twine不是内部命令时
python -m twine upload --repository testpypi dist/*
-
上传完成之后 安装报错,再执行一次就好了,可以指定一下版本
ERROR: Could not find a version that satisfies the requirement UIMonkey2077 ERROR: No matching distribution found for UIMonkey2077
-
为什么在执行setup.py sdist时find_packages不生效
http://www.cocoachina.com/articles/91600 -
如何包含所有静态文件
setup.py文件设置include_package_data=True,
setup.py同级目录创建MANIFEST.in文件 输入global-include * ,保存即可 -
setup配置项中,packages=[‘UIMonkey2077’], #这里一定一定要把自己的所有包放在setup.py文件的同级目录下,比如UIMonkey2077,不能写成[‘utils’,‘services’…],这样会在site-package目录下生成分散的目录,导致不能作为工具使用
-
setup函数包含的参数解释
–name 包名称------------生成的egg名称
–version (-V) 包版本----生成egg包的版本号
–author 程序的作者------包的制作者名字
–author_email 程序的作者的邮箱地址
–maintainer 维护者
–maintainer_email 维护者的邮箱地址
–url 程序的官网地址
–license 程序的授权信息
–description 程序的简单描述-------程序的概要介绍
–long_description 程序的详细描述—程序的详细描述
–platforms 程序适用的软件平台列表
–classifiers 程序的所属分类列表
–keywords 程序的关键字列表
–packages 需要处理的包目录(包含__init__.py的文件夹)-------和setup.py同一目录下搜索各个含有 init.py的包
–py_modules 需要打包的python文件列表
–download_url 程序的下载地址
–cmdclass
–data_files 打包时需要打包的数据文件,如图片,配置文件等
–scripts 安装时需要执行的脚步列表
–package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {’’: ‘lib’},表示“root package”中的模块都在lib 目录中。
–requires 定义依赖哪些模块
–provides定义可以为哪些模块提供依赖
–find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 init.py的包。
其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。另外,也可以排除一些特定的包
find_packages(exclude=[".tests", “.tests.”, “tests.”, “tests”])
–install_requires = [“requests”] 需要安装的依赖包
–entry_points 动态发现服务和插件