python egg_怎样制作一个 Python Egg

前段时间在玩 OAuth2,尝试了很多个 Python 封装的 OAuth2 第三方库,感觉都不是很对自己胃口(最无语的是那个叫作 oauth2 的库,居然是 OAuth 1.0 的实现??!!),于是自己写了一个叫作 py-oauth2 的“库”。之所以取这个名字是因为之前用过一个叫 py-trello 的库,以为叫 py-xxx 会很洋气,现在想想真是土死了…

制作打包一个 Python Egg 并部署整个过程还蛮有意思的,下面小教程(这里以制作一个叫作 bee 的 Egg 为例)~

制作

先创建一个项目文件夹:

$mkdir bee-egg # 这个名字可以随便取$cdbee-egg

在里边建一个叫 bee 的文件夹(逻辑比较简单的话可以直接建一个叫作 bee.py 的文件),放业务逻辑代码:

mkdir beetouch bee/__init__.py

其中 bee/init.py 写几行代码:

# -*- coding: utf-8 -*-def hoot():return 'hum hum'def add(x, y):return x + y

在 bee-egg 目录中创建 Egg 的配置文件 setup.py :

#!/usr/bin/env pythonfrom setuptools import setup, find_packagessetup(name = 'bee',version = '0.0.1',keywords = ('bee', 'egg'),description = 'a simple egg',license = 'MIT License',url = 'http://liluo.org',author = 'liluo',author_email = 'i@liluo.org',packages = find_packages(),include_package_data = True,platforms = 'any',install_requires = [],)

当前目录文件结构如下:

bee-egg/bee/__init__.pysetup.py

打包

打包是最重要却又最简单的一步,执行:

python setup.py xxxx

即可。比较主流的2种打包格式:

# 以下所有生成文件将在当前路径下 dist 目录中python setup.py bdist_egg # 生成类似 bee-0.0.1-py2.7.egg,支持 easy_installpython setup.py sdist # 生成类似 bee-0.0.1.tar.gz,支持 pip

当然还有其他非主流格式或者其他选项,可以通过下面这个命令查看:

python setup.py --help-commands

部署到 PyPI

注册 Egg

可以通过 SSH 或者 web form ,SSH 步骤:

$python setup.py registerrunning registerrunning egg_infowriting bee.egg-info/PKG-INFOwriting top-level names to bee.egg-info/top_level.txtwriting dependency_links to bee.egg-info/dependency_links.txtreading manifest file 'bee.egg-info/SOURCES.txt'writing manifest file 'bee.egg-info/SOURCES.txt'running checkWe need to know who you are, so please choose either:1. use your existing login,2. register as a new user,3. have the server generate a new password foryou (and email it to you), or4. quitYour selection [default 1]:Username: liluoPassword:Registering bee to http://pypi.python.org/pypiServer response (200): OKI can store your PyPI login so future submissions will be faster.(the login will be stored in /Users/luo/.pypirc)Save your login (y/N)?y

上传到 PyPI

上传文件也是有 SSH 和 web form 2种方法。

web form: 在浏览器登陆到 PyPI 点击 Your packages 中 Egg 的项目,然后选择某个版本的 files 即可看到上传界面。

SSH:

$python setup.py sdist bdist_egg upload# 这里上传的是 .tar.gz 压缩包和 .egg 文件# 屏幕上大片信息输出,最后会看到running uploadSubmitting dist/bee-0.0.1.tar.gz to http://pypi.python.org/pypiServer response (200): OKSubmitting dist/bee-0.0.1-py2.7.egg to http://pypi.python.org/pypiServer response (200): OK

安装测试

先用 pip 安装:

$pip install beeDownloading/unpacking beeDownloading bee-0.0.1.tar.gzRunning setup.py egg_info forpackage beeInstalling collected packages: beeRunning setup.py install forbeeSuccessfully installed beeCleaning up...

测试:

$python>>> import bee>>> dir(bee)['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'add', 'hoot']>>> bee.add(1,3)4>>> from bee import hoot>>> hoot()'hum hum'

Yeah!现在世界人民都可以用 [bee]http://pypi.python.org/pypi/bee/ 这个 Python Egg 了~

卸载掉用 easy_install 试下:

$pip uninstall beeUninstalling bee:/Library/Python/2.7/site-packages/bee/Library/Python/2.7/site-packages/bee-0.0.1-py2.7.egg-infoProceed (y/n)? ySuccessfully uninstalled bee$easy_install beeSearching forbeeReading http://pypi.python.org/simple/bee/Reading http://liluo.orgBest match: bee 0.0.1Downloading http://pypi.python.org/packages/2.7/b/bee/bee-0.0.1-py2.7.egg#md5=6b5a719f1ca42367fb05d1e3eb45fbe5Processing bee-0.0.1-py2.7.eggMoving bee-0.0.1-py2.7.egg to /Library/Python/2.7/site-packagesAdding bee 0.0.1 to easy-install.pth fileInstalled /Library/Python/2.7/site-packages/bee-0.0.1-py2.7.eggProcessing dependencies forbeeFinished processing dependencies forbee

可以再重做一下上面的测试,验证一下。

Tips

pip install xxxx 时默认只会找对应的压缩包文件

当时我用 easy_install 安装没问题,但是 pip 每次都说找不到资源。我盯着 @hongqn 在 PyPI 上的 CaoE 足足2分钟才反应过来,原来它是需要一个压缩包格式的文件。

setup.py 中调用当前目录的文件一定要加 MANIFEST.in 并将调用文件 include 进来

使用 python setup.py sdist 打包时,如果 setup.py 调用了当前目录中的文件(如README.rst):

long_description = open('README.rst').read()

一定要在增加 MANIFEST.in 文件并将调用文件 include 进来,否则将导致用户在 pip install 时报文件找不到的错误,示例:

$cat MANIFEST.ininclude README.rst

偶尔去看一下自己的 Egg 在 PyPI 上的下载数也挺欢乐的

Version: 0.0.3py-oauth2-0.0.3.tar.gz(251)py_oauth2-0.0.3-py2.7.egg(218)Version: 0.0.2py-oauth2-0.0.2.tar.gz(376)py_oauth2-0.0.2-py2.6.egg(435)py_oauth2-0.0.2-py2.7.egg(304)Version: 0.0.1py_oauth2-0.0.1-py2.6.egg(478)

END

### 回答1: nstall" 是用来做什么的? 这个命令是用来安装 Python 包的。在执行这个命令之前,需要先下载并解压缩 Python 包,然后进入包的根目录,执行命令即可安装该包。这个命令会将包安装到 Python 的 site-packages 目录下,以便在 Python 中使用该包。 ### 回答2: 指令 "python setup.py egg_i" 是用于在Python项目中创建和构建egg文件的命令。Egg文件是一种用于分发和安装Python软件包的文件格式。通过这个命令,我们可以将项目的源代码、依赖库和其他必要文件打包成一个egg文件,方便分享和安装。 这个命令的具体作用有以下几点: 1. 它会在当前目录执行setup.py文件,setup.py是一个用于配置Python安装和分发的脚本文件。 2. 使用egg_info选项,该命令会生成一个dist文件夹,并在该文件夹中创建一个包含项目元信息的egg-info目录。 3. egg-info 目录中包含了项目的名称、版本、作者、依赖关系等元信息,这些信息可以帮助正确地安装和使用项目。 4. Egg文件还可以包含项目的源代码、资源文件和其他必要的文件,以便于分发和安装。 5. 构建完成后,可以使用egg文件将项目部署到其他机器上,只需简单地将egg文件复制到目标机器,然后使用pip等工具进行安装即可。 总结来说,"python setup.py egg_i" 是一个用于创建和构建Python项目egg文件的命令,通过将项目的源代码和必要文件打包成egg文件,方便项目的分享和安装。 ### 回答3: command "python setup.py egg_info" 是一个用于 Python 的命令行指令。这个命令是 setuptools 包的一部分,通常在安装第三方 Python 包时使用。 "egg_info" 是一个 setuptools 的功能,用于创建一个包含项目元数据的 ".egg-info" 目录。在这个目录下,包括了一些关于包名、作者、版本、依赖等信息的文件。这些元数据文件可以用来描述和管理项目的元信息。 通过在命令行中运行 "python setup.py egg_info",可以生成这个 ".egg-info" 目录。一些常见的用法是在安装第三方包之前先运行这个命令,这样可以确保项目的元数据被正确创建和保存。同时,这个命令也常用于开发环境中,当需要更新或修改项目的元数据时。 总结而言,command "python setup.py egg_info" 是用于在 Python 项目中创建 ".egg-info" 目录并管理项目的元数据的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值