参考文档
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_packagessetup(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.gz1%|▍                                                                            | 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 动态发现服务和插件

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

  1. 将 laravel 项目内静态文件,css、js、images 部署到七牛云 CDN

    项目升级,打算把 public 目录下的 css.js.image等文件,上传到七牛云,一直想搞来着,今天又想起来,正好 laravel 也从 5.2 升级到了 5.7,接下来把这边一搞,项目就更加优 ...

  2. 获取项目中静态文件的三种方式

    1.this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()+"/***" 2.S ...

  3. 跟我一起学.NetCore之静态文件处理的那些事

    前言 如今前后端分离开发模式如火如荼,开发职责更加分明(当然前后端一起搞的模式也没有完全褪去):而对于每个公司产品实施来说,部署模式会稍有差别,有的会单独将前端文件部署为一个站点,有的会将前端文件和后 ...

  4. python 打包发布(含静态文件)

    pypi账号注册及设置 注册及添加token 首先在 https://pypi.org/ 注册一个账号,然后在 https://pypi.org/manage/account/ 添加一个token 设 ...

  5. Django静态文件配置

    本文目的 最近用django开发项目,发现django的静态文件(js,css和img等)配置比较麻烦,开发环境和生产环境的配置还不一样,这里记录一下,作为备忘.我当前使用的版本是django v1. ...

  6. 具有完整静态文件(JS、CSS)支持的 ASP.NET Core 3.x 动态可加载插件

    从 Github 下载源代码 - 961 KB 介绍 从3.0版开始,ASP.NET Core提供了一种使用Application Parts将应用程序拆分为模块的方法. 一个解决方案可能包含一个We ...

  7. 各种 django 静态文件的配置总结【待续】

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习django框架的使用,想引用静态css文件,怎么都引用不到,从网搜了好多,大多因为版本问题, 和我现在的使用的da ...

  8. 来玩Play框架07 静态文件

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Play框架的主要功能是提供动态响应的内容.但一个网络项目中必然有大量的静态内容, ...

  9. Django学习之十: staticfile 静态文件

    目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方面 总结 Django学习之十: staticfile 静态文件 理解阐述 静态文 ...

最新文章

  1. 力扣(Leetcode)-94. 二叉树的中序遍历
  2. 210串口控制台-210移植printf不好使
  3. 【C++】vs无法更新DoDataExchange方法问题解决
  4. 前端学习(3034):vue+element今日头条管理-markdown补充
  5. javascript class
  6. java 中对hashmap进行排序
  7. wps2019怎么调整字间距_wps2019表格和文字间距太大怎么调整?
  8. Excel数据分析day1
  9. 老版本的linux内核中mtd test 出现 mtd_oobtest: error: verify failed at 0xXXXX 问题
  10. 002java面试笔记——【java基础篇】从团800失败面试总结的java面试题
  11. mtk9652对比鸿鹄818哪个好
  12. 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
  13. java pdf 首行缩进_java使用iText生成pdf文档的对齐方式
  14. 170504_(读书笔记)ST7920驱动12864液晶模块学习
  15. 数据库错误:1265
  16. Python_对折多少次超过珠峰
  17. 学习c++的50条忠告(转自C++百度贴吧)
  18. 唯晶科技宣布PSVR游戏《揭秘计划》将开源给合作伙伴
  19. 《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair
  20. 一只前端程序媛的絮絮叨叨

热门文章

  1. win7锁定计算机自动关机,windows7怎么设置电脑自动关机_win7如何自动关机
  2. 清华大学出版社大数据可视化技术与应用第六章Tableau实训
  3. 循环队列(队列头尾相接的顺序存储结构)
  4. Unity VRAR Unity播放全景视频及优化极点变形twist问题
  5. 矿大计算机考研上岸分数,2021--2022中国矿业大学动力工程考研上岸心得及分数线报录比...
  6. 【认知实习】虚拟现实体验
  7. outlook 加载配置项_如何在Outlook中启用加载项和连接器
  8. iOS系统越狱研究现状梳理
  9. Python计算:sympy解数学方程
  10. 天梯赛题目练习——平面向量加法(附带PTA测试点)