zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    OpenAL
    VS2013关于“当前不会命中断点源代码与原始版本不同”的BUG
    Windows中的句柄
    (转)OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例)
    全局变量的初始化顺序
    与时间有关的windows函数
    unity中的协程
    Unity3d碰撞检测中碰撞器与触发器的区别
    unity脚本入门
    面试总结关于Spring面试问题(精选)
  • 原文地址:https://www.cnblogs.com/lhfcws/p/4215551.html
Copyright © 2011-2022 走看看