博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python包管理工具setuptools详解及entry point
阅读量:5256 次
发布时间:2019-06-14

本文共 2475 字,大约阅读时间需要 8 分钟。

1.什么是setuptools?

setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建包时,并不需要已安装setuptools,只要一个启动模块即可。
功能亮点:
利用EasyInstall自动查找、下载、安装、升级依赖包
创建Python Eggs
包含包目录内的数据文件
自动包含包目录内的所有的包,而不用在setup.py中列举
自动包含包内和发布有关的所有相关文件,而不用创建一个MANIFEST.in文件
自动生成经过包装的脚本或Windows执行文件
支持Pyrex,即在可以setup.py中列出.pyx文件,而最终用户无须安装Pyrex
支持上传到PyPI
可以部署开发模式,使项目在sys.path中
用新命令或setup()参数扩展distutils,为多个项目发布/重用扩展
在项目setup()中简单声明entry points,创建可以自动发现扩展的应用和框架
总之,setuptools就是比distutils好用的多,基本满足大型项目的安装和发布

2.安装setuptools

1) 最简单安装,假定在ubuntu下
sudo apt-get install python-setuptools
2) 启动脚本安装
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py

3.创建一个简单的包

有了setuptools后,创建一个包基本上是无脑操作
cd /tmp
mkdir demo
cd demo

4、在demo中创建一个setup.py文件,写入如下内容:

from setuptools import setup, find_packages
setup(
name = "demo",
version = "0.1",
packages = find_packages(),
)

5、执行python setup.py bdist_egg即可打包一个test的包

demo
|-- build
| -- bdist.linux-x86_64 |-- demo.egg-info | |-- dependency_links.txt | |-- PKG-INFO | |-- SOURCES.txt |-- top_level.txt
|-- dist
| -- demo-0.1-py2.7.egg-- setup.py
在dist目录下生成的是egg包
生成的.egg文件,改成zip扩展名,解开看看先
upzip -l dist/demo-0.1-py2.7.egg

Archive: dist/demo-0.1-py2.7.egg

Length Date Time Name
--------- ---------- ----- ----
1 2013-06-07 22:03 EGG-INFO/dependency_links.txt
1 2013-06-07 22:03 EGG-INFO/zip-safe
120 2013-06-07 22:03 EGG-INFO/SOURCES.txt
1 2013-06-07 22:03 EGG-INFO/top_level.txt
176 2013-06-07 22:03 EGG-INFO/PKG-INFO
--------- -------
299 5 files
包里面是一系列自动生成的文件

6、setup() 函数可用参数解释

name
egg name
name = "HelloWorld"

version = "0.1"

版本号
version = "0.1"

packages

所要包含的package(包含__init__.py的文件夹),find_packages() 函数在后面会有解释
packages = find_packages()
package_dir
所要搜索的 package 路径,这个需要与 find_packages() 中的参数成对使用,详见后面的测试

scripts

指定python源码文件
scripts = ['say_hello.py']

install_requires

install_requires = ['docutils>=0.3']

package_data

所要包含的包中的文件,格式为:
package name : [file name],当 package name 为空时,代表所有包,file name 可以为 .txt 之类的表达。具体可以看右边的例子
package_data = {
If any package contains
.txt or .rst files, include them用如下命令:
'': ['.txt', '.rst'],
And include any
.msg files found in the 'hello' package, too用如下命令:
'hello': ['*.msg']
}
author
author = "Me"
author_email

author_email = "me@example.com"

description

description = "This is an Example Package"

license

license = "PSF"

keywords

keywords = "hello world example examples"

url

项目主页(home page)
url = "http://example.com/HelloWorld/"

转载于:https://www.cnblogs.com/potato-chip/p/9077586.html

你可能感兴趣的文章
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>