纯Python包发布setup脚本编写示例
如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多。即使你的模块并不在一个包内,这种做法也行的通;你可以告诉Distutils从根包(root package)处理模块,并且它工作起来和其他任意的包一样(除非你不需要拥有一个__init__.py文件)。
例1.1 根包发布
文件结构为:
<root>/
setup.py
foo.py
bar.py
setup脚本可以这样写:
from distutils.core import setup
setup(name='foobar',
version='1.0',
packages=[''],
)
(空字符串表示根包)
例1.2 根包发布(模块在子目录)
如果你把上例中两个模块文件移入到一个子目录,但是它们仍在根包中,如:
<root>/
setup.py
src/
foo.py
bar.py
那么将仍然指定根包,但是你必须告诉Distutils那些源文件在哪里:
from distutils.core import setup
setup(name='foobar',
version='1.0',
package_dir={'': 'src'},
packages=[''],
)
例2.1 包发布
如果你想发布在同一包中(或者在子包中)的多个模块。比如,如果foo 和bar 模块属于包foobar,文件结构如下:
<root>/
setup.py
foobar/
__init__.py
foo.py
bar.py
实际上这是Distutils默认的层次,一个精简的setup脚本可以这样写:
from distutils.core import setup
setup(name='foobar',
version='1.0',
packages=['foobar'],
)
例2.2 包发布(模块所在目录名不是包名)
如果你想将模块放入不是包名的目录,那么你还需要用到package_dir参数。例如,如果在foobar 包中src 目录拥有多个模块:
<root>/
setup.py
src/
__init__.py
foo.py
bar.py
合适的setup脚本将会是:
from distutils.core import setup
setup(name='foobar',
version='1.0',
package_dir={'foobar': 'src'},
packages=['foobar'],
)
例2.3 包发布(包存在于根目录)
或者你想把包放在发布根目录,如:
<root>/
setup.py
__init__.py
foo.py
bar.py
这种情况下你的setu脚本将会是:
from distutils.core import setup
setup(name='foobar',
version='1.0',
package_dir={'foobar': ''},
packages=['foobar'],
)
(空字符串同样也代表当前目录)
例2.4 包发布(多子包)
如果你有多个子包,它们必须被显在地列举在packages参数中,但是其他任何在package_dir参数中的实体自动扩展到子包。(换句话说,Distutils并不浏览你的源文件树(source tree),而是通过寻找__init__.py文件来计算相应Python包的目录。)因此,如果默认的层次有一个子包:
<root>/
setup.py
foobar/
__init__.py
foo.py
bar.py
subfoo/
__init__.py
blah.py
那么相应的setup脚本将会是:
from distutils.core import setup
setup(name='foobar',
version='1.0',
packages=['foobar', 'foobar.subfoo'],
)
注意:发布一个包,就是将该包所在目录所有模块全部发布。那么我们就不能只发布包内部分模块。
例如,文件结构如下:
<root>/
setup.py
sub_package1/
__init__.py
sub_model1
sub_model2
sub_package2/
__init__.py
sub_model3
使用Distutils,我们无法在发布包sub_packe1和sub_package2的同时,不发布sub_model2模块。
纯Python包发布setup脚本编写示例的更多相关文章
- 实战教程:如何将自己的Python包发布到PyPI上
1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...
- 将python包发布到PyPI和制作whl文件
参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...
- 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例
老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例 MonkeyRunner这个类可以说是编写monkeyrunner脚 ...
- 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1
老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个“增加日记”的示例中,我们并没有看到日记是否真的增加成功 ...
- 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- python遍历目录文件脚本的示例
例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python# -*- coding: utf-8 ...
- 第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...
- 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 4
第七步:保存新增加日记 代码3-2-7 增加日记-保存日记 #Step7: Save the note by touch on the "save" menu entry by c ...
随机推荐
- How Many Trees?[HDU1130]
How Many Trees? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- ibatis 灵活的配置文件
<select id="selectAllMmsRepairBySth" parameterClass="hashmap" resultMap=" ...
- JSTL 的 if else : 有 c:if 没有 else 的处理
jstl的c:if 没有else 想要实现if...else...: 可以用下面的解决 -------------------------------------------------------- ...
- BZOJ3796 : Mushroom追妹纸
将S1与S2用#号拼接在一起形成S串 将S3与S串跑KMP求出S3在S串中每次出现的位置l[i] 对于S串每个后缀i,求出f[i]表示该串不包含S3串的最长前缀 然后求出S串的后缀数组 先从小到大扫描 ...
- apple个人开发者证书无线发布app的实现(转)
解释一下这标题:apple个人开发者证书无线发布app的实现,也就是说不经过发布到app store,直接在ios设备上安装app,注:ios设备不需要越狱. 之所以有这篇文章的产生,可以看这里: 不 ...
- JAVA7遍历文件夹
在JAVA7中提供了新的遍历文件的方法,比原有File类的递归遍历效率要好大约30%左右. 测试结果: 测试用的File类的递归,是经过对比测试几种方法,找出相对效率较好的来和JAVA7进行测试. 1 ...
- Wikioi 1020 孪生蜘蛛 Label:Floyd最短路
题目描述 Description 在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道. 根据防护中心的消息,敌方已经有一只特种飞蛾 ...
- Java实现FTP上传下载功能
Java FTP客户端工具包很多,在此我选用的Apache的FTPClient.这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons- ...
- [转帖] VS集成Qt环境搭建
http://blog.sina.com.cn/s/blog_a6fb6cc90101gynd.html 用了这么久的Qt,IDE一直都是VS与Creator并用(实际开发以VS为主),至于哪个更好这 ...
- SQL中批量删除被注入的恶意代码的方法
下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...