设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

以正确的方式开源 Python 项目

2013-9-2 10:14| 发布者: 红黑魂| 查看: 9771| 评论: 0|来自: 开源中国编译

摘要: 大多数Python开发者至少都写过一个像工具、脚本、库或框架等对其他人也有用的工具。我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛。我不是简单的指——“创建一个GitHub库,提交,在Reddit上发布 ...

工作流

将你的第一个发布版本上传到PyPI后,基本的工作流程如下:

  1. 继续在你的项目上工作 (比如修复bug,添加新特性等等)
  2. 确保测试通过
  3. 在git-flow中创建一个发布分支“冻结”你的代码
  4. 在你项目的__init__.py文件里更新__version__number版本变量
  5. 多次测试运行setup.py,将新版本上传到PyPI

用户希望你保持足够的更新频率以修复bug。你要管理好你的版本号,不要“过于频繁”的发布。记住:你的用户不会手工维护他们每个安装模块的不同的版本。

使用TravisCI持续集成

持续集成是指一个项目中所有变化不断整合的过程(不是周期性的批量更新)。就我们而言,这意味每次我们GitHub提交时,我们通过测试运行来发现是否有什么异常,正如你想象的,这是一个非常有价值的实践。不要有“忘记运行测试”的提交。如果你的提交通不过测试,你将收到一封电子邮件被告知。

TravisCI是一种使GitHub项目持续集成更容易的服务。如果你还没有账号到这看一下注册一个,完成这些之后,在我们进入CI之前我们先需要创建一个简单的文件。

通过.travis.yml配置

在TravisCI上的不同项目通过一个.travis.yml文件来配置,这个文件在项目的根目录。简要地说,我们需要告诉Travis:

  1. 我们项目使用的语言是什么
  2. 它使用的是语言的哪个版本
  3. 使用什么命令安装它
  4. 使用什么命令运行项目的测试

这些都是很直接的东西。下面是sandman.travis.yml的内容:

language: python
python:
    - "2.7"
install: 
    - "pip install -r requirements.txt --use-mirrors"
    - "pip install coverage"
    - "pip install coveralls"
script: 
    - "coverage run --source=sandman setup.py test"
after_success:
    coveralls

在列出语言和版本后,我们告诉Travis如何安装我们的包。在install这行,确认包含下面这行:

- "pip install -r requirements.txt --use-mirrors"

这是pip安装我们项目的要求(如果有必要的话使用PyPI镜像站点)。另外的两行内容是sandman特有的。它使用一个额外的服务(coveralls.io)来连续监测测试用例的覆盖率,这不是所有项目都需要的。

script:列出能运行该项目测试的命令。与上面一样,sandman还需要做一些额外的工作。你的项目需要的只有Python的setup.py测试,after_success部分也可以一块删掉。

一旦你提交了这个文件并在TravisCI中激活了你的项目的,push到GitHub。一会儿后,你会看到一个基于你最近提交的编译结束结果。如果成功了,你的编译呈现“绿色”和并且状态页会显示编译通过。你可以看到你项目在任何时间的编译历史。这对对人开发特别有用,在历史页可以看到特定开发者出错和编译的频率…

你还会收到一封通知你编译成功的电子邮件。当然你也可以设置只有在出错或错误被修复时才有邮件通知,但编译输出结果相同时也不会发送。这是非常有用的,你在不必被无用的“编译通过!”邮件淹没的同时在发生改变仍会收到警示。

用ReadTheDocs做持续文档集成

尽管PyPI有一个官方文档站点(pythonhosted.org),但是ReadTheDocs提供了一个更好的体验。为什么?ReadTheDocs有针对GitHub非常棒的集成。当你注册ReadTheDocs的时候,你就会看到你的所有GitHub 代码库。选择合适的代码库,做一些小幅的配置,那么你的文档就会在你每次提交到GitHub之后自动重新生成。

配置你的项目应该是一个很直观的事情。只有一些事需要记住,尽管,这里有一个配置字段的列表,对应的值可能不一定是你直接用得上的:

  • Repo: https://github.com/github_username/project_name.git
  • Default Branch:develop
  • Default Version:latest
  • Python configuration file: (leave blank)
  • Usevirtualenv: (checked)
  • Requirements file:requirements.txt
  • Documentation Type: Sphinx HTML

DRY 不要重复你自己

现在你已经完成了对于一个现存代码基础的所有艰难的开源工作,你可能不会想在开始一个新项目的时候把这些事重来一遍。幸运的是,你并不需要这么做。有Andrey Roy的Cookiecutter工具(我链接到了Python版本,尽管还有一些不同语言的版本在the main repo))

Cookiecutter是一个命令行工具能够自动执行新建项目的一些步骤来做这篇文章里提到的一些事情。 Daniel Greenfeld ( @pydanny )写了一篇很好的关于它的博客并且提到了如何与这篇文章里提到的实践联系上。你可以从这里看看这篇文章: Cookiecutter: Project Templates Made Easy .

结论
 

我们已经介绍了所有用来开源一个Python包的命令,工具和服务。当然,你可以直接把它扔到GitHub上并且说“自己安装它”,但是没人会这么做。并且你仅仅是开发源代码并不算是真正的开源软件。

另外,你可能不会为你的项目吸引外部贡献者。通过这里列出的方法来设立你的项目,你就已经创建了一个容易维护的Python包并且会鼓励大家来使用和贡献代码。而这,就是开源软件的真正精神,不是吗?

英文原文:Open Sourcing a Python Project the Right Way

参与翻译(4人)GarfieltLesus贱圣徐继开

本文转自:开源中国社区 [http://www.oschina.net]
本文标题:以正确的方式开源 Python 项目
本文地址:
http://www.oschina.net/translate/open-sourcing-a-python-project-the-right-way


酷毙
1

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

收藏 分享 邀请
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

一个起步晚,就说明根本没有面对现实的勇气。
google才几岁?
[url=http:///].ankor[/url] <a href="http:///">.ankor</a>
谈红色变,红是造假的代名词吧,红你妹啊。
: 看着牙疼!
看着牙疼!
搞笑呢?
能说脏话吗?不能,那没什么好说的了!
苏苏呵呵
哦?
有人爱我吗?
System76还有自己的OS。现在可以递送到很多地区了。
英语太差了,回去补课吧。
腾讯,多年在中国占据软件第一的位置,可惜,除了QQ、微信外,什么都没有做出来。
联合查询呢?
hash join有了么?
垃圾文章!
挺好
中国,还得是华为!赞!
中国人就是不干正事,搞什么少数民族语言,把libreoffice加上系列码,都是找骂的事,就是不干正事。
腾讯也搞芯片,太搞笑了吧?腾讯存在多少年了?过去这么多年腾讯干什么去了?
小米都造出自己的松果仁了,腾讯干什么了?
最后三个图的区别是这样的吗?不对的地方请指出
class B{void m(){t();}void m1(){s();}
class B{void m(){}void m1(){t();}void m2(){s();}
class B{void m(){t();s();}
hello
测试是不是真的
好个屌,就是一骗子
喜大普奔!这个.net core的广告我非常赞同!
PgSQL迟早会是第一。
Windows只是个OS,LINUX是整个完整的开发、应用、办公环境。有什么好比的呢?
把买Windows的钱捐给Linux基金更好吧。
一群无聊的人
上述表达式有一处错误。
老实说,除了最后一个,其他我都会
,请重新启动计算机!
你好,请问analysis中的属性标签是如何定义的?比如:“role”。另外,这里的timepark如何加入的?
我和我的小伙伴都惊呆了!
database呢?
node.js??
哈哈
其实主要就是没有好的office和email-client。
土豪,我们做朋友吧!
病的不轻啊。
这个游戏从哪里下载的
太给力了!
太给力了!
太给力了!
太给力了!
按照步骤搭建不出来求救
史无前例的震撼!
太给力了!
太给力了!
发个评论测试一下这个滚动框是不是真的
太给力了!
太给力了!

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部