如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多。即使你的模块并不在一个包内,这种做法也行的通;你可以告诉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 包发布

如果你想发布在同一包中(或者在子包中)的多个模块。比如,如果foobar 模块属于包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_packe1sub_package2的同时,不发布sub_model2模块。

纯Python包发布setup脚本编写示例的更多相关文章

  1. 实战教程:如何将自己的Python包发布到PyPI上

    1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...

  2. 将python包发布到PyPI和制作whl文件

    参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...

  3. 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例

    老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例   MonkeyRunner这个类可以说是编写monkeyrunner脚 ...

  4. 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1

    老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例   在上一节的第一个“增加日记”的示例中,我们并没有看到日记是否真的增加成功 ...

  5. 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  6. 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  7. python遍历目录文件脚本的示例

    例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python# -*- coding: utf-8 ...

  8. 第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  9. 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 4

    第七步:保存新增加日记 代码3-2-7 增加日记-保存日记 #Step7: Save the note by touch on the "save" menu entry by c ...

随机推荐

  1. Linux 档案与目录管理

    『 cd /etc 』这个情况,这也就是所谓的『绝对路径』,他是从根目录连续写上来的一个情况,所以不论你在哪一个路径现执行这一个指令,都会将你移动到该路径下.那如果我是使用『 cd etc 』呢?那表 ...

  2. HDU 1011 (树形DP+背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1011 题目大意:树上取点,先取父亲,再取儿子.每个点,权为w,花费为cost,给定m消费总额,求最大 ...

  3. Codeforces Round #189 (Div. 2) A. Magic Numbers

    #include <iostream> #include <vector> #include <algorithm> #include <string> ...

  4. CocoaPods 安装的第三方删除

    CocoaPods 第三方删除 我们使用CocoaPods非常高效地将一些第三方类库导入到我们的项目中,难免会出现一些错误,这时应怎么删除它呢?以下方法会帮你解决这个问题 打开Build Phases ...

  5. NOIp 2006 作业调度方案 Label:坑 模拟(tyvj你不给我ac,我就把名字献给附中oj)

    福建师大附中链接:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1211 [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序 ...

  6. LCA的五种解法

    标准求法 //O(nlogn)-O(logn) #include<cstdio> #include<algorithm> using namespace std; ; ],to ...

  7. iOS开发之--NSPredicate

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...

  8. ondragover 事件规定在何处放置被拖动的数据

    nternet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 被拖元素,dragElement : 1.添加事件:ondragstart 2 ...

  9. PHP一般情况下生成的缩略图都比较不理想

    PHP用GD库生成高质量的缩略图片,PHP一般情况下生成的缩略图都比较不理想.今天试用PHP,GD库来生成缩略图.虽然并不100%完美.可是也应该可以满足缩略图的要求了.<?php $FILEN ...

  10. BZOJ 2120 数颜色(带修改的莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discus ...