Title: Python打包时添加非代码文件的坑 Tags: python, 小结

对于 Python 的打包, 通常有两种, 一种是对源文件打包, 一种是安装包, 既在上传 pypi 的时候一般会执行

python3 setup.py sdist bdist_wheel

使用pip安装的时候一般是安装bdist打包出来的文件。

关于在打包中加入非程序文件, 有几种方法, 一种是在 http://MANIFEST.in 中加入, 对于 setup.py 中也提供了package_data参数, 另外对于 setuptools 还提供了特别的 include_package_data的参数, 接下来介绍这些参数的意义和怎么用。

http://MANIFEST.in文件是针对 源文件打包 的, 当需要把非程序文件, 包括README, css或者test文件等加入时, 在http://MANIFEST.in中指定, 用于生成MANIFEST

MIANIFEST会暗中自动寻找以下的文件:所有py_modules 和 packages中没有明确说明的python文件

ext_modules 或 libraries选项中指明的C文件

scripts指明的文件

所有看上去像是test文件的, 比如tests/*.py

README.txt 或者 README, setup.py, setup.cfg

package_data中指明的文件

data_files中指明的文件

package_data

package_data是在setup.py中的参数, 用于控制安装包里面包含的文件。

应该这样理解, MANIFEST 控制 sdist 包含的内容, package_data控制bdist包含的内容。

一般情况是, 对源文件打包里面一般包含README, tests这些, 但是对于安装包这不需要。 所以分开设置。

include_package_data

坑就是指include_package_data, 这个参数是setuptools特有的, 但是非常容易让人误解然后勿用。 setuptools的文档中是这样写的If set to True, this tells setuptools to automatically include any data files it finds inside your package directories that are specified by your http://MANIFEST.in file. For more information, see the section below on Including Data Files.

设为 True 时, 打包时setuptools 会自动加入在 http://MANIFEST.in中指定的文件。

原本是 MANIFEST 在 setup.py 中的package_data寻找额外的文件的, 现在变成大家以 http://MANIFEST.in 为准了。

这会发生什么事情呢, 如果你同时用了include_package_data和package_data, 那么你的 sdist 就会瞬间爆炸。

bdist 打包出来的东西会包含package_data中的内容, 但是源代码打包的时候就会失去在package_data中指明的文件。

总结

永远也不要用include_package_data

http://MANIFEST.in 用来给源文件打包, 里面包含许多额外的信息, 比如测试文件之类的。

package_data用于指定安装时加入的额外的文件, 不需要再http://MANIFEST.in中重复定义, 源文件打包的时候回自动包含这里面的文件。

参考:

2016年12月12日01:04:25

python打包和添加数据文件_Python打包时添加非代码文件的坑相关推荐

  1. python画图添加数据标签_Python plt.bar 添加数据标签

    def plot_result(count_df): fig = plt.figure() #use a figure size of (20, 8),bar width of 0.8, 设置图片大小 ...

  2. pypi打包非代码文件

    pypi打包非代码文件 在使用pypi给自己的python程序打包的时候,对于非*.py的文件,默认是不会打包的.因此可以在MANIFEST.in中包括一些非代码文件,如*.yml,*.txt等等.并 ...

  3. FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。附文件重命名代码

    FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件.附文件重命名代码 问题: FileExistsError: [WinError 183] 当文件已存在时 ...

  4. python反编译加密文件_python打包的二进制文件反编译

    简介 Pyhton是一个脚本语言,在运行Python代码时,最终由Python解释器来执行.解释器就是Python的运行环境,但是除了开发人员,大部分人在使用时并不会安装Python.所以官方就提供了 ...

  5. python读取压缩文件的指定后缀的文件_python打包压缩、读取指定目录下的指定类型文件...

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

  6. python中csv文件添加数据标签_Python对csv格式文件进行数据分析

    csv格式文件数据分析 1.下载数据 1.1下载数据,处理csv格式文件的数据 安装csv模块,在网上下载或者自己写一个csv格式的文件 也可以访问官网,不过很多人下不了这些文档,我这的下载积分只要1 ...

  7. python 打包 .app 运行 控制台窗口_Python打包工具

    1 Python打包工具 目前在windows平台上将Python程序打包成exe文件主要有三个工具. 今天将一个Tkinter写的界面程序打包成exe文件,三个工具都试了一遍,感觉PyInstall ...

  8. python打包exe有什么用_Python 打包exe

    目前有好几种方法可以将python文件打包成exe应用程序文件,例如py2exe,pyinstaller等,比较下来,还是觉得pyinstaller使用起来比较简单. 首先第一步下载安装pyinsta ...

  9. python 打包 .app 运行 控制台窗口_Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法...

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstalle ...

最新文章

  1. 微信支付:小微商户申请入驻第二步:图片上传
  2. C语言经典例19-完数
  3. 具有实际意义的5种云遣返
  4. python ftp 上传文档出现 553 Could not create file
  5. 3001基于哈夫曼树的数据压缩算法(附思路及注释)
  6. 前端Vue3中级视频(240分钟)评分95分
  7. 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】...
  8. Js求时间差、并转换为字符串
  9. 这三种研发工程师千万不能招?
  10. 【译文】人工智能给伦敦带来了它的大脑和经济收益
  11. 均值定理最大值最小值公式_超急关于不等式最大值最小值的求法
  12. 【Scratch案例实操】Scratch字母排序 scratch编程案例教学 scratch创意编程 少儿编程教案
  13. 致敬钢铁侠!!!!!
  14. 程序员进阶!阿里P7级别面试经验总结,深度好文
  15. 中国招聘网站调研报告
  16. sizeof结构体指针
  17. 华为18级工程师历时五年总结出趣谈网络协议(大牛精讲)
  18. SAP中采购订单收货和发票收据选项的控制逻辑分析
  19. java中 如果类c_Java中,如果类C是类B的子类,类B是类A的子类,那么下面描述正确的是( )。_学小易找答案...
  20. IText7添加图片覆盖文字

热门文章

  1. qt向服务器传输文字_Qt实现客户端与服务器消息发送
  2. 跨境电商独立站,该如何去经营呢?
  3. 独立站大卖家都在用的运营技巧?
  4. 模拟地铁乘车推荐c语言,模拟地铁新手攻略 新手必看三要素
  5. 已安装过matplotlib但提示ModuleNotFoundError: No module named ‘matplotlib‘的解决方法
  6. 机器学习实战(六)AdaBoost元算法
  7. 飞利浦医疗收购Direct Radiology,加强远程放射学服务能力
  8. Keil5配置GCC编译器编译STM32工程
  9. 机器学习13/100天-SVM实践
  10. cdo收取邮件_C#使用CDO发送邮件的方法