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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM