python setup.py 管理

发布项目遇到了坑……特此记录。

How to write setup.py: https://docs.python.org/2/distutils/setupscript.html

Setup.py

setup.py是python的一个项目发布管理工具。我们常常安装别人的代码也是借助setup.py。

我的项目的setup.py示例:  

from setuptools import setup, find_packages

setup(
      name="rdir",
      version="0.52",
      description="More powerful recursive dir. Support HTML pretty view in tree structure.",
      long_description="Documentation and bug report: http://www.github.com/Lhfcws/rdir \
<br/><br/>\
Sorry for the deploy bugs in the previous versions\
<br/><br/>\
If you came across ImportError or NoScriptError, please `rm /usr/local/bin/rdir*`",
      author="Lhfcws Wu",
      author_email="lhfcws@gmail.com",
      url="http://www.github.com/Lhfcws/rdir",
      license="MIT",
      packages=["rdir", "rdir/core", "rdir/generateHTML"],
      include_package_data=True,
      package_data={"rdir": ["rdir/generateHTML/template/*.html", "rdir/generateHTML/bin/*.js"]},
      install_requires=['colorama', 'pyquery'],
      keywords=["dir", "doc", "pydoc", "html"],
)

项目主要结构:

|-- rdir
|   |-- core
|   `-- generateHTML

(我上面省略了我的py文件,__init__.py肯定是有的)

 

name就是你的项目名了,version是版本,这两个会在打包时自动生成为你的项目名(比如 rdir-0.52)。description到license不多说。

packages很重要,它代表你有哪些package要打入发布中。Python package的概念很简单,一个目录下有__init__.py就是一个package。像我如上有三个package,于是就指定 packages=["rdir", "rdir/core", "rdir/generateHTML"] 。大家还看到我引入了一个 find_packages()函数没用,当你的每个package下的__init__.py里都import了当前package下的module时,find_packages()会自动帮你找到所有的包。

然后我项目里会有一些非py文件,比如html和js等,这时候就要靠 include_package_data 和 package_data 来指定了。package_data一般写成 {'your_package_name': ["files"]}。keywords便于pypi索引。

然后include_package_data还没完,还需要一个MANIFEST.in文件:

 

include rdir/generateHTML/template/*.html rdir/generateHTML/bin/*.js

这个时候才会真正帮你自动copy文件到打包中。

关于MENIFEST.in请参见 https://docs.python.org/2/distutils/sourcedist.html

额外插一个常用的scripts,scripts配置会将对应的py脚本安装到你的 /usr/local/bin 目录下并在import时是优先执行的。因此你如果有了scripts,你的site-packages里的egg包就会不起作用被覆盖了。这时候就会见到恼人却又不知为何的ImportError,去掉scripts配置又发现No Script Error。其实删掉bin下的scripts就解决问题了。


 

最后欢迎试用 https://pypi.python.org/pypi/rdir :加强版的dir,提供多种模式(命令行、文件、html)查看一个对象递归的结构以及对应的文档。 

可通过pip或easy_install安装 sudo pip install rdir。

posted @ 2015-01-10 20:13  Lhfcws  阅读(7145)  评论(0编辑  收藏  举报