Python模块、扩展和应用程序可以按以下几种形式进行打包和发布:

python setup.py获取帮助的方式

python setup.py --help

python setup.py --help-commands 所有可以使用的命令,如build,install

python setup.py COMMAND --help 获取特定命令的帮助

python setup.py COMMAND --help-formats 获取特定命令支持使用的格式

打包

1.压缩文件(使用distutils)

Windows的Zip文件和类Unix平台的.tar.gz文件

2.自动解包或自动安装可执行文件

Windows中的.exe文件

3.自包含的,不要求安装的预备运行科执行程序

Windows的.exe文件、Unix上带有一个小的脚本前缀的ZIP压缩文件、Mac上的.app文件等

4.平台相关的安装程序

Windows上的.msi文件、Linux上常见的.rpm、src.rpm和.dep文件等

5.Python eggs

较流行的第三方扩展

发布

“发布”是指一个文件集合,这些文件联合在一起可使用distutils构建、打包和发布模块

创建好的发布可以用于安装,可上传到ftp,上传到各大网络让人下载,也可上传到PyPI与他人共享

创建发布

将各代码文件组织到模块容器中

准备一个README或README.txt文件

而后在容器中创建setup.py文件

setup.py中setup()中可用参数:

platforms: 平台列表

license: 许可证

py_modules: 各模块名称组成的列表,此些模块可能位于包的根目录下(modname),也可能位于某子包目录中(subpkg1.modname)

packages: 各子包名称的列表

......

setup.py关键字大体分为两类:

1.元数据信息

2.包中的内容列表

python setup.py sdist打包(会指定默认格式tar.gz)

可以为sdist指定打包格式:

zip: zip file

gztar: tar.gz file

bztar: tar.bz2 vil2

ztar: tar.Z file

tar: tar file

指定格式sdist打包的方式:

1
2
3
4
5
6
7
8
[root@kurol pkg1]# python36 setup.py sdist --help-formats
List of available source distribution formats:
  --formats=bztar  bzip2'ed tar-file
  --formats=gztar  gzip'ed tar-file
  --formats=tar    uncompressed tar file
  --formats=xztar  xz'ed tar-file
  --formats=zip    ZIP file
  --formats=ztar   compressed tar file

python setup.py bdist打包(二进制发行版)(会指定默认格式tar.gz)

可以为bdist指定的格式:

gztar: tar.gz file

ztar: tar.Z file

zip: zip file

rpm: RPM Package

pkgtool: Solaris pkgtool

wininst: Windows上自解压的zip格式包

msi:Microsoft Installer

指定格式sdist打包的方式:

1
2
3
4
5
6
7
8
9
10
11
[root@kurol pkg1]# python36 setup.py bdist --help-formats
List of available distribution formats:
  --formats=rpm      RPM distribution
  --formats=gztar    gzip'ed tar file
  --formats=bztar    bzip2'ed tar file
  --formats=xztar    xz'ed tar file
  --formats=ztar     compressed tar file
  --formats=tar      tar file
  --formats=wininst  Windows executable installer
  --formats=zip      ZIP file
  --formats=msi      Microsoft Installer

打包 ,例:

1
2
3
4
5
6
[root@kurol python361]# cd pkg1/
[root@kurol pkg1]# ls
__init__.py __pycache__ mymmm.py
[root@kurol pkg1]# touch REMAIN.txt
[root@kurol pkg1]# touch setup.py
[root@kurol pkg1]# vim setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 #!/usr/bin/python36
 #
 from distutils.core import setup
 
 setup(
         name = 'pkg1',
         version = '1.0',
         author = 'MageEdu',
         author_email = 'email@mykurol.com',
         py_modules = ['mymmm'],
         url = 'http://www.mykurol.com',
         download_url = 'http://www.mykurol.com/pymodules/download/',
         description = 'test module',
 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@kurol pkg1]# python36 setup.py sdist
running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
file yammm.py (for module yammm) not found
writing manifest file 'MANIFEST'
creating pkg1-1.0
making hard links in pkg1-1.0...
hard linking setup.py -> pkg1-1.0
creating dist
Creating tar archive
removing 'pkg1-1.0' (and everything under it)
[root@kurol pkg1]# ls    ##自动生成了MANIFEST文件
MANIFEST  REMAIN.txt  __init__.py  __pycache__  dist  mymmm.py  setup.py
[root@kurol pkg1]# cd dist/
[root@kurol dist]# ls
<strong>pkg1-1.0.tar.gz</strong>

使用bdist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@kurol dist]# cd -
/opt/python361/pkg1
[root@kurol pkg1]# python36 setup.py bdist
running bdist
running bdist_dumb
running build
running build_py
file yammm.py (for module yammm) not found
file yammm.py (for module yammm) not found
installing to build/bdist.linux-x86_64/dumb
running install
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install
running install_egg_info
Creating build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/
Writing build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info
Creating tar archive
removing 'build/bdist.linux-x86_64/dumb' (and everything under it)
[root@kurol pkg1]# cd dist/
[root@kurol dist]# ls
<strong>pkg1-1.0.linux-x86_64.tar.gz</strong>  pkg1-1.0.tar.gz

指定为zip格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@kurol pkg1]# python36 setup.py bdist --formats=zip
running bdist
running bdist_dumb
running build
running build_py
file yammm.py (for module yammm) not found
file yammm.py (for module yammm) not found
installing to build/bdist.linux-x86_64/dumb
running install
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install
running install_egg_info
Creating build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/
Writing build/bdist.linux-x86_64/dumb/usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info
creating '/opt/python361/pkg1/dist/pkg1-1.0.linux-x86_64.zip' and adding '.' to it
adding 'usr/local/python361/lib/python3.6/site-packages/pkg1-1.0-py3.6.egg-info'
removing 'build/bdist.linux-x86_64/dumb' (and everything under it)
[root@kurol pkg1]# cd dist/
[root@kurol dist]# ls
pkg1-1.0.linux-x86_64.tar.gz  <strong>pkg1-1.0.linux-x86_64.zip</strong>  pkg1-1.0.tar.gz

安装包

python setup.py install

build and install:

python setup.py build:

--build-base /path/to/build_dir      ##指定build路径,build在其他路径进行,保证源码的整洁程度

lib,lib.platform

第三方模块的大多数默认路径通常为:site-packages(站点包)

如 /usr/local/python361/lib/python3.6/site-packages

第三方模块自定义安装路径:

--user 如果用户没有写权限,安装到指定用户的目录下(只有普通权限,没有办法写到公共目录中)

--prefix 指定python库文件的安装路径(对公共目录有写权限才能操作)

--exec-prefix 跟python无关的,有其他语言所实现的跟平台有关的,已经编译好的相关文件的安装路径(对公共目录有写权限才能操作)

深度定制 (期望对python模块安装做深度定制)(路径都是自己定义):

--install-purelib /path/to/python_lib    (纯Python库文件)

--install-platlib /paht/to/plat_lib    (扩展模块,其他语言所实现的)

--install-lib /path/to/lib ( 也可不加区分)

如果同时出现前面3种,第三种lib覆盖前面2种,lib优先级最高。

--install-scripts /path/to/bin(可执行文件的安装路径)

--install-data (指定数据文件安装路径)

--install-headers(指定C代码的头文件安装路径)
---------------------
作者:KurolZ
来源:CSDN
原文:https://blog.csdn.net/hjxzt1/article/details/73741495

打包发布Python模块或程序,安装包的更多相关文章

  1. 制作Linux下程序安装包——使用脚本打包bin、run等安装包

    制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...

  2. Oracle oledb 打包并集成到程序安装包(VC ADO訪问Oracle)

    近期有一个项目和oracle交互,我用的是ADO的方式进行试问操作. 首先把数据库连接的东东记录一下,老了记性不好啊! 操作例如以下: //连接串这么写的话就能够不用配置 tnsnames.ora配置 ...

  3. 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)

    转载自:   DGPLM博客 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)

  4. 基于DevExpress的Winform程序安装包的制作

    在我们做系统开发的时候,都会面临一个安装包制作的问题,如何把我们做好的系统,通过安装包工具整合成一个安装包给客户进行安装.安装包的优势就是一步步安装就可以了,不用复制一大堆文件给客户,还怕缺少那个文件 ...

  5. 使用WinRar软件制作程序安装包

    之前我写过使用好压软件打包程序,见随笔: 使用好压(HaoZip)软件打包EverEdit制作安装程序 - Fetty - 博客园http://www.cnblogs.com/fetty/p/4907 ...

  6. 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)

    VB6.0应用程序安装包的生成,利用其自带的打包工具生成的安装程序很简陋,一点不美观:如果想让自己的应用程序安装的时候显得高大上一点,本教程提供使用Setup Factory 9.0制作安装包的方法. ...

  7. 使用InstallAnywhere7.1制作Java exe程序安装包

    [转[使用InstallAnywhere7.1制作Java exe程序安装包 使用InstallAnywhere7.1制作Java exe程序安装包 对于已经完成的Java应用程序开发项目,从商业化角 ...

  8. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

  9. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(

    用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...

随机推荐

  1. 20175211 2018-2019-2 《Java程序设计》第六周学习总结

    目录 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学习中的问题和解决过程 代码托管 学习进度条 参考资料 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学 ...

  2. 部署的docker image总是太大,怎么办?

    sudo docker images REPOSITORY                        TAG                 IMAGE ID            CREATED ...

  3. Oracle debug

    执行慢的使用使用debug环境变量,可以收集详细的日志 rootcrs.pl/roothas.pl执行慢 参考如下文档设置debug环境变量,重现问题并收集详细日志. How to turn on r ...

  4. table的thead,tbody,tfoot

    为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析HTML时,table是作为一个整体解释的,使用tbody可以优化显示. 如果表格很长,用tbody分段,可以一部分一部分地显示 ...

  5. 60.Vue:将px转化为rem,适配移动端

    1.下载lib-flexible 我使用的是vue-cli+webpack,所以是通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main. ...

  6. nginx----------前端写了一套带有vue路由的的功能。放到nginx配置的目录下以后,刷新会报404未找到。

    1. 这是根据实际情况来写的. location /h5/activity/wechat/ {            index  index.html index.htm index.php;    ...

  7. Linq To Object 函数介绍

    static void Main(string[] args) { #region Aggregate 把集合中的元素按照表达式依次执行 { IEnumerable<int> list = ...

  8. Java设计模式之动态代理

    关于Proxy: 1,他是所有动态代理的父类: 2,他可以用作创建动态代理类和动态代理对象: 3,JDK中自带的动态代理. 1,首先创建一个接口,方法申明如下: package com.proxy; ...

  9. Task3

    姓名:蔡典 学号:1425052044 班级:信管142 兴趣爱好:电影,美剧,游戏 个人编程能力:较弱,没自己写过代码 码云账号:18809188@qq.com 直接搜索码云然后进入官网输入基本信息 ...

  10. 2018-2019-2 网络对抗技术 20165335 Exp3 免杀原理与实践

    一.免杀原理与基础知识: (1)杀软是如何检测出恶意代码的? 检测特征码:特征码就是一般程序都不会有的代码,而后门有的那种特别的数据,而一个程序,应用有这种代码,数据的话,就直接判定为恶意代码. 主流 ...