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
cosven
V2EX  ›  Python

分享一个快速查看 Python 包/模块/类/函数 源码的脚本

  •  
  •   cosven ·
    cosven · 2018-12-27 03:37:50 +08:00 · 7163 次点击
    这是一个创建于 2194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为啥造轮子:开发或者学习 Python 时,我们可能经常需要查看某个函数或者某个类的文档。 举个例子,之前我自己在使用 requests 时,就经常会想去查看 requests.Session 的源码实现? 但这时候,有没有什么快捷的方法迅速看到源码呢?

    之前我有几个办法:

    1. 去 Github 上面搜
    2. 将 requests 源码拷贝在本地
    3. 在 IDE/编辑器 中跳转到函数定义
    4. cd 到 site-packages 目录中去,然后使用编辑器打开

    但这些办法都比较麻烦:今天偶然看到 jedi 的使用示例,于是撸了一个「快速跳转到 Python 函数、类、包 定义」的脚本。

    https://github.com/cosven/rcfiles/blob/master/bin/mpy-goto-def

    使用方法

    1. 请确保机器安装了 Python 3 (版本 >= 3.6 )
    2. 下载脚本
    3. 执行下面命令时,它会自动调用编辑器打开相应文件,并跳转到对应的行( Vim/Emacs 测试 OK )
      ./mpy-goto-def asyncio.wait
      

    进阶使用 - 开启自动补全

    1. 将脚本加入 PATH
    2. pip3 install argcomplete
    3. register-python-argcomplete mpy-goto-def >> .bashrc
    4. source .bashrc

    开启自动补全后,我们在命令行输入 mpy-goto-def flask.Res 时 按 <tab> 会自动弹出 Response, Request 等候选项。</tab>

    ~ > mpy-goto-def flask.Re
    flask.Redirect                flask.Request_finished
    flask.Render_template         flask.Request_started
    flask.Render_template_string  flask.Request_tearing_down
    flask.Request                 flask.Response
    

    bonus

    推荐一个工具:pydoc -> 命令行查看 Python 文档神器

    第 1 条附言  ·  2018-12-27 09:40:28 +08:00
    bonus 2: jedi 也挺好玩的,也很好上手。有兴趣可以多折腾折腾 ~
    第 2 条附言  ·  2018-12-27 11:55:34 +08:00

    统一回复一下:我看很多朋友说 PyCharm 里面有快捷键可以 跳转到定义/查看文档 等。嗯,是的。 现在很多配置好的编辑器,比如 Vim/Emacs 也都可以具有这些功能。在项目开发时,这个工具似乎确实没啥太大用武之地,因为现代的编辑器,IDE 做的还不错。仔细想了想,会使用到这个工具的应该是个平常经常使用命令行的开发者

    另外,这个工具的适用场景(从我自己的体验来说):

    1. review 别人代码时(这时用命令行会比较方便
    2. 在网上(Google/Stackoverflow/v2ex...)看到一段代码时,想看下这段代码涉及的类的文档
    3. 编写脚本时
    16 条回复    2018-12-27 11:57:48 +08:00
    deepreader
        1
    deepreader  
       2018-12-27 03:58:49 +08:00
    Performance 方面如何呀?快不快
    casparchen
        2
    casparchen  
       2018-12-27 05:39:01 +08:00 via iPhone
    G 感觉大多数情况 help()就够了
    lihongjie0209
        3
    lihongjie0209  
       2018-12-27 08:16:28 +08:00
    写 python 都不要 IDE 的吗
    so1n
        4
    so1n  
       2018-12-27 09:17:06 +08:00 via Android
    vim 自动补全的那个 ,gd 就好吧…
    cosven
        5
    cosven  
    OP
       2018-12-27 09:32:10 +08:00   ❤️ 1
    @deepreader vim/Emacs 等编辑器后端用的应该都是 jedi,这个命令也主要是基于 jedi 来做的

    我在 macbook pro 2017(8G) 上测试了几个:一般 0.3s 可以查出来,如果输入的类或者函数真的不存在,一般需要 0.5s 。感觉算一般吧,能用的级别 🤔
    cosven
        6
    cosven  
    OP
       2018-12-27 09:34:16 +08:00
    @lihongjie0209 ummm,现代的编辑器都很强了,感觉 IDE 确实是个可选项,不过这个主要还是看个人习惯。
    cosven
        7
    cosven  
    OP
       2018-12-27 09:36:01 +08:00
    @so1n 嗯,是的。如果是在编辑器里面的话,是可以直接查看函数定义。比如 vim,快捷键 gd 就可以 goto-definition。

    这个工具主要是提供了一种在命令行直接查看函数 /类定义的可能性。
    cosven
        8
    cosven  
    OP
       2018-12-27 09:38:10 +08:00
    @casparchen 试了下 help,它可以在 REPL 环境中使用,和 pydoc 提供的功能似乎是一样的

    (这个我之前倒是没怎么了解过 ~
    andylsr
        9
    andylsr  
       2018-12-27 09:42:37 +08:00 via Android
    pycharm Ctrl+左键单击 自动跳转
    huangzhe8263
        10
    huangzhe8263  
       2018-12-27 09:46:27 +08:00 via Android
    如果用 Pycharm 的话在对应函数上按 Ctrl + Q,有惊喜
    rocketman13
        11
    rocketman13  
       2018-12-27 10:20:10 +08:00
    pycharm 鼠标中键按一下。。。就一下。。。
    locoz
        12
    locoz  
       2018-12-27 10:32:22 +08:00
    @huangzhe8263 #10 居然还有这种功能
    xlui
        13
    xlui  
       2018-12-27 10:42:57 +08:00 via Android
    @locoz ctrl+p 参数列表,ctrl+q api 文档,ctrl+b 跳转源码(等同 ctrl+鼠标左键点)
    xpresslink
        14
    xpresslink  
       2018-12-27 11:04:45 +08:00
    为啥造轮子?
    在 Pycharm 里,光标点在函数或对象上面,然后按需求打开 view 菜单从上面 2-5 项。快捷键就显示在右侧。
    liushuangbill
        15
    liushuangbill  
       2018-12-27 11:57:28 +08:00
    @xxx x
    liushuangbill
        16
    liushuangbill  
       2018-12-27 11:57:48 +08:00
    @dadadzm,m c
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2290 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.