您的位置:首页 > 编程语言 > Python开发

python之封包 (转)

2015-06-19 16:19 645 查看
关于python的学习我按照自己的兴趣来,上次偶然想看到自己打包的文件如何,就看了一点资料,加上网上的一些文章,花了几天时间整理如下,分享如下
一、python封包简介Python的第三方模块已经越来越多,在开发后期为了便于传播,肯定要将开发源代码进行打包整理,那么python中关于源代码可以封包成模块,也可以在封装成在Windows下可执行的exe程序,也可以封装成rpm包,那么关于在模块的安装可以分为以下几种: 1、 大多时候我就写一个文件,那么这样的文件制作成模块之后,只需要拷贝到$python_dir/lib即可完成导入2、 假如偶尔写点多个文件的模块,想进行导入,那么也OK,python自带的distutils库已经可以在不同的平台上打包发布的代码3、 还有一种egg文件,需要下载ez_setup.py并且安装,然后直接可以执行easy_install xxx.egg进行更为便捷的封装 二、封包方式1、distutils---此python自带库的作用有两方面:一方面, distutils 希望让最终用户觉得安装新模块、包和工具的过程一致而轻松;另一方面, distutils 还希望让新模块、包和工具的开发者觉得创建这些容易安装的分发包很轻松。我们希望发布的软件包有固定的名称、版本、授权、作者、联系方式等等,并且希望出现问题时候可以查看自带的README文件或者安装文件得以解决,这么多东西是不是看起来很头疼,其实distutils已经帮我们做好这一切,我们只需要给与一份安装清单,告知distutils即可,通常,都会用setup.py来命名,而通常setup.py也是具有固定的格式的,下面就是一份简单的setup.py文件: 点击(此处)折叠或打开from distutils.core import setup
setup(name='Sos',version='1.0',description='My test packet',author='zhangsan',author_email='zhangsan@haha.com',url='http://zhangsan.com',py_modules=['sos'],)---其实每个前面都是需要的选项,更多的参数请参考http://docs.python.org/release/2.7/distutils/apiref.html#distutils.core.setup,有了这份清单之后,我们就可以开始将我们的py文件进行打包了,使用方法如下#python setup.py build # 编译#python setup.py install #安装#python setup.py sdist #生成压缩包(zip/tar.gz)#python setup.py bdist_wininst #生成NT平台安装包(.exe)#python setup.py bdist_rpm #生成rpm包#python setup.py bdist --help-formats #查看支持的封包格式 ---当我们制作好一份自己的sos.py文件并且已经写好setup.py的时候,根据当前所在的平台,例如现在在NT的平台下,那么执行cmd命令d:\Python27\python.exe setup.py sdist这里我的python是安装位置是在d:\Python27\,这里将会在setup.py目录下生成一个dist的子目录,里面就包含了生成的Sos-1.0.zip,到此我们的一个包就做完了d:\Python27\python.exe setup.py bdist_wininst这里将会生成build和dist两个文件夹,dist中包含生成的windows可执行exe程序 ---当我们拿到一份打包的文件模块的时候name如果是exe的,那么在NT平台下双击安装如果是zip的压缩包,那么在linux平台下,则直接解开执行#python setup.py install即可
2、py2exepy2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,假如你临时写了一个工具,现在想演示,但是演示的地方虽然是一台没有安装python环境windows的机器,甚至连python是神马都不知道的人,想直接通过双击exe安装程序安装,那么可以办到么?当然可以~官方地址:http://www.py2exe.org/首先、你必须先安装这个库,现在官方有提供windows下exe安装程序,选择和你的python安装版本对应的安装即可,这里我的版本是python 2.7 的32位,会相应安装一些实例,这些实例放在$python\lib\site-packages\py2exe\samples目录下 其次、必须需要一个源文件,假设现在我的源文件为hello.py,放在D:\workspace\hello.py也需要提供一份目录清单,我们同样用setup.py命名,同样也存放在D:\workspace\setup.py,下面开始编写setup.py点击(此处)折叠或打开from distutils.core import setupimport py2.exe
setup(console=["hello.py"])这样文件保存后,我们在dos窗口进行操作 d:\Python27\python.exe setup.py py2exe,执行命令后当前目录中有两个文件夹build和dist,其中build中是临时文件,dist中有生成的hello.exe文件和必要的库文件,发布时将整个dist目录打包即可,dist文件清单如下:1、一个或多个exe文件。2、python##.dll。 //##代表你当前的python版本3、几个.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo 一般情况下,这样就生成了我们需要的exe执行文件,但是有时候也会报如下错误,“ msvcp90.dll: no such file or directory”,这就意为着我们缺少一个当前系统的dll文件,我们将setup.py修改如下 点击(此处)折叠或打开from distutils.core import setupimport py2exe
setup(console=["hello.py"],name="Sos",options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } })另外,如果你想创建的exe程序是一个图形的用户界面的话,就需要做如下改动了,把console修改为windows即可,即如下 点击(此处)折叠或打开from distutils.core import setupimport py2exe
setup(windows=["hello.py"],name="Sos",options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } })
现在经常安装软件远不止一个文件,还包括依赖文件,图标,帮助文档等,这些都需要打包起来形成一个比较健全完整的文档进行发布,那么OK,py2exe也可以轻松帮你完成如下: 点击(此处)折叠或打开from distutils.core import setupimport globimport py2exe
setup(console=["hello.py"],name="Sos",data_files=[("picture",["aaa.gif", "bbb.gif"]),("fonts",glob.glob("fonts\\*.fnt"))],)
执行之后会在dist目录下生成picture和fonts目录,并且将aaa.gif和bbb.gif拷贝到相应的目录下,这样一个打包文件也就完成了。 后来查看了网上相关的资料之后,发觉其实一份完整的setup.py文件还包含optional和include选项,例如:
点击(此处)折叠或打开#!/usr/bin/python#filename:setup.py#-*-coding: UTF-8-*-
from distutils.core import setupimport py2exe
includes = ["encodings", "encodings.*"]#要包含的其它库文件
options = {"py2exe":{"compressed": 1, #开启压缩"optimize": 2,"ascii": 1,"includes":includes,"bundle_files": 1 #所有文件打包成一个exe文件 }}setup(version = "1.0",description = "My test packet",name = "Sos",options = options,zipfile=None, #不生成library.zip文件console=[{"script": "hello.py", "icon_resources": [(1, "hello.ico")] }] #源文件,程序图标) bundle_files:值为1表示pyd和dll文件会被打包到exe文件中,且不能从文件系统中加载python模块;值为2表示pyd和dll文件会被打包到exe文件中,但是可以从文件系统中加载python模块;
3、easy_install此类方法还没有使用过,所以以后用的话会进行更新
转载自:http://blog.sina.com.cn/s/blog_8cf0ba6c01016hea.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: