python的egg文件有点像java中的jar文件,是一个工程打包文件,便于安装部署,仅此一点,给多少pythoner带来了多少激动。

如何制作egg文件呢?see官方文档http://peak.telecommunity.com/DevCenter/PythonEggs,

到http://pypi.python.org/pypi/setuptools下载setuptools包,然后安装:

python setup.py

1.制作egg文件

下面开始egg文件的制作:

在要打包的文件夹父目录中新建setup.py

#setup.py

view plaincopy to clipboardprint?

01.#coding=utf8

02.

03.from setuptools import setup, find_packages

04.

05.setup(

06.    name = "eggtest",

07.    version = "0.1",

08.    packages = find_packages(),

09.

10.    description = "egg test demo",

11.    long_description = "egg test demo",

12.    author = "lidehong",

13.    author_email = "idehong@gmail.com",

14.

15.    license = "GPL",

16.    keywords = ("test", "egg"),

17.    platforms = "Independant",

18.    url = "http://blog.csdn.net/hong201/",

19.

20.)

#coding=utf8

from setuptools import setup, find_packages

setup(

name = "eggtest",

version = "0.1",

packages = find_packages(),

description = "egg test demo",

long_description = "egg test demo",

author = "lidehong",

author_email = "idehong@gmail.com",

license = "GPL",

keywords = ("test", "egg"),

platforms = "Independant",

url = "http://blog.csdn.net/hong201/",

)

name:包名

version:版本

packages :打包的文件

description:描述信息

author:作者

url:下载地址

执行python setup.py bdist_egg命令之后,在dist目录下会生成egg文件,egg文件其实只是一个压缩包。

制作其他安装文件:

python setup.py build  # 编译

python setup.py sdist  # zip格式包

python setup.py bdist_wininst # exe格式包

python setup.py bdist_rpm # rpm格式包

注: 查看更多命令:

执行 python setup.py --help-commands后可以看到相关可用命令

Standard commands:

build             build everything needed to install

build_py          "build" pure Python modules (copy to build directory)

build_ext         build C/C++ extensions (compile/link to build directory)

build_clib        build C/C++ libraries used by Python extensions

build_scripts     "build" scripts (copy and fixup #! line)

clean                clean up temporary files from 'build' command

install               install everything from build directory

install_lib          install all Python modules (extensions and pure Python)

install_headers   install C/C++ header files

install_scripts     install scripts (Python or otherwise)

install_data       install data files

sdist                   create a source distribution (tarball, zip file, etc.)

register              register the distribution with the Python package index

bdist                  create a built (binary) distribution

bdist_dumb       create a "dumb" built distribution

bdist_rpm          create an RPM distribution

bdist_wininst     create an executable installer for MS Windows

upload              upload binary package to PyPI

2.egg文件安装

羡慕cetos的yum,羡慕Ubuntu的apt-get,羡慕ruby的gem,现在python的egg成熟了,强大了,不用再羡慕了。

如果已经把egg文件下载到了本地,则easy_install xxx.egg就ok了,如何有依赖,则会自动下载安装,省心了。如果没有下载下来,网络安装更爽,直接 easy_install 包名,此时喝点咖啡休息一下,回过神来时已经安装好了。唯一一点不好的感觉是,easy_install现在还不支持自动卸载,网上流传的用 easy_install -m xxx来卸载,是不行了,这个命令式用来安装同一个包的多个版本的。

3.egg文件卸载

目前不能自动删除egg包,只能手动删除,而手动删除很简单

vim $python_path/Lib/site-packages/easy-install.pth

删除到egg包名所在行,

:wq

重启python环境。

这样做了之后egg包还是遗留下来了,没有被清除,不过这个不用担心,egg包已经不能被引用到python环境了,因为包名中不能有连字符-,而egg文件名中却包含连字符。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hong201/archive/2009/05/28/4219035.aspx

-------------------------------

一 setuptools 和easy_install

setuptools:setuptools 是一组由PEAK(Python Enterprise Application Kit)开发的 Python 的 distutils 工具的增强工具,可以让程序员更方便的创建和发布 Python的egg 包,特别是那些对其它包具有依赖性的状况。 由 setuptools 创建和发布的包看起来和基于 distutils 发布的包没什么不同。最终用户不需要事先安装 setuptools 甚至根本不需要知道 setuptools 的存在,而程序员也不需要附上完整的 setuptools,只需要包含一个大小约 8K 的ez_setup.py脚本作为启动模块,就可以在最终用户没有安装适当版本的 setuptools 时让这些包自动下载和安装 setuptools。

easy_install: 常使用python的人员,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来自动地从http://pypi.python.org/simple/来安装egg包,相当于perl中的cpan或PPM。

二 windows上安装setuptool

如果以前曾经安装旧版的setuptools,则在安装之前需要将系统中的site-packages目录(以及任何其他sys.path目录)下的所有setuptools*.egg和setuptools.pth文件删除。

如果之前也是使用.exe安装程序安装的setuptools,则安装前要在“添加/删除程序”中卸载旧的版本。

安装完毕后,在Python的Scripts子目录下就会出现easy_install.exe程序。 确保将这个目录(例如 C:\Python26\Scripts)加入 PATH 环境变量。

方法2: 手工安装

卸载旧版的方法同 1 相同。

三 Linux上的setuptool的安装

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的使用

1) 使用easy_install来自动安装egg包

比如说要安装Python的MYSQL支持,可以执行如下命令,系统会自动在pypi网站列表里查找相关软件包:easy_install MySQL-python。

通过easy_install安装软件,相关安装信息会保存到easy-install.pth文件里,路径类似如下形式:C:\Python25\Lib\site-packages\easy-install.pth。

如果想删除通过easy_install安装的软件包,比如说:MySQL-python,可以执行命令:easy_install -m MySQL-python。

2)将egg安装包下载到本地安装

进入到安装包的目录,执行python setup.py install

3)如果easy_install安装某模块有错的话,则可以自己到http://pypi.python.org/simple/python-ldap/下载,然后使用python setup.py install来安装。

有的时候easy_install并不能够很好地自动安装,比如我安装ldap:easy_install.exe python-ldap, easy_install应该到http://pypi.python.org/simple/python-ldap/下下载python-ldap-2.3.8.win32-py2.6.exe,但是easy_install却找到了python-ldap 2.3.12,最总导致安装有错。(不知道是不是因为pypi上没有64bit的egg,我的系统是64bit的,但是我的python是32bit的啊)

五 egg的制作

egg包是目前最流行的python应用打包部署方式。如何制作和安装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目录下找包,而不是原来默认的工程根目录。

最后我们来手动的卸载以下刚才安装的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文件夹即可。

参考:

python怎么安装本地的egg_python的egg包的安装和制作]相关推荐

  1. python怎么安装本地的egg_python egg怎么安装

    经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令.easy_install是由PEAK(Python Enterprise Applic ...

  2. python egg_Python的egg包

    http://www.tuicool.com/articles/JBZNBzJ 尽管现在有了wheel这类更为"先进"的包装方式,但无可否认的是egg包+easy_install方 ...

  3. Python 安装第三方库,模块和包的安装方法

    在python中已经内置了很多的有用的模块,只要安装了python的开发工具,这些模块就可以立刻使用了.而在实际python开发的过程中,除了python内置的模块外,python还有大量的第三方的库 ...

  4. win10此语言无法安装在此计算机,win10语言包无法安装,bwin

    win10添加语言包出错: 0x800f081e 该怎么办?在win10系统中我们可以随意添加语言包,在win10中添加自己喜欢的语言.最近使用win10系统的用户称在win10中添加语言包出现了0x ...

  5. suse linux 软件包安装,SUSE Linux 11系统rpm包离线安装GCC

    SUSE Linux 11系统rpm包离线安装GCC 1.问题显示 编译失败 python2.6环境下编译pycrypto-2.6.1 src/hash_template.c:360: warning ...

  6. pycharm执行python时报错,Intel的mkl服务包如何安装?

    报错信息 D:\anaconda\lib\site-packages\numpy\__init__.py:140: UserWarning: mkl-service package failed to ...

  7. jenkins安装与配置---window,mis包直接安装

    https://my.oschina.net/aibinxiao/blog/1457218 Jenkins在Windows下的安装与配置 已经在https://jenkins.io/下载好了Windo ...

  8. mysql 5.7源码包安装教程_MYSQL5.7源码包编译安装

    Centos下用cmake编译安装MySQL 5.7 安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-devel cmake 下载相应源码包 cd / ...

  9. linux rpm包,安装路径查看及改变rpm包默认安装路径

    查看: easwy:~$ rpm -qpl ext3grep-0.10.0-1.el5.rf.i386.rpm/usr/bin/ext3grep/usr/share/doc/ext3grep-0.10 ...

最新文章

  1. 马士兵java note 5
  2. 液态金属和Liquidmetal公司
  3. HTTP 2.0 协议
  4. 为什么要将服务或者数据部署多份?
  5. php定时任务管理,Zebra-Crontab
  6. java xml开发_JavaWeb开发(XML简介)---3
  7. 多目标数据关联基本方法
  8. vue cli3.0 解决跨域问题和axios等问题,配合Django
  9. windows系统中nul文件删不掉,文件夹无法删除出现无法删除nul参数不正确,MS-DOS命令无效,等各种难以删除的文件或者文件夹
  10. 腾讯实习生面试-笔试
  11. python创建一个列表、用于存储同学姓名_python学习日记04,Python
  12. Mac电脑:您的安全性偏好设置仅允许安装来自App Store和被认可的开发者的应用(解决方法)
  13. Android Studio editText去掉下划线的办法
  14. H264视频高压心得——兼容华为U8800+(硬解720P)
  15. MySQL数据库管理系统原理
  16. 并查集——银河英雄传说
  17. 詹姆斯高斯林_Google / Oracle上的高斯林
  18. css3实现无限旋转360度
  19. Windows快捷键的使用
  20. Windows效率神器

热门文章

  1. 反射 BindingFlags.IgnoreCase 的用法
  2. df命令 du命令 磁盘分区 parted分区gpt格式
  3. 我的Python心路历程 第十期 (10.2 通达信股票day数据转化为csv)
  4. 高端大气的的企业站通用模板
  5. Windows命令行简易入门
  6. html相对定位和绝对定位
  7. RK 平台MIPI 点屏注意事项
  8. Python画图之浪漫樱花
  9. 【逻辑书单】①《一本小小的蓝色逻辑书》50条核心法则梳理(42~50)
  10. 不畏:智能调度的核心是对业务数据的价值挖掘和有效利用