发布pip项目(包含静态文件)遇到的坑

参考文档
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

  1. 安装 pip install twine 然后在通过命令 twine register dist/mypkg.whl 完成注册
  2. 上传到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

注意事项

  1. 注意:setup中‘<’符号需要去掉
    username =
    password =

  2. 注意:命令行 twine不是内部命令时
    python -m twine upload --repository testpypi dist/*

  3. 上传完成之后 安装报错,再执行一次就好了,可以指定一下版本
    ERROR: Could not find a version that satisfies the requirement UIMonkey2077 ERROR: No matching distribution found for UIMonkey2077

  4. 为什么在执行setup.py sdist时find_packages不生效
    http://www.cocoachina.com/articles/91600

  5. 如何包含所有静态文件
    setup.py文件设置include_package_data=True,
    setup.py同级目录创建MANIFEST.in文件 输入global-include * ,保存即可

  6. setup配置项中,packages=[‘UIMonkey2077’], #这里一定一定要把自己的所有包放在setup.py文件的同级目录下,比如UIMonkey2077,不能写成[‘utils’,‘services’…],这样会在site-package目录下生成分散的目录,导致不能作为工具使用

  7. 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 动态发现服务和插件

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值