Python老兵的新征程
kingbill
9年前
<p>用Python已经有近9年了, 大多数时候都是用它来做些内部使用的小工具,写的都比较随意(唯一的正式项目经历,就是写一个用户评论搜索引擎,那个网站已经关闭了,当年的页面可在<a href="/misc/goto?guid=4959671993850945927" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://web.archive.org/web/20121001144102/http://www.review.gs/', 'archive.org']);">archive.org</a>看到)。 做这些开发时,开发的方法思路其实和十来年前没啥差别,当然有了些更好的辅助工具,例如Git,Pycharm等, 但主要方法没啥大变化。 这周用Python做另一个正式项目,尝试采用了和以前都不一样的方法,通过这一个星期学习到了不少新东西。</p> <ol> <li>用<a href="/misc/goto?guid=4959550648700676202" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://github.com/yyuu/pyenv', 'pyenv']);">pyenv</a>来管理python的不同版本,<br> 因为项目用了Python 3.5, 而系统是Python 2.7</li> <li>用了Python 3.5的<a href="/misc/goto?guid=4959671993965199435" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://docs.python.org/3/library/typing.html', 'Type Hints']);">Type Hints</a></li> <li>用<a href="/misc/goto?guid=4959671994048045801" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://github.com/blue-yonder/pyscaffold/tree/v2.5.5', 'PyScaffold']);">PyScaffold</a>初始化了项目<br> 以前也用Django来生成过web项目,但非web项目还是第一次用生成器生成。</li> <li>用<a href="/misc/goto?guid=4958977231322902783" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://github.com/commitizen/cz-cli', 'commitizen']);">commitizen</a>来写git commit message, 这样能够用<a href="/misc/goto?guid=4959671994161406605" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://github.com/commitizen/cz-conventional-changelog', 'cz-conventional-changelog']);">cz-conventional-changelog</a>自动生成change log</li> <li>用<a href="/misc/goto?guid=4959671994243591178" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://www.pylint.org/', 'pylint']);">pylint</a>,<a href="/misc/goto?guid=4958858952893059801" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/flake8', 'flake8']);">flake8</a>做代码检查</li> <li>用<a href="/misc/goto?guid=4959671994359282351" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/tox', 'tox']);">tox</a>做测试</li> <li>在Git pre commit hook中加入pylint,flake8,tox检查</li> <li>用<a href="/misc/goto?guid=4958193864039269840" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'http://www.sqlalchemy.org/', 'SQLAlchemy']);">SQLAlchemy</a>来做ORM, 用<a href="/misc/goto?guid=4959671994471924881" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/alembic', 'Alembic']);">Alembic</a>做数据库的版本升级管理<br> 以前都是直接写SQL -_-;,当然是参数化的。 这次先用phpMyAdmin直接在mysql上设计数据表,然后用<a href="/misc/goto?guid=4959671994549571970" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/sqlacodegen', 'sqlacodegen']);">sqlacodegen</a>生成model代码,再用Alembic做版本管理。</li> <li>用<a href="/misc/goto?guid=4958533335774215227" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://travis-ci.org/', 'Travis']);">Travis</a>做系统集成</li> <li>用<a href="/misc/goto?guid=4959624776542454349" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/pip', 'pip']);">pip</a>做依赖管理 <ol> <li>用pip freeze > requirements.txt 来记录依赖</li> <li>再用pip install -r requirements.txt来重建依赖环境</li> <li>正在研究<a href="/misc/goto?guid=4959615836652409826" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://pypi.python.org/pypi/virtualenv', 'virtualenv']);">virtualenv</a>以实现依赖的隔离</li> <li>另:以前研究过Docker,遇到些问题没能搞定,有经验的还请指点一二</li> </ol> </li> <li>和<a href="/misc/goto?guid=4958862482165973688" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'https://slack.com/', 'Slack']);">Slack</a>集成<br> 现在已经能从Slack里看到Github的提交,Pull request提醒,并能看到Travis持续进程测试结果。上线时还要实现从聊天频道里直接下指令部署。</li> </ol> <p>感觉现在开发的思想,哲学都比起20年前,甚至比起10年前都有了根本的改变,我们正迎来程序开发上的工业革命,生为这个时代的程序员是何其的幸福啊 :)。</p> <p>来自:<a href="/misc/goto?guid=4959671994741703629">扫地老僧</a></p>