文章摘要
作者因人工智能领域的巨大机会,半年前开始更多使用Python编程。虽然之前仅用于编写小脚本,如抓取YouTube视频元数据的脚本,但Python的便捷性和人性化语法使其逐渐喜欢上这门语言,并认为在AI领域Python是事实上的编程语言。
文章总结
文章总结
标题: 我转向Python并且真的喜欢上了它
发布时间: 2025年7月15日
来源: César Soto Valero的博客
主要内容
转向Python的原因
作者在6个月前开始更多地使用Python,主要原因是为了应对AI领域的巨大机会。Python已成为AI领域的事实标准编程语言。尽管作者之前只用Python编写过一些小脚本,但最近为了构建AI应用(如RAG、Agent、GenAI工具等),他决定认真学习和使用Python。Python的优势
- 生态系统:Python拥有丰富的库和工具,特别适合数据处理和分析。
- 性能提升:通过Cython等优化编译器,Python的性能得到了显著提升。
- 语法改进:Python逐渐隐藏了其历史遗留的“丑陋”语法(如
__init__、__new__等),使其更加简洁和易用。
项目结构
作者倾向于使用单体仓库(monorepo)结构来管理Python项目,包含前后端代码。他认为这种结构简单、易于管理,并且适合个人开发者。项目结构通常包括:.github/:GitHub Actions的CI/CD工作流。.vscode/:VSCode的配置。docs/:项目文档。project-api/:后端API,处理业务逻辑和数据处理。project-ui/:前端UI,通常使用Next.js或React。
Python工具箱
作者分享了他常用的Python工具和库,包括:- uv:Python包管理工具,用于安装和管理依赖。
- ruff:快速Python代码格式化工具,集成了
isort、flake8等功能。 - ty:Python类型检查工具,帮助捕获类型错误。
- pytest:Python测试框架,支持简单的测试用例编写。
- Pydantic:数据验证和设置管理库,帮助管理配置。
- MkDocs:用于生成项目文档的静态网站生成器。
- FastAPI:用于构建RESTful API的框架,具有自动验证和文档生成功能。
- Dataclasses:Python内置功能,用于简化数据容器的创建。
版本控制和CI/CD
- GitHub Actions:用于自动化构建和测试,支持跨操作系统。
- Dependabot:自动检查并更新依赖。
- Gitleaks:防止敏感信息(如API密钥)被提交到仓库。
- Pre-commit Hooks:在提交代码前运行检查和格式化工具。
基础设施管理
- Make:用于自动化常见开发任务,如测试、构建和部署。
- Docker:用于容器化应用,确保开发环境与生产环境一致。作者使用Docker Compose来管理多个容器服务。
结论
作者通过实际项目经验,发现Python在AI开发、数据处理和API构建等方面表现出色。尽管Python在“生产就绪”应用和Jupyter笔记本之间仍存在差距,但通过合理的工具和项目结构,Python已经成为一个强大且令人愉悦的开发语言。
评论总结
Python的普及与集成:
- 评论1指出Python默认集成在大多数Linux发行版中,但在BSD系统中并不包含。macOS曾经默认安装Python 2,但后来被移除。
- 引用:"It’s included in the default install of most desktop/server Linux distros (with plenty of exceptions), but I don’t believe any of the BSDs ship it in their base system."
- 评论15提到,虽然Python解释器在Unix系统中广泛集成,但实际使用中虚拟环境和容器管理工具仍然是必要的。
- 引用:"literally anything beyond 'import json' will likely lead you into the abyss of virtual envs."
- 评论1指出Python默认集成在大多数Linux发行版中,但在BSD系统中并不包含。macOS曾经默认安装Python 2,但后来被移除。
Python的语法与工具:
- 评论3讨论了Python的语法改进,认为
__init__和__new__等核心方法并非“遗留丑陋”,而是Python的核心特性。- 引用:"What exactly is the problem with init or new? @dataclass is very nice syntactic sugar, but are we arguing here that having access to initializer/allocator/constructor dunder methods is 'legacy ugliness'?"
- 评论26认为Python的语法不如Ruby优雅,但其工具和丰富的库使其成为首选。
- 引用:"I really don’t find the Python language elegant at all. I prefer the Ruby syntax. But Python’s tooling, particularly with what Astral is doing (uv, ruff, ty), is so good."
- 评论3讨论了Python的语法改进,认为
Python的包管理与版本问题:
- 评论4指出Python的版本和包管理是一个噩梦。
- 引用:"Python’s version and package management is nothing short of a nightmare."
- 评论14提到Python项目中的依赖管理和版本冲突问题,认为这些约束有助于项目的可维护性。
- 引用:"Everyone had their own Python version, dependencies missing from requirements.txt, three way conflicts between 2 dependencies and the python version."
- 评论4指出Python的版本和包管理是一个噩梦。
Python在AI领域的应用:
- 评论13和20讨论了Python在AI领域的广泛应用,认为这是由于其丰富的库和易用性。
- 引用:"It’s clear (to me) that big money opportunities are all over AI these days. And guess what’s the de facto programming language for AI? Yep, that sneaky one."
- 评论23提到Python在AI领域的地位,特别是PyTorch的应用。
- 引用:"Is this referring at all to to PyTorch. If not, any guesses what the author has in mind."
- 评论13和20讨论了Python在AI领域的广泛应用,认为这是由于其丰富的库和易用性。
Python的调试与维护:
- 评论28指出Python在跨语言调用和调试方面的困难,特别是在与C++等编译语言交互时。
- 引用:"Debugging python can be...painful. If you have a pure perfect environment dedicated to pure python and all the tooling set up, it can be breezy."
- 评论19提到代码中的用户体验问题,认为应该更清晰地提示错误信息。
- 引用:"Presenting the user with 'Missing X OR Y' when there’s no reason that OR has to be there massively frustrates the user."
- 评论28指出Python在跨语言调用和调试方面的困难,特别是在与C++等编译语言交互时。
总结:Python因其易用性、丰富的库和在AI领域的广泛应用而受到广泛认可,但其包管理、版本控制和调试问题也备受诟病。尽管语法不如某些语言优雅,Python的工具和生态系统使其在许多场景下成为首选。