Tag: Python

PEP 582 的开发日志(续)

编程

这篇文章是PEP 582的开发日志的后续,因为按照之前的实现方法,有几个缺陷: 为了可执行文件能直接全局运行,需要在文件里塞私货 需要魔改lib目录下的site.py,可能造成冲突 但是,非常Exciting地,现在PDM的PEP 582可以说是完全态了!先看下Demo:

Meetup首秀,Live coding翻车

随笔

由于疫情的关系,今年的Python Meetup得以在线上举行,我也头一回报名了演讲。视频录像:https://www.bilibili.com/video/BV1KT4y1J7PUSlides地址:https://slides.fming.dev/pep582Live coding仓库地址:https://github.com/frostming/package-manager-demo现在开始

从 Python 的魔法方法说开去

编程

一天我在群里看到这样一个有意思的Python现象:

使用 GitHub Actions 实现博客自动化部署

编程

如果大家以前是用过静态博客,比如Hugo、Hexo,可能配置过自动部署,也就是提交代码到源文件分支,自动生成静态文件提交到静态分支。静态博客的部署都是基于文件,目标只是一个Git仓库,一切都比较自然。那么如果是喜欢折腾,使用了动态博客呢?这里就涉及到服务器远程登录了。下面介绍一下我使用的方法。

PEP 582的开发日志

编程

PEP 582 是Python的一个隔离项目环境的提案。PDM作为现有的唯一一个具有完备PEP 582支持的包管理器,在实现的过程中也并非一帆风顺。本文将介绍一些关键PEP 582特性的实现方法和历程。

浅谈 Python 库的插件系统设计

编程

上一篇文章介绍了可选配型插件的实现的例子,这篇文章继续说说安装即生效的插件原理。

浅谈 Python 库的插件系统设计

编程

插件(Plug-in),扩展(Extension)或增件(Addon),都差不多指的是一个东西:为一个已有软件增添额外功能的组件。给软件设计一个易用和强大的插件系统,能让你的软件寿命更长,让整个社区来共同建设,符合开源的精神。

PDM - 一款新的 Python 包管理器

编程

去年临近跨年的某一天,一个包管理器突然在脑海中形成了蓝图。粗略地估计了一下我的编码能力,我认为这在我的能力范围之内,于是尽管年底非常忙,还要忙着晋升答辩的事情,我还是腾出空(摸鱼)写下了我的第一行代码。

Flask 博客接入第三方登录

编程

在上一篇文章中我留了一部分内容,就是如何给评论登录接入第三方登录。我不希望来访问我博客的用户有太大的登录成本,否则本想留下些话的人,就会被挡在这个门槛之外。Flask不像Django一样有各种现成的组件可以选用,Flask的各种扩展也不那么「开箱即用」。在我的博客项目中,我选用的是Authlib,它是国内的一名Python资深开发者@lepture开发的一款全面完善的OAuth认证库。大家可能在别

使用 Flask 做一个评论系统

编程

因为我博客使用的Disqus代理服务下线,博客的评论系统可能有一阵子没有工作了。惭愧的是我竟然最近才发现,我的工作环境一直是没有GFW存在的,发现是因为有个朋友为了留言给我不惜通过赞赏1元钱的方式。赞赏功能也是我最近才上的功能,但我怎么是这么一个无良的博主呢,我认为一个好的评论交流环境还是非常有必要的。但是自建评论还是换用其他墙内友好的评论系统,我还是纠结了一阵的,大致上我有这么几个要求:主要服务

我的Python环境设置

编程

网上看到一篇博文,我突然也想写一下自己正在使用的Python环境设置,以及对应的工具链。众众众所周知,Python环境管理是个很大很大的坑,坑里面有无数新人or老司机的尸体。而Python环境管理的工具又五花八门,所以可能每个人的设置都不尽相同。我列出的我使用的工具链,至少最大地满足了自己的需求,但不一定满足所有人的需求。但我自认为在Python环境管理方面颇有心得,所以有一定的参考价值。我的需求

Flask前后端分离实践:Todo App(3)

编程

前序文章Flask前后端分离实践:Todo App(1)Flask前后端分离实践:Todo App(2)本文项目地址: https://github.com/frostming/flask-vue-todo作者按: 几天前我收到一封邮件,有读者说看了我的前后端分离实践的文章获益很多。然而我却丧尽天良的断更了?不行不行,我不是这样的人,所以一年后,我再补上这个系列最后一篇文章吧。CSRF防护如果你们

Pip trusted_host问题记录

编程

问题定位一日我在Pipenv上收到一个issue: 用户说Pipenv执行的pip命令中--trusted-host缺少了port部分。然后我去扒源码,结果发现有两处同样的函数:[1][2]逻辑不一致。顿时感觉事情没那么简单。于是我本地搞了一个pypi server, 并用自签名支持了https,然后用pip测试1:BASH$ pip install -i https://localtest.me

Pipenv有什么问题

编程

这不是我第一次写Pipenv相关的文章,也相信不是最后一次,前两篇我用的是英文,(浅陋地)分析了Pipenv和Poetry的优劣,至今仍是我博客访问量最高的文章。今天是因为在知乎上看到两位朋友写的两篇文章(链接我放在文末了),吐槽了一通以后推荐大家不要使用Pipenv。说实话,作为核心维护者之一我是有点心酸的,因为他们说的那些问题的确都存在。在本文中我希望从一个核心维护者的角度,总结一下Pipen

使用Flask搭建个人博客

编程

我的个人博客从Hexo迁移到自建主机,主要是为了能自由的增减特性,和随时随地的更新博客(然而并没有)。所以考虑用Python的Web框架来写,由于我最开始是从Flask入门的,对它的源码也最了解,所以就选择了Flask。总的来说,一个个人博客网站,主要包含以下几个功能:文章的保存和展示文章的分类和标签文章的评论管理对于动态博客来说,还有博客的后台部分其中第4部分已经有单独的文章来介绍,使用的是前后

How does it work? -- threading.Condition

编程

继两年前的上一篇文章之后,不靠谱博主终于想起了How does it work这个坑。主要是近期也没有遇到可值得分享的「精巧」的实现。之前其实也过了一遍threading模块的源码,对里面的各种锁也只是有个大概印象,并且它们之前非常像,很容易让人confusing。这次碰到实际需要,于是仔细看了一下源码,发现还是有很多搞头的。当然,你只是使用的话照着例子用就好了不会出错,但还是值得花点工夫弄清里面

全新后台上线

编程

最近几周空余时间都在做博客后台的重构,主要是因为之前匆匆上线的后台略显简陋。这一次重构就是奔着前后端分离去的,也是为了练练自己的前端技能。主体框架使用了国人的Vue Element Admin,框架本身提供了丰富的机制,我做了大量的裁剪,主要保留了文章列表、文章编辑等模块,其他亮点有:主题颜色实时显示更新配置更新立即生效文章配置默认隐藏,更专注于写作全局国际化,选择语言立即生效独立集成工具页面,方

你的 Python 包都装到哪了?

编程

前言写这篇文章是因为最近在Python社区看到,有几个求助频率非常高的问题:我安装了pip为什么运行报找不到可执行文件?import module为什么报ModuleNotFound?为什么我用Pycharm能运行在cmd里运行不了?授人以鱼不如授人以渔,要解决这类问题,你得知道Python是如何找包的。希望看完这篇文章,能有所帮助。(主要还是下次再有人问,我就可以链接甩脸了哈哈)Python是如

A deeper look into Pipenv and Poetry

编程

It is 8 months passed since I posted the article comparing Pipenv with Poetry, which is the most popular article in my blog now. However, it was not a good review of the two tools, I have not even rea

Flask前后端分离实践:Todo App(2)

编程

前序文章Flask前后端分离实践:Todo App(1) 使用Vue.js搭建Todo App本文项目地址: https://github.com/frostming/flask-vue-todo在上一篇文章里我们已经用Flask+Vue搭建了一个可以把数据持久化到服务器的Todo App。那么,为了让多人一起使用这个App,我们需要对数据按用户做隔离,这样就自然需要一个注册/登录界面。在前后端分

Flask前后端分离实践:Todo App(1)

编程

前言:有句老话,叫做「现在都8102年了,你怎么还XXX?」。随着前端工具的越来越完善和好用,现在前端能做的东西,实在太多了。而现在主流的Flask教程,都是基于以往的服务端模板渲染的架构。这在2018年,未免有些过时和笨拙。我曾看过一个用Flask写的Todo项目,每个交互都要向服务端发送AJAX, 甚至连动态添加DOM元素都交由服务端渲染好再用jQuery添加。本系列文章,亦将由一个Todo

Python包管理工作流

编程

凡是一个成熟的软件生态都有它的软件源和对应的包管理工具,Python也不例外,pip就是它的(官方推荐的)包管理工具。可能很多小伙伴都对pip比较熟悉了,那么使用pip会有什么问题呢?使用requirements.txt管理依赖pip最普通的使用方法就是pip install <package_name>,如果要指定版本,可以用pip install <package_name&

Python packaging war: Pipenv vs. Poetry

编程

This is my second post about Python packaging. In the last post, I regarded npm as my ideal packaging management tool because I had limited experience about other tools in other languages. Honestly sa

[译]Python正则表达式拾珠

编程

原文作者:Armin Ronacher 原文链接:http://lucumr.pocoo.org/2015/11/18/pythons-hidden-re-gems/Python标准库中有很多非常恶心的模块,但Python的re模块不是其中之一。虽然它已经很老了而且多年未更新,它仍是我认为的众多动态语言中最好的(正则表达式模块)。对这个模块,我经常能发现有趣的东西。Python是少有的几个,本身没

What's the problem about Python packaging?

编程

I have been using Python as my primary programming language for 4 years. It is elegant, easy coding and reading. I didn't notice the discomfort until I came to know about Node.js. All you need to do t

How does it work - with_metaclass

编程

我在看源代码的时候,经常蹦出这一句:How does it work! 竟然有这种操作?本系列文章,试图剖析代码中发生的魔法。顺便作为自己的阅读笔记,以作提高。 先简单介绍下Python中的元类(metaclass)。元类就是创建类的类,对于元类来说,类是它的实例,isinstance(cls, metaclass)将返回True。Python中的所有类,都是type的实例,换句话说,type是元类的基类。使用type创建一个类的方法如下:

Flask 实现远程日志实时监控

编程

更新于2019.11.18 去除业务相关逻辑 示例代码仓库在 https://github.com/frostming/flask-webconsole-example 前言 在自动化运维系统中,常常需要监控日志,这些日志是不断更新的。本文提供了一种实时日志监控的 Python 实现。主要实现以下功能: 抓取远程机器的终端输出到服务器上。 将服务器的日志更新实时显示到客户端网页上。 文中示例基于 Python 以及 Flask。 主要依赖: Flask Redis 及其 Python 客户端 paramiko

SQLite 爬坑记

编程

作为从零开始的Web开发人员,在项目开发中总是遇到这样那样的坑,其中数据库的坑最多。由于在功能完善过程中需要变换频繁,不可避免地要更改DB Schema,不过我都是能不改尽量不改。逃不过时,只能硬着头皮刚。 故事是这样的,我要把两个表中的某两列的类型由字符型改成列表。在数据库值类型中就是BLOB,ORM中叫做PickleType。数据库使用SQLite,ORM使用SQLAlchemy,并使用基于Alembic的自动化迁移工具,于是就开始了。

如何编写向前兼容的 Python 代码

编程

本文翻译自 Armin Ronacher 的文章 Writing Forwards Compatible Python Code 对于网络应用来说,目前最安全的做法是仍然坚持使用 Python 2.x,即使是新的项目。一个简单的原因是现在 Python 3 还不支持足够多的库,而将已有的库移植到 Python 3 上是一个巨大的工作。当所有人都在抱怨升级到 Python 3 是如此艰难和痛苦的时候,我们如何才能让这件事变得容易一点呢? 对于一个顶层应用来说,如果它的依赖库移植后行为一致,把它升级到 Python 3 就不难了。其实升级到 Python 3 从来都不应该是一件痛苦的事。因此,本文尝试列举一些编写新的代码时应该和不应该做的事。

Python 有序字典的实现

编程

最近在看 requests 源码的时候看到作者使用了 urllib3 中自己实现的OrderedDict类,收获颇多。自己实现一个数据结构往往是最需要算法和优化的地方,各种语法糖黑科技,相当的 Pythonic,看这种代码实在是一种享受。如果要我自己实现的话,自己会想到用一个有序存储的对象(如列表)去 hack 内部的实现,但这样有几个缺点: 列表的插入、删除操作性能不如字典,复杂度是 O(N) 量级的。 自定义类需要继承于dict,没有利用继承的方法特性。 来看看大神是怎么实现的吧。

Python 列表小技巧

编程

Python中的列表和字典一样,都是可变数据类型,与字符串和整型相比,它具有一些独特的特性。在平常使用中, 也会经常遇到一些坑,本文试着举一些例子并说明。

Requests源码阅读v0.8.0

编程

工作两年了,一直用python写一些API之类的东西,自动化框架也有涉及,却一直感觉对个人技能提升缓慢。决定开这个坑,是之前看到@wangshunping的read requests,生动有趣,可惜0.8.0之后没有更新了。待我稍稍有了一点看源码的动力,就想接着下去写。真是漫漫长路啊,4409个commit,1000多个PR,更何况还有珠玉在前,实在没有把握能把这块硬骨头给啃下来,写一点是一点吧。作为python的小学生,一些错误在所难免,希望大家指出,互相讨论。 下面就开始吧!