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

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。

python setup.py 管理的更多相关文章

  1. Python安装mysql-python错误提示python setup.py egg_info

    做python项目,需要用到mysql,一般用python-mysql,安装时遇到错误提示如下: Command "python setup.py egg_info" failed ...

  2. python setup.py uninstall

    I have installed a python package with python setup.py install How do I uninstall it? ============== ...

  3. python setup.py install 报错ImportError: No module named setuptools

    学习光荣之路python课程时,使用python setup.py install安装其他模块时,第一次安装某模块成功了.安装另一模块却报错ImportError: No module named s ...

  4. pip安装icu失败:Command "python setup.py egg_info" failed with error code 1 in

    问题 Mac 下通过 pip 安装 icu 失败. 解决办法及原因 问题的原因是因为icu库中的某一行代码找不到一个文件,获取不到ICU_VERSION的值. # Install icu brew i ...

  5. Command "python setup.py egg_info" failed with error code 10

    1:今天系统重装以后,下载了新的版本的python3.6.1.然后想通过pycurl模块测试URL,突然发现windows10下我无法通过pip安装pycurl模块了,报错内容如下 Collectin ...

  6. Command "python setup.py egg_info" failed with error code 1一种问题的解决方法

    问题描述:无论是你在pycharm中直接使用import and install命令,还是pip的时候出现了Command "python setup.py egg_info" f ...

  7. Command "python setup.py egg_info" failed with error code 1 in C:\Users\w5659\AppData\Local\Temp\pip-install-t7uomu4r\xa dmin\

    Error msg: C:\Users\w5659>pip install xadmin Collecting xadmin Using cached https://files.pythonh ...

  8. pip安装mysql-python报错:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-enRreC/mysql-python/

    公司业务开发,用python开发网站;需要使用模块MySQLdb. 我直接pip install MySQLdb,当然不成功了,模块名字因该是mysql-python pip install mysq ...

  9. python2 使用pip安装psycopg2出现错误:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-mvzdNj/psycopg2/

    公司业务需求,开发语言python2,需要使用数据库:postgresql,需要安装模块psycopg2这个模块, 使用pip install psycopg2 报错: Command "p ...

随机推荐

  1. web前端页面性能优化

    影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我 ...

  2. Python: Windows 7 64位 安装、使用 pymongo 3.2

    官网tutorial:  http://api.mongodb.com/python/current/tutorial.html 本教程将要告诉你如何使用pymongo模块来操作MongoDB数据库. ...

  3. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  4. Mybatis 拦截器

    Mybatis定义了四种拦截器: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, ...

  5. 【笔记】MySQL查询排名

    select a.name, a.total_score,@rank:=@rank+1 as rank from (                  select u.name,uti.total_ ...

  6. git pull push 不用输入用户名和密码的方法

    1.在计算机的安装盘下找到 '用户' 这个文件夹打开. 2.找到'用户' 文件夹下面你当前的用户. 3.新建'.gitconfig' 文件 4. [user] email =  name = [pus ...

  7. HAProxy的安装与使用

    在互联网时代中,后台系统架构,经常可以听到高可用集群.负载均衡集群之类的系统架构解决方案,其中,负载均衡有基于硬件的F5.Big-IP等,也有基于软件的LVS(基于Linux操作系统实现,性能可以和基 ...

  8. 前端试题本(Javascript篇)

    JS1. 下面这个JS程序的输出是什么:JS2.下面的JS程序输出是什么:JS3.页面有一个按钮button id为 button1,通过原生的js如何禁用?JS4.页面有一个按钮button id为 ...

  9. UI神器-SOUI

    前言 在Windows平台上开发客户端产品是一个非常痛苦的过程,特别是还要用C++的时候.尽管很多语言很多方法都可以开发Windows桌面程序,目前国内流行的客户端产品都是C++开发的,比如QQ,YY ...

  10. ACM进阶计划

    ACM进阶计划ACM队不是为了一场比赛而存在的,为的是队员的整体提高.大学期间,ACM队队员必须要学好的课程有:lC/C++两种语言l高等数学l线性代数l数据结构l离散数学l数据库原理l操作系统原理l ...