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

不懂就问, peewee 的这种文件组织结构是 Python 社区推荐的吗?

  •  
  •   coolzilj · 2019-11-29 18:58:13 +08:00 · 3957 次点击
    这是一个创建于 1823 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没写过几行 python, 所以最近在看一些社区流行的库想熟悉一下怎样写出 pythonic way 的代码。

    今天在看 peewee 代码的时候发现, 这个 github 上 7k star 的库的核心代码基本都在一个文件里, https://github.com/coleifer/peewee/blob/master/peewee.py
    合计 7556 行代码(打开页面的时候卡了一下才留意到)

    请问 python 的老司机们, 这是 python 社区推荐的做法吗? 还是说只是作者的个人喜好? 还是说有什么理由故意写个 post script 把代码 concat 成一个的?(不过并没有发现 makefile 之类的脚本)

    纯属好奇,并没有什么个人偏见和喜好。

    15 条回复    2019-12-01 14:45:44 +08:00
    guog
        1
    guog  
       2019-11-29 19:02:55 +08:00 via Android
    卧槽,手机 chrome 打开会闪退…
    Trim21
        2
    Trim21  
       2019-11-29 19:05:10 +08:00 via Android
    作者的个人喜好…我见到的大多数项目都是分开的
    ipwx
        3
    ipwx  
       2019-11-29 19:09:44 +08:00   ❤️ 1
    这个做法只有一个目的:你可以把 peewee.py 拷到你的项目里直接用,而不是 pip install
    jdhao
        4
    jdhao  
       2019-11-29 19:33:36 +08:00 via Android
    不是,一般都会不同模块有自己的文件
    GoLand
        5
    GoLand  
       2019-11-29 20:36:48 +08:00
    peewee 比较奇葩罢了。而且也不太好用,代码绕来绕去 debug 贼复杂。
    ila
        6
    ila  
       2019-11-29 20:40:51 +08:00 via Android
    bottle 中枪
    ClericPy
        7
    ClericPy  
       2019-11-29 20:48:53 +08:00   ❤️ 1
    你是想问作者怎么想的还是想知道社区怎么想的?
    作者想法有人问过了:
    https://github.com/coleifer/peewee/issues/501
    ClericPy
        8
    ClericPy  
       2019-11-29 21:07:34 +08:00
    社区这头好像大部分的看法是逻辑不复杂, 行数不多的情况下用 module, 否则用 package

    我个人理解, peewee 本身逻辑并不难理解, 单文件分发的好处显而易见, 甚至直接取片段代码 (MIT, 也省的去安装) 也省事, 如果是包结构, 那抄代码光依赖关系就够累了.

    package 结构的话有支持相对引用的操作, 这是避免 package 顶层名称经常修改而导致 import Error 的好方式, 而很多编辑器就算用上 LSP 也对这种 from .xx import xxx 的 goto definition 非常不友好, 导致跳转失灵, 如果是单文件 module 就不会有这问题. 所以后来的 linters 都已经把相对引用时候的不带顶层包名的操作加黄线警告了

    所以我感觉 peewee 是为了使用者友好(毕竟逻辑再复杂一路 Alt+Click 通行无阻), 而牺牲开发者体验的一种选择(不少开发者的习惯是每个文件 commit 一次), 强行洗也有点洗不动...
    Tink
        9
    Tink  
       2019-11-29 21:39:55 +08:00 via iPhone
    这是个大佬
    slanternsw
        10
    slanternsw  
       2019-11-29 22:09:07 +08:00
    歪楼,webrender 性能真好
    cjq8z
        11
    cjq8z  
       2019-11-30 05:39:55 +08:00 via Android
    @guog Samsung Galaxy S10+ chrome 并没有闪退,只是载入时候慢了一些。你手机该换了。
    superrichman
        12
    superrichman  
       2019-11-30 10:49:48 +08:00 via iPhone
    我几年前的想法:文件不拆一时爽, 一直不拆一直爽。

    现在我会去想办法把大文件都尽可能拆成小模块,组织起来方便。
    iorilu
        13
    iorilu  
       2019-11-30 22:45:31 +08:00
    这事为了用户方便的, 直接拷贝, 不用 pip
    coolzilj
        14
    coolzilj  
    OP
       2019-12-01 02:01:19 +08:00 via Android
    @ClericPy 谢谢,其实就是想知道作者是咋想的
    wuwukai007
        15
    wuwukai007  
       2019-12-01 14:45:44 +08:00 via Android
    @cjq8z note10 打开闪退
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3400 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:57 · PVG 19:57 · LAX 03:57 · JFK 06:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.