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

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. 利用chrome插件批量读取浏览器页面内容并写入数据库

    试想一下,如果每天要收集100页网页数据甚至更多.如果采用人工收集会吐血,用程序去收集也就成为一个不二的选择.首先肯定会想到说用java.php.C#等高级语言,但这偏偏又有个登陆和验证码,搞到无所适 ...

  2. Python之str()与repr()的区别

    Python之str()与repr()的区别 str()一般是将数值转成字符串,主要面向用户.  repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思.如list, ...

  3. [iOS] 为文本加上横线方法

    _oldPriceLabel.text = "; _oldPriceLabel.textColor = [UIColor lightGrayColor]; NSMutableAttribut ...

  4. dom操作导致超级卡顿。。。

    var i=0;j=30;setinterval(function(){ document.getElementId(idname).style.top=j+'px'; i<3?i++:i=0; ...

  5. myabatis oracle 调用存储过程返回list结果集

    Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...

  6. LeetCode 162 Find Peak Element

    Problem: A peak element is an element that is greater than its neighbors. Given an input array where ...

  7. crontab

    在crontab中添加了定时任务,但发现没有得到期望的结果, 这就需要查看crontab的执行历史记录,具体位置如下: cd /var/log tail -100 cron 在cron文件中即可查阅已 ...

  8. iOS之滑动隐藏导航

    滑动隐藏导航狼栏 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offsetY = scrollView.content ...

  9. swift之inout

    在swift中,我们常常对数据进行一些处理.因为swift的计算属性,所以如果不是大量重复性处理,基本可以在set及didSet中改变原数据的一些状态.但需要用到同样的算法处理大量数据的时候,仍然需要 ...

  10. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...