python中setup安装包

官方链接:

http://docs.python.org/release/2.7/distutils/apiref.html#distutils.core.setup

转自:http://blog.csdn.net/carolzhang8406/article/details/6925745

python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。

一、编写模块
进入项目目录
#cd /home/pysetup 
#vi foo.py
class MyClass():      def __init__(self):          self.blog = "http://blog.liuts.com"      def printblog(self):          print self.blog      def printBblog(self):          print self.blog.swapcase() 
二、编写setup.py
#vi setup.py
from distutils.core import setup setup(name='Myblog',        version='1.0',        description='My Blog Distribution Utilities',        author='Liu tiansi',        author_email='liutiansi@gmail.com',        url='http://blog.liuts.com',        py_modules=['foo'],      ) 
更多参数说明见表:

三、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包

或者直接"bdist 包格式",格式如下:
 
#python setup.py bdist --help-formats 
   --formats=rpm       RPM distribution
   --formats=gztar     gzip'ed tar file
   --formats=bztar     bzip2'ed tar file
   --formats=ztar     compressed tar file
   --formats=tar       tar file
   --formats=wininst   Windows executable installer
   --formats=zip       ZIP file

四、打包
#python setup.py sdist
 
running sdist

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

writing manifest file 'MANIFEST'
creating Myblog-1.0
making hard links in Myblog-1.0...
hard linking foo.py -> Myblog-1.0
hard linking setup.py -> Myblog-1.0
creating dist
tar -cf dist/Myblog-1.0.tar Myblog-1.0
gzip -f9 dist/Myblog-1.0.tar
removing 'Myblog-1.0' (and everything under it)


提示两条warning可以忽略,不影响打包,当然一个完善的项目必须有README及MANIFEST.in(项目文件清单)文件。
#ls dist

Myblog-1.0.tar.gz

五、安装
#tar -zxvf Myblog-1.0.tar.gz
#cd Myblog-1.0.tar.gz
#python setup.py install (此命令大家再熟悉不过了)
 
running install
running build
running build_py
creating build/lib.linux-x86_64-2.6
copying foo.py -> build/lib.linux-x86_64-2.6
running install_lib
copying build/lib.linux-x86_64-2.6/foo.py -> /usr/local/lib/python2.6/dist-packages
byte-compiling /usr/local/lib/python2.6/dist-packages/foo.py to foo.pyc
running install_egg_info
Writing /usr/local/lib/python2.6/dist-packages/Myblog-1.0.egg-info


六、测试

>>> from foo import MyClass
>>> app=MyClass()
>>> app.print printblog()
>>> app.printblog()
http://blog.liuts.com
>>> app.printBblog()
HTTP://BLOG.LIUTS.COM
>>>





如何制作Python安装模块

Python模块的安装方法:
    1. 单文件模块
                直接把文件拷贝到$python_dir/lib

   2. 多文件模块,带setup.py
                 python setup.py install          

   3. egg文件,类似Java的jar
                 1) 下载ez_setup.py,运行python ez_setup    
                 2)  easy_install *.egg


虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。

setup.py文件的使用:
% python setup.py build #编译
% python setup.py install    #安装
% python setup.py sdist     #制作分发包
% python setup.py bdist_wininst  #制作windows下的分发包
% python setup.py bdist_rpm

setup.py文件的编写
setup.py中主要执行一个 setup函数,该函数中大部分是描述性东西,最主要的是packages参数,列出所有的package,可以用自带的find_packages来动态获取package。所以setup.py文件的编写实际是很简单的。



简单的例子:

setup.py文件
from  setuptools  import  setup, find_packages

setup(
      name
= " mytest " ,
      version
= " 0.10 " ,
      description
= " My test module " ,
      author
= " Robin Hood " ,
      url
= " http://www.csdn.net " ,
      license
= " LGPL " ,
      packages
=  find_packages(),
      scripts
= [ " scripts/test.py " ],
      )
mytest.py
import  sys

def  get():
    
return  sys.path

scripts/test.py
import  os

print  os.environ.keys()

setup中的scripts表示将该文件放到 Python的Scripts目录下,可以直接用。

OK,简单的安装成功,可以运行所列举的命令生成安装包,或者安装该python包。

本机测试成功(win32-python25)!



转自:http://blog.chinaunix.net/uid-27133922-id-3346387.html

关于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文件:

点击(此处)折叠或打开

  1. from distutils.core import setup

  2. setup(
  3.     name='Sos',
  4.     version='1.0',
  5.     description='My test packet',
  6.     author='zhangsan',
  7.     author_email='zhangsan@haha.com',
  8.     url='http://zhangsan.com',
  9.     py_modules=['sos'],
  10. )

---其实每个前面都是需要的选项,更多的参数请参考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、py2exe

py2exe是一个将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

点击(此处)折叠或打开

  1. from distutils.core import setup
  2. import py2.exe

  3. 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修改如下

点击(此处)折叠或打开

  1. from distutils.core import setup 
  2. import py2exe 
  3.   
  4. setup( 
  5.     console=["hello.py"],
  6.     name="Sos", 
  7.     options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } } 
  8. )

另外,如果你想创建的exe程序是一个图形的用户界面的话,就需要做如下改动了,把console修改为windows即可,即如下

点击(此处)折叠或打开

  1. from distutils.core import setup 
  2. import py2exe 
  3.   
  4. setup( 
  5.     windows=["hello.py"],
  6.     name="Sos", 
  7.     options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } } 
  8. )


现在经常安装软件远不止一个文件,还包括依赖文件,图标,帮助文档等,这些都需要打包起来形成一个比较健全完整的文档进行发布,那么OK,py2exe也可以轻松帮你完成如下:

点击(此处)折叠或打开

  1. from distutils.core import setup 
  2. import glob 
  3. import py2exe 
  4.   
  5. setup(console=["hello.py"],
  6.      name="Sos", 
  7.      data_files=[("picture",["aaa.gif", "bbb.gif"]), 
  8.                   ("fonts",glob.glob("fonts\\*.fnt"))], 
  9. )

执行之后会在dist目录下生成picture和fonts目录,并且将aaa.gif和bbb.gif拷贝到相应的目录下,这样一个打包文件也就完成了。

后来查看了网上相关的资料之后,发觉其实一份完整的setup.py文件还包含optional和include选项,例如:


点击(此处)折叠或打开

  1. #!/usr/bin/python
  2. #filename:setup.py
  3. #-*-coding: UTF-8-*-

  4. from distutils.core import setup
  5. import py2exe

  6. includes = ["encodings", "encodings.*"] 
  7. #要包含的其它库文件

  8. options = {"py2exe":
  9.     {"compressed": 1,     #开启压缩
  10.      "optimize": 2,
  11.      "ascii": 1,
  12.      "includes":includes,
  13.      "bundle_files": 1         #所有文件打包成一个exe文件 }
  14.     }
  15. setup( 
  16.     version = "1.0", 
  17.     description = "My test packet", 
  18.     name = "Sos", 
  19.     options = options, 
  20.     zipfile=None, #不生成library.zip文件
  21.     console=[{"script": "hello.py", "icon_resources": [(1, "hello.ico")] }]      #源文件,程序图标
  22.     )

bundle_files:值为1表示pyd和dll文件会被打包到exe文件中,且不能从文件系统中加载python模块;

值为2表示pyd和dll文件会被打包到exe文件中,但是可以从文件系统中加载python模块;


3、easy_install

此类方法还没有使用过,所以以后用的话会进行更新








  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值