`

打包python程序,得到自己的egg

阅读更多

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来安装egg包。egg包是目前最流行的python应用打包部署方式。如何制作和安装egg包?下面我就简单的分析了一下。

1.1   安装setuptools

首先要安装setuptools工具。Debian/Ubuntu下可以直接使用apt安装::
$ sudo apt-get install python-setuptools
手工安装的话,有两种方式:
  • 通过引导程序 ez_setup.py 来安装。这个引导程序会联网下载最新版本setuptools来安装,同时也可以更新本地的setuptools。
    $ wget http://peak.telecommunity.com/dist/ez_setup.py
    $ sudo python ez_setup.py
    更新setuptools::
    $ sudo python ez_setup.py -U setuptools
  • 或者下载setuptools的egg包来安装。可以在 这里 查看最新版本下载。下载完毕以后通过sh安装。
    $ wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
    $ sudo sh setuptools-0.6c11-py2.6.egg
现在就可以使用easy_install命令来安装其他的egg包了。

1.2   制作自己的egg包

总是安装别人的egg包,是不是也想制作自己的egg包呢?好,接下来我们就自己制作一个简单的egg包。 首先建立工程目录egg-demo,初始化一个setup.py文件:
$ mkdir egg-demo
$ cd egg-demo
$ touch setup.py
$ ls
setup.py
下面主要就是填充setup.py。setup.py其实是python工具包distutils的配置文件,setuptools就是基于distutils来做的。 在setup.py中通过setup函数来配置打包信息。首先要引入setuptools的函数setup。setuptools的setup其实就是distutils的setup函数,填写setup.py为以下内容:
$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-

from setuptools import setup

setup()
写到这里,一个空的egg配置文件就写好了。我们可以使用下面命令生成egg包:
$ python setup.py bdist_egg
下面看看究竟生成了什么:
$ ls -F
build/ dist/ setup.py UNKNOWN.egg-info/
可以看到多了三个文件夹。而在dist文件夹下,有一个egg文件:UNKNOWN-0.0.0-py2.6.egg。 产蛋成功!先看看这个egg文件是什么格式的:
$ file dist/UNKNOWN-0.0.0-py2.6.egg
dist/UNKNOWN-0.0.0-py2.6.egg: Zip archive data, at least v2.0 to extract
噢,原来就是一个zip压缩包呀!好,再来看看内部构造:
$ unzip -l dist/UNKNOWN-0.0.0-py2.6.egg
Archive:  dist/KNOWN-0.0.0-py2.6.egg
  Length      Date    Time    Name
---------  ---------- -----   ----
      120  2010-12-06 17:04   EGG-INFO/SOURCES.txt
        1  2010-12-06 17:04   EGG-INFO/top_level.txt
        1  2010-12-06 17:04   EGG-INFO/zip-safe
        1  2010-12-06 17:04   EGG-INFO/dependency_links.txt
      227  2010-12-06 17:04   EGG-INFO/PKG-INFO
---------                     -------
      350                     5 files
只有一个EGG-INFO文件夹,内含五个egg信息文件,没了。 这个egg名称未知,版本0.0.0。这是因为我们在setup里什么也没有设置。 显然,这个egg什么也不能做。 下面给它加点料。 在setup.py中,setup函数接收一系列属性作为配置参数。
  • name name是egg包的名称,也是寻找要打包的文件夹的名称,默认是UNKNOWN。
  • version 版本号,默认0.0.0
  • packages 这里要用到setuptools的另一个函数find_packages,顾名思义,find_packages用来将指定目录下的文件打包。
  • zip_safe 默认是False,这样在每次生成egg包时都会检查项目文件的内容,确保无误。
还有一些描述性的属性,如description,long_description,author,author_email,license,keywords,platform,url等。 填充setup.py文件如下::
$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-

from setuptools import setup, find_packages

setup(
        name = "demo",
        version="0.1.0",
        packages = find_packages(),
        zip_safe = False,

        description = "egg test demo.",
        long_description = "egg test demo, haha.",
        author = "amoblin",
        author_email = "amoblin@ossxp.com",

        license = "GPL",
        keywords = ("test", "egg"),
        platforms = "Independant",
        url = "",
        )
在egg-demo目录下建立和上述name名称相同的目录demo,demo目录下写__init__.py文件:
$ mkdir demo
$ cat demo/__init__.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-

def test():
    print "Hello, I'm amoblin."

if __name__ == '__main__':
    test()
再次生成egg包以后查看egg包信息:
$ python setup.py bdist_egg
$ unzip -l dist/demo-0.1.0-py2.6.egg
Archive:  dist/demo-0.1.0-py2.6.egg
  Length      Date    Time    Name
---------  ---------- -----   ----
      121  2010-12-06 17:30   demo/__init__.py
      344  2010-12-06 17:46   demo/__init__.pyc
      137  2010-12-06 17:46   EGG-INFO/SOURCES.txt
        5  2010-12-06 17:46   EGG-INFO/top_level.txt
        1  2010-12-06 17:46   EGG-INFO/zip-safe
        1  2010-12-06 17:46   EGG-INFO/dependency_links.txt
      227  2010-12-06 17:46   EGG-INFO/PKG-INFO
---------                     -------
      836                     7 files
可以看到,多了一个文件夹demo,里面有我们写的__init__.py。 奉行敏捷原则,先安装了体验一下再说:
$ sudo python setup.py install
running install
install_dir /usr/local/lib/python2.6/dist-packages/
...
creating /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Extracting demo-0.1.0-py2.6.egg to /usr/local/lib/python2.6/dist-packages
demo 0.1.0 is already the active version in easy-install.pth

Installed /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Processing dependencies for demo==0.1.0
Finished processing dependencies for demo==0.1.0
OK!安装完毕!接下来我们就可以直接通过import来使用啦!
$ python -c "from demo import test;test()"
Hello, I'm amoblin.
成功输出!这说明安装正确。我们的一个egg包诞生了。 一般情况下,我们的源程序都放在src目录下,所以接下来将demo文件夹移动到src里。但这样也要修改setup.py文件,修改find_packages函数中参数为'src',同时增加package_dir参数:
packages=find_packages('src'),
package_dir = {'':'src'}
这样告诉setuptools在src目录下找包,而不是原来默认的工程根目录。

1.3   egg文件卸载

以python2.6版本为例,egg文件一般安装在/usr/local/lib/python2.6/dist-packages/目录下,该目录下还有一个easy-install.pth文件,用于存放安装的egg信息。:
$ cd /usr/local/lib/python2.6/dist-packages
$ cat easy-install.pth|grep demo
./demo-0.1.0-py2.6.egg
$ ls -F|grep demo
demo-0.1.0-py2.6.egg/
卸载egg文件很简单,首先将包含此egg的行从easy-install.pth中删除,然后删除egg文件夹即可。

原文地址:http://www.worldhello.net/2010/12/08/2178.html
分享到:
评论

相关推荐

    setuptools制作Python egg的Demo

    在Python的世界里,...通过理解并掌握setuptools,开发者可以更高效地管理自己的Python项目,无论是小型的个人项目还是大型的企业级应用。通过这个Demo,你可以实际操作一遍,进一步熟悉setuptools制作Egg的过程。

    Python程序打包.pdf-综合文档

    打包Python程序时,还可以考虑程序的运行环境配置,如是否需要控制台窗口、是否需要显示图形用户界面(GUI)等。文档中提到了一些相关的命令选项,例如"-F"或"--onefile"选项用于生成单个可执行文件;"-w"或"--...

    Python库 | mux_python-1.6.0-py3.8.egg

    .EGG是Python的一种打包格式,类似于Java的.JAR文件,用于分发和安装Python软件包。这种格式使得开发者可以方便地将多个Python模块打包在一起,并确保它们能够正确地被安装和导入。EGG文件通常包含Python源代码、元...

    利用setuptools打包python程序的方法步骤

    本文将详细介绍如何利用setuptools来打包Python程序。 **一、准备工程文件** 1. 首先,创建一个工程目录,例如名为"leeoo"。 2. 在工程根目录下创建`setup.py`文件,这是setuptools打包的核心配置文件。 3. 创建与...

    Python库 | OpenOPC_Python3x-1.2.1-py3.6.egg

    在Python环境中,`.egg`文件是一种常见的打包格式,可以使用`easy_install`或`pip`进行安装。对于`OpenOPC_Python3x-1.2.1-py3.6.egg`,你可以通过以下命令进行安装: ```bash pip install OpenOPC_Python3x-1.2.1-...

    Python库 | optbuild-0.1.11-py2.7.egg

    Egg是Python的一种包分发格式,它允许开发者将Python应用或库打包成独立的可执行文件,便于部署和分发。optbuild-0.1.11-py2.7.egg就是一个这样的Egg文件,其中包含了optbuild库的所有代码和依赖,解压后可以直接在...

    Python库 | infrastructure-1.9.5-py3.7.egg

    标题中的"Python库 | infrastructure-1.9.5-py3.7.egg"表明这是一个针对Python开发的库,名为“infrastructure”,版本为1.9.5,且已打包成`.egg`格式,适用于Python 3.7版本。`.egg`是Python的一种包分发格式,通常...

    Python库 | wenlincms-1.2-py2.7.egg

    在Python的世界里,"库"(Library)是代码复用的关键,它封装了一系列功能,供开发者在自己的项目中调用。`wenlincms-1.2-py2.7.egg`是一个针对Python 2.7版本的特定库,名为“wenlinCMS”,用于构建内容管理系统...

    Python库 | YABT-1.0.1-py2.5.egg

    YABT-1.0.1-py2.5.egg 是一个针对Python 2.5版本的特定库,它以Egg格式打包,这是一种常见的Python软件分发方式。 Egg格式的出现主要是为了解决Python中的依赖管理问题。Egg文件通常包含了库的源代码、元数据以及...

    Python库 | actions_includes-0.0.post102-py3.9.egg

    这是一种Python的包分发格式,类似于`.zip`,用于打包和部署Python模块。`.egg`文件可以作为独立的可执行单元,直接在Python环境中导入和使用,无需先进行安装。这种格式便于在不污染全局环境的情况下管理依赖,特别...

    Python库 | preapp-0.0.1-py3.6.egg

    - Python库(也称为模块或包)是预编写好的代码集合,可以供其他Python程序使用。它们通常包含一系列函数、类和常量,帮助开发者实现特定功能,如网络通信、数据处理、图形用户界面等。 - Python有丰富的第三方库...

    Python库 | pydeploy-0.2.0-py2.6.egg

    **Python库pydeploy-0.2.0-py2.6.egg详解** 在Python的开发环境中,库(Library)是至关重要的组成部分,它提供了大量的功能模块和预编译的代码,帮助开发者节省时间和精力,专注于核心业务逻辑。`pydeploy`是一个...

    Python库 | kingpin-0.4.0-py2.7.egg

    在“kingpin-0.4.0-py2.7.egg”这个压缩包中,包含的是 Kingpin 库的一个特定版本,即 0.4.0,针对 Python 2.7 版本进行了编译和打包。`.egg` 文件是 Python 的一种软件包分发格式,通常用于安装第三方库。解压这个...

    Python库 | python_hpssa-0.0.13-py2.7.egg

    `.egg`文件是Python的打包格式,它允许开发者将多个Python模块和依赖打包成一个可执行文件,方便安装和分发。在Python社区,`.egg`文件通常通过`easy_install`工具进行安装,它是`setuptools`的一部分,用于简化...

    Python库 | CryDeer-0.2.5-py3.5.egg

    通常,Python库会提供特定的API(应用程序接口)供其他Python程序调用,以实现特定任务,比如网络请求、数据解析、图像处理等。 在Python开发中,选择和使用合适的库是非常关键的,因为这能够极大地提高开发效率和...

    Python库 | uforge_python_sdk-3.8.2.dev20180128-py2.7.egg

    在描述中提到的“解压后可用”,意味着这个.egg文件是一个已经打包好的Python库,用户可以通过解压后直接在Python环境中导入使用。Python的.egg格式是一种常见的包分发方式,它类似于.zip文件,可以包含Python模块、...

    Python库 | snekchek-0.4.4-py3.4.egg

    与`.zip`类似,`.egg`文件可以被Python解释器直接加载,减少了对硬盘上的临时解压的需求,提高了程序的运行效率。`.egg`格式常用于Python的setuptools模块来创建和管理项目依赖。 **snekchek库的功能** 虽然具体的...

    Python库 | LTTL-2.0.4-py2.7.egg

    `.egg`是Python的打包格式之一,它类似于Java的JAR文件,用于收集项目的源代码、依赖和其他资源,形成一个可执行的单元。这种格式便于在不同环境中部署和分发Python应用程序或库,因为它们包含了运行所需的全部内容...

    Python库 | pymacgen-0.42-py3.8.egg

    安装完成后,通过`import pymacgen`即可在Python程序中引入该库,开始利用它的功能。 总之,pymacgen库是Python开发中处理MAC地址的重要工具,其EGG格式的分发方式保证了安装和使用过程的简便性。对于需要处理MAC...

    Python库 | ntier-0.0.8-py3.7.egg

    Egg文件可以被setuptools工具处理,这个工具允许开发者创建、打包和发布Python项目。在Python 3中,虽然pip和wheel格式逐渐成为主流,但Egg格式仍然在某些场景下被使用,尤其是对于那些需要在不支持pip的环境中运行...

Global site tag (gtag.js) - Google Analytics