V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
whwq2012
V2EX  ›  Python

Python 中除了 SimpleHTTPServer, json.tool 外,还有哪些内置的模块?

  •  1
     
  •   whwq2012 · 2017-02-08 08:22:55 +08:00 · 5277 次点击
    这是一个创建于 2627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天用了下 python -m json.tool ,贼爽。所以大家还知道 python 中还有哪些实用的内置模块吗?求告知

    第 1 条附言  ·  2017-02-08 09:30:38 +08:00
    我问这个的目的,就是想了解 python 中内置的实用工具,免得需要工具的时候再去网上临时找。比如大家可以试试我推荐的 json.tool 。用法是 cat file.json | python -m json.tool 。然后就会输出格式化 json 字符串,这样格式化 json 字符串总比去网上找工具方便吧,还不依赖网络。

    还有啊,我希望的是可以直接运行的模块,不是包。
    第 2 条附言  ·  2017-02-10 10:53:05 +08:00
    总结一下帖子里出现的:
    timeit:这个模块可以用来计算代码的执行时间。
    在 python3 的介绍: https://docs.python.org/3/library/timeit.html#module-timeit
    在 python2 的介绍: https://docs.python.org/2/library/timeit.html#module-timeit

    python -m smtpd -n -c DebuggingServer localhost:1025 一句话开启一个 SMTP 服务器测试邮件功能。(因为我不是很熟悉 smtp ,所以这个我就直接复制了,而且官方文档没有介绍)

    python -m pydoc 一个查看 python 文档的模块,就可以查到你安装的模块的使用方法。(官方文档没有介绍,但是执行一下就可以看到帮助)

    python -m zipapp (python3 专属) 没用过,介绍在 https://docs.python.org/3/library/zipapp.html#module-zipapp

    python -m zipfile 可以压缩解压缩 zip 文件的,但是无法解压带密码的 zip 。
    在 python3 的介绍: https://docs.python.org/3/library/zipfile.html#module-zipfile
    在 python2 的介绍: https://docs.python.org/2/library/zipfile.html#module-zipfile

    还有就是我自己写了个小爬虫,爬了下官方文档里哪些模块有 python -m 的方法,但是我看下了下,不是很实用,我就只贴下名字和地址好了,需要的时候大家自己查询。
    python2 模块的文档地址: https://docs.python.org/2/py-modindex.html
    python3 模块的文档地址: https://docs.python.org/3/py-modindex.html

    python2 可以的模块:
    compileall
    cProfile
    doctest
    ensurepip
    json
    pdb
    profile
    SimpleHTTPServer
    SimpleXMLRPCServer
    site
    test
    timeit
    trace
    unittest
    webbrowser
    zipfile

    python3 可用的模块:
    compileall
    json
    json.tool
    pickletools
    sysconfig
    tarfile
    test
    test.support
    timeit
    tokenize
    venv
    zipapp
    zipfile
    35 条回复    2017-02-09 13:02:54 +08:00
    fearme
        1
    fearme  
       2017-02-08 08:35:36 +08:00 via iPhone
    functools
    expkzb
        2
    expkzb  
       2017-02-08 08:46:40 +08:00
    SimpleHTTPServer
    yangg
        3
    yangg  
       2017-02-08 09:06:03 +08:00   ❤️ 1
    timeit
    python -m timeit '"-".join(str(n) for n in range(100))'
    whwq2012
        4
    whwq2012  
    OP
       2017-02-08 09:21:56 +08:00
    @fearme
    @yangg
    我想要的是像 python -m SimpleHTTPServer/json.tool 这种可以直接运行的简易工具,不是导入的包啊
    whwq2012
        5
    whwq2012  
    OP
       2017-02-08 09:22:10 +08:00
    @expkzb 这个我知道啊,还有别的吗
    est
        6
    est  
       2017-02-08 09:23:35 +08:00
    py 所有模块都可以 -m 执行呀。
    est
        7
    est  
       2017-02-08 09:24:30 +08:00   ❤️ 1
    一句话开启一个 SMTP 服务器测试邮件功能

    python -m smtpd -n -c DebuggingServer localhost:1025


    1025 端口可以自己换
    whwq2012
        8
    whwq2012  
    OP
       2017-02-08 09:26:44 +08:00
    @est 我知道所有的模块用 m 参数都能执行啊,但是我问的是内置的已经封装好的小工具。比如推荐的 SMTP 服务器
    xiaket
        9
    xiaket  
       2017-02-08 12:06:46 +08:00   ❤️ 4
    cd /usr/lib/python2.7/ && grep '^if\ __name__' --exclude-dir 'dist-packages' * -lR | wc -l

    117

    这么多,真指望有人一个一个介绍?

    另外,接触多了就知道,这种语法糖没什么特别的
    whwq2012
        10
    whwq2012  
    OP
       2017-02-08 12:59:23 +08:00
    @xiaket 你这个运行出的结果是 python 内置包的数量吧,我要的不是这个,我要的是可以执行的小工具。
    Yinz
        11
    Yinz  
       2017-02-08 13:27:27 +08:00   ❤️ 2
    @whwq2012 他 grep 的是含有 'if __name__' 语句的包,也就是可以直接执行的包 :)
    aristotll
        12
    aristotll  
       2017-02-08 14:21:17 +08:00
    但是 -m 就是模块啊

    -m module-name Searches sys.path for the named module and runs the corresponding .py file as a script.

    你其实要自己写也可以写
    ivechan
        13
    ivechan  
       2017-02-08 14:31:18 +08:00
    @whwq2012
    (以下是根据 Python3.6 文档所得)
    你还是直接看一下-m 的说明吧。
    When a package name is supplied instead of a normal module, the interpreter will execute <pkg>.__main__ as the main module.
    也就是说只要参数是 package 名,就会直接运行包里的__main__函数。

    不信你执行这个: python3 -m http.server
    也能得到同样的效果,根本不是什么小工具,只是 python 命令行支持这个参数而已。

    https://docs.python.org/3/using/cmdline.html?highlight=#cmdoption-m
    whwq2012
        14
    whwq2012  
    OP
       2017-02-08 14:50:24 +08:00 via Android
    @Yinz 原来如此,我执行了这个命令下居然有 1700 多个
    whwq2012
        15
    whwq2012  
    OP
       2017-02-08 14:53:25 +08:00 via Android
    @aristotll 就是想了解下实用的嘛,有些时候,小工具特别方便。而且我写不出,基础不到家😂
    @ivechan 我知道啊,发这个帖子就是想知道标准库里内置了哪些实用的模块
    qsnow6
        16
    qsnow6  
       2017-02-08 16:40:28 +08:00
    别太懒了,官方文档自己翻
    whwq2012
        17
    whwq2012  
    OP
       2017-02-08 16:45:09 +08:00 via Android
    @qsnow6 我用谷歌搜过,搜不到,请问该怎么搜,什么关键字
    whwq2012
        19
    whwq2012  
    OP
       2017-02-08 17:10:37 +08:00
    @lhbc 对对对对,我要的就是这种,虽然看了下不是每个模块都是支持-m 参数,但还是谢谢啦
    blahgeek
        20
    blahgeek  
       2017-02-08 17:38:20 +08:00   ❤️ 2
    来个有意思的… python -m turtle (我用 python 3)
    blahgeek
        21
    blahgeek  
       2017-02-08 17:39:47 +08:00   ❤️ 1
    python -m antigravity
    whwq2012
        22
    whwq2012  
    OP
       2017-02-08 17:40:53 +08:00
    @blahgeek 我 2.7 的可以运行
    tumbzzc
        23
    tumbzzc  
       2017-02-08 18:28:54 +08:00
    https://ooo.0o0.ooo/2017/02/08/589af1faf38d4.gif
    没有录完
    lynx
        24
    lynx  
       2017-02-08 18:43:02 +08:00
    cd /usr/lib/python3.6

    grep 'if __name__ == .__main__.' ./*/__init__.py
    grep 'if __name__ == .__main__.' ./*.py
    whwq2012
        25
    whwq2012  
    OP
       2017-02-08 20:51:19 +08:00
    @est 这个 smtpd 的模块的用法居然在官方文档里没有介绍
    jun4rui
        26
    jun4rui  
       2017-02-08 20:54:04 +08:00 via Android
    现在还有 venv 了,以前的 virtualenv 可以不装了
    whwq2012
        27
    whwq2012  
    OP
       2017-02-08 20:55:20 +08:00
    @jun4rui 这是 3 的特性里的吧, 2.7 里好像不能这么搞
    julyclyde
        28
    julyclyde  
       2017-02-08 21:42:01 +08:00   ❤️ 1
    “既作为 lib 又作为 exe ”需要判断__name__
    所以以这个条件搜索
    est
        29
    est  
       2017-02-08 22:45:51 +08:00   ❤️ 1
    python -m pydoc

    可以跑一个浏览器版本的 pydoc

    文档是实时从代码里生成的。如果你安装了其他包,可以实时把文档刷出来。
    PythonAnswer
        30
    PythonAnswer  
       2017-02-08 22:49:03 +08:00 via Android   ❤️ 1
    python -m venv 常用
    python -m pip 这个在 win 下更新 pip 要用到
    PythonAnswer
        31
    PythonAnswer  
       2017-02-08 22:50:19 +08:00 via Android
    @est 现在 jedi 这么普及,好多年都没人用 pydoc 啦,抄袭 java 的东西
    jun4rui
        32
    jun4rui  
       2017-02-09 00:13:22 +08:00 via Android
    @whwq2012 好像是 3.5 以后? 2.7 肯定不行
    czheo
        33
    czheo  
       2017-02-09 02:47:17 +08:00   ❤️ 1
    python -m zipapp
    可以用来打包程序
    ericls
        34
    ericls  
       2017-02-09 04:04:13 +08:00
    python -m pip

    哈哈
    zhengxiaowai
        35
    zhengxiaowai  
       2017-02-09 13:02:54 +08:00   ❤️ 1
    zipfile
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   910 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:56 · PVG 04:56 · LAX 13:56 · JFK 16:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.