Python way to explore https:https://cdn.v2ex.com/navatar/8613/985e/90_normal.png?m=1648339948 https:https://cdn.v2ex.com/navatar/8613/985e/90_large.png?m=1648339948 2025-12-10T01:39:34Z Copyright © 2010-2018, V2EX Python 有没有 subprocess 的替代品,被 subprocess 折腾死了. tag:www.v2ex.com,2025-12-09:/t/1177771 2025-12-09T05:27:39Z 2025-12-10T01:39:34Z simple2025 member/simple2025 系统是 win10,

我现在遇到的问题,我在 invoke 里有个 check_alive 的函数,里面是检查 我虚拟机的某个网址网页能不能访问,如果不能,那么调用 vagrant reload 重启虚拟机.

现在遇到了问题, 调用 vagrant reload 有时候会卡在那里. 所以我想想要不要添加一个超时,然后我试了几种

  1. 使用 subprocess.popen,然后 communicate 那里加 timeout 参数,没用

  2. 使用 func_timeout 库,也没有用.

今天又出现了,我尝试使用 invoke 的 run,再试试,你们有没有什么好的方法,这个调用外部命令怎么这么麻烦呢?

]]>
问个汉字处理的问题 tag:www.v2ex.com,2025-12-04:/t/1176823 2025-12-04T02:14:43Z 2025-12-04T11:22:26Z guoguobaba member/guoguobaba 有个文件,包含'⻝' 11997 和食是相同的字,但是是不同的编码,

⻝ (U+2EDD)和 食 (U+98DF)的关系是:它们是同一个字的不同视觉表现形式,但 Unicode 指定 U+98DF 为标准形式,U+2EDD 为其异体形式(特别是作为部首时)。

问了一下 AI ,都是让枚举做一个 map ,有没有统一的转化这样汉字的方案,unicodedata.normalize 不行。

]]>
有哪些 Python 3.14 Free-Threading 多线程性能分析方案? tag:www.v2ex.com,2025-11-27:/t/1175519 2025-11-27T15:07:31Z 2025-11-27T15:07:31Z Leon6868 member/Leon6868 如题,没找到对代码入侵小、能处理多线程的解决方案,请问大家都是怎么解决的呢?

]]>
招募一位 FastAPI 工程师,作为技术伙伴 tag:www.v2ex.com,2025-11-26:/t/1175211 2025-11-26T07:59:46Z 2025-11-25T15:58:46Z Daming798 member/Daming798 我们在做什么

我们正面向中小企业和初创团队,做一款专注于用户反馈的管理分析工具 —— Feedalyze 。

它能多渠道统一收集、高效处理、可视化分析用户反馈,帮助中小企业洞察用户需求,加速产品迭代。地址: https://feedalyze.com/

Feedalyze 对标国外的 UserVoice + Dovetail ,希望成为国内企业首选的用户反馈管理分析平台。

解决的问题

1 、产品开发迭代常靠猜测或经验,而非用户真实需求。(如果参与过中小企业产品研发,就能理解这点)

2 、在收集、处理和分析用户反馈,调查用户需求时,企业成本高昂

3 、难以及时洞察用户需求,影响产品迭代速度和决策正确率

4 、缺乏可量化的数据支撑,产品方向容易偏离市场需求等

为什么值得加入?

你将负责

希望你

我们提供

我们暂未提供

但我们提供更多

备注

如果你对这个机会感兴趣,欢迎加微信一起聊聊,吃个饭。添加时请备注:姓名 + FastAPI

我的微信:M-ing2020

]]> 为什么 Python 的包管理这么难用,比 node 的 npm 难用一万倍,每次进入项目都要手动执行一下 conda activate xxx,难道就没有默认的 Python 项目级别的依赖吗? tag:www.v2ex.com,2025-11-25:/t/1174867 2025-11-25T03:18:14Z 2025-11-27T10:05:40Z arnoldnuo member/arnoldnuo chatgpt 也没给一个实用的方案,你们都是怎么管理自己的 python 环境的?

]]>
网上找了个流出的 Python 程序,想过下是否被污染了 都有什么推荐的办法啊? tag:www.v2ex.com,2025-11-23:/t/1174561 2025-11-23T16:51:47Z 2025-11-23T17:51:47Z wxmomomowx member/wxmomomowx 有什么监控/扫描程序推荐吗? python 语言 ]]> 有感于 Golang,如何用 3~5 个问题,识别 Python 开发者的技术素养? tag:www.v2ex.com,2025-11-17:/t/1173212 2025-11-17T02:57:54Z 2025-11-17T06:39:10Z susunus member/susunus fastapi tortoise orm 前端管理框架有哪个好用的 tag:www.v2ex.com,2025-11-17:/t/1173180 2025-11-17T01:50:10Z 2025-11-17T01:50:10Z guoguobaba member/guoguobaba 目前是 fastapi+tortoise orm ,考察了几个

django admin 有点重

fastapi-admin: 折腾得很麻烦,

fastadmin: 这个是最简单的,但是功能有点简陋,很多前端的功能没有实现。

]]>
小白求教个循环导入的问题 tag:www.v2ex.com,2025-11-10:/t/1171662 2025-11-10T03:24:39Z 2025-11-11T04:01:08Z dylyft member/dylyft 最近刚开始学 python 和 fastapi, 按照 fastapi 教程学习时遇到个问题, 因为使用 sqlmodel 的 relationship, 导致两个模型文件相互导入, 然后报错了, 根据官方文档的解决办法, 使用 TYPE_CHECKING 和字符串版本类型后暂时解决了报错.
但是当接口通过 response_model 指定了数据模型(非表模型)作为返回类型时, 又出现了报错, 报错提示如下:

`TypeAdapter[typing.Annotated[app.models.teams.TeamPublicWithUser, FieldInfo(annotation=TeamPublicWithUser, required=True)]]` is not fully defined; you should define `typing.Annotated[app.models.teams.TeamPublicWithUser, FieldInfo(annotation=TeamPublicWithUser, required=True)]` and all referenced types, then call `.rebuild()` on the instance. 

求各位大佬帮忙看看, 哪里有问题. python 版本用的是 3.12, 具体代码如下
models/users.py

from typing import TYPE_CHECKING, Any, Optional from sqlmodel import Field, Relationship, SQLModel if TYPE_CHECKING: from .teams import Team, TeamPublic class UserBase(SQLModel): username: str = Field(index=True, max_length=255, unique=True) email: str | NOne= Field(default=None, index=True, max_length=255) is_active: bool = True is_superuser: bool = False full_name: str | NOne= Field(default=None, max_length=255) team_id: int | NOne= Field(default=None, foreign_key="team.id") class User(UserBase, table=True): id: int | NOne= Field(default=None, primary_key=True) hashed_password: str team: Optional["Team"] = Relationship(back_populates="members") class UserPublic(UserBase): id: int class UserPublicWithTeam(UserPublic): team: Optional["TeamPublic"] = None 

models/teams.py

from typing import TYPE_CHECKING, Any, List from sqlmodel import Field, Relationship, SQLModel if TYPE_CHECKING: from .users import User, UserPublic class TeamBase(SQLModel): name: str = Field(max_length=255) class Team(TeamBase, table=True): id: int | NOne= Field(default=None, primary_key=True) members: List["User"] = Relationship(back_populates="team") class TeamPublic(TeamBase): id: int class TeamPublicWithUser(TeamPublic): members: List["UserPublic"] = [] 

router/users.py

# 用户相关接口 from sqlmodel import and_, select from app.api.deps import SessionDep from app.models.users import ( User, UserPublicWithTeam, ) from app.new_router import new_router router = new_router(prefix="/users", tags=["用户管理"]) @router.get("/{id}", summary="获取用户详情", response_model=UserPublicWithTeam) async def get_user_api(db: SessionDep, id: int): user = db.exec(select(User).where(and_(User.id == id, User.is_active))).first() return user 

router/teams.py

# 团队相关接口 from sqlmodel import select from app.api.deps import SessionDep from app.models.teams import ( Team, TeamPublicWithUser, ) from app.new_router import new_router router = new_router(prefix="/teams", tags=["团队管理"]) @router.get("/{id}", summary="获取团队详情", response_model=TeamPublicWithUser) async def get_team_api(db: SessionDep, id: int): team = db.exec(select(Team).where(Team.id == id)).first() return team 
]]>
用 Python 写了个异步 MCP Filesystem,小而简,欢迎拍砖 tag:www.v2ex.com,2025-11-06:/t/1171056 2025-11-06T11:48:53Z 2025-11-06T12:48:53Z enrolls member/enrolls 为什么还要做一个 MCP Filesystem 的 Python 实现?

目前 MCP 生态里,很多能力是 Node.js 实现的,Python 这边要么只是封装一层,要么偏同步阻塞。对那种“我就想写个 async 小工具”的场景,其实不太友好:

所以在自己的 MCP 工具里,基于官方协议搞了一个「精简版」实现,主要特点:

可以自行 TODO / 二次开发的方向包括:

Github 项目地址:

mcp-filesystem-python

技术含量不多,纯粹有相同需求的人可以不用再思考太多,直接用,也可以当作组件拼接到其他地方。

]]>
Neovim 的代码检查、补全问题 tag:www.v2ex.com,2025-11-05:/t/1170555 2025-11-05T01:01:10Z 2025-11-05T15:51:11Z superhxl member/superhxl Neovim 采用 nvim-cmp + pyright 进行 Python 代码检查、补全,但是对于复杂的代码,譬如自定义类,继承自父类的一些属性、方法就检测不到,提示错误。如图: 自定义类 MoneyAgent 中有继承自父类 CellAgent 的对象 cell ,cell 具有属性 neighborhood ,pyright 完全意识不到。 请教: 1 、是不是有设置方法可以改进、提升 2 、除了 pyright 或者 nvim-cmp ,是不是还有更好的补全工具? 谢谢,请各位 V 友不吝赐教。

]]>
请教一个关于电报机器人的问题 tag:www.v2ex.com,2025-11-04:/t/1170526 2025-11-04T13:57:03Z 2025-11-05T09:37:18Z WangXXX member/WangXXX 我目前的解决方法是捕获到异常就退出程序,然后 docker 再把它拉起来。。

请问有没有更好的解决方法?

使用的 python 库是 python-telegram-bot
用 run_polling 的方法启动的程序。 ]]>
帮你选择最快的 pip 镜像,告别安装慢 tag:www.v2ex.com,2025-10-31:/t/1169670 2025-10-31T04:48:39Z 2025-10-31T09:40:41Z enrolls member/enrolls pip 默认连接的是位于海外的 PyPI 官方源,网络延迟的时候下载速度非常慢。

所以,直接写了一个 pip fast check pypi

直接安装

pip install -U pip-fc

直接运行

pip-fc 或者 python -m pip-fc

主要功能

]]>
hishel 升级 1.0.0 导致使用 pdm 项目构建失败 tag:www.v2ex.com,2025-10-29:/t/1169136 2025-10-29T05:19:40Z 2025-10-29T05:18:40Z cxhello member/cxhello 使用 pdm 的项目今天突然构建失败了,去官方 issue 搜了下,发现是因为 hishel 升级 1.0.0 导致不兼容。

我的 Dockerfile 解决方案如下

pip install --no-cache-dir -U "pdm==2.25.9" "hishel<1.0.0"

https://github.com/pdm-project/pdm/issues/3657

https://github.com/karpetrosyan/hishel

]]>
开源一个 Python JA3 请求库。可以自定义 JA3 指纹并且内置 1200 多个 JA3 指纹。 tag:www.v2ex.com,2025-10-23:/t/1167751 2025-10-23T01:19:08Z 2025-10-23T04:12:36Z rev1si0n member/rev1si0n 爬虫中可能遇到你什么参数都拼对了但是还是没法请求的情况,没错,你可能是遇到了 JA3 指纹,从 TLS 层面就已经把你识别了,所以再做什么也是无用,放心他能帮你。虽然只是套壳但是能让 Python 直接调用也是很好了,你也可以基于此方案实现更高级的请求库。

Github: https://github.com/rev1si0n/ja3

]]>
Arm64 安装 PyQt5/6,只能选 conda 吗? tag:www.v2ex.com,2025-10-20:/t/1166979 2025-10-20T05:32:02Z 2025-10-20T09:44:00Z ASLant member/ASLant 公司一直用 jetson orin nano 和 NX 设备开发案例,但是需要使用 Python + Qt ,目前一直采用 miniconda3 来安装 PyQt5 这个库,无法使用 pip 直接编译安装,我认为性能是完全够的,8G 内存,但是编译安装 Qt 还是失败。但是 miniconda 有点臃肿,能用是能用,但是不好用,X86 设备都改成了 uv 统一管理,因为开发的案例涉及到环境重置等,uv 和 poetry 这种比较好,可以 100%还原依赖。conda 导出的 yaml 有时候也是会抽风,总是漏个包之类的。但是又离不开 PyQt 。所以 还有招吗? apt 安装的全局,好像不太兼容。

在 arm64 上使用 pip 安装编译 PyQt 库,100%失败,pip 也没有 arm64 设备预编译好的 wheel. conda 在 arm64 设备提供预编译好的 pyqt 库,conda install 是可以直接基于当前 Python 版本安装的,不需要编译.

]]>
Python 爬虫微框架 web-craft tag:www.v2ex.com,2025-10-20:/t/1166906 2025-10-20T02:29:55Z 2025-10-20T10:53:33Z happytaoer member/happytaoer 背景

这两天构思了一个爬虫框架,对外提供 API 创建爬虫任务,然后内部的队列会进行爬虫的消费。只需要实现数据的解析接口就能快速编写爬虫。非常适合需要利用 AI 快速生成爬虫代码的团队。 screenshot.png

这个框架对外提供了 API 接口来创建,非常便利。目前的设计思路就是只需要实现一个 parse 接口,就行了,方便后续 AI 的介入。

后续开发计划

  1. 开放 AI 接口,通过 AI 自动生成爬虫代码
  2. 集成基于 redis 的任务队列
  3. 实现对外输出的接口层,例如爬虫结果转储到 mysql 等。

目前这是一个非常简单清晰的项目,希望和感兴趣的朋友共建这个项目,提升大家的技术影响力,或许对找远程工作也是有帮助的。

项目地址: happytaoer/web-craft: A Python-based modular web scraping framework focused on efficient single URL crawling, supporting asynchronous processing, API services, and highly customizable spider modules.

]]>
请教各位佬们一个奇怪的后端相关的技术问题 tag:www.v2ex.com,2025-10-17:/t/1166457 2025-10-17T07:43:45Z 2025-10-20T18:49:53Z EndlessSummer member/EndlessSummer 最近开发一个新项目 技术栈是 python 服务打包 docker 镜像放到了云上部署 部署上之后没有问题 但是隔了一段时间就会有超时未响应的问题 只要重启容器就立马能正常访问了 这个服务本身也没有多大访问量 请问各位一下排查思路 以及大概哪里会有问题

]]>
迭代器的实际应用场景是什么? tag:www.v2ex.com,2025-10-14:/t/1165216 2025-10-14T12:18:12Z 2025-10-28T05:19:53Z codists member/codists 概述

最近在梳理 iterator ,不得不说, 即使自己写了很多年的代码,我仍然没有在实际应用中看到自定义的迭代器。即使读了很多书,但是这些书中的示例大多是滥竽充数,不具备实际应用意义。所以顺着网线爬上 V 站请教各位。

可迭代对象 & 迭代器定义

可迭代对象

如果一个对象定义了 __iter__() 方法或定义了 __getitem__() 方法,那么这样的对象称为可迭代对象(iterable)。

迭代器

如果一个对象定义了 __iter__() 方法和 __next__() 方法,那么这样的对象称为迭代器(iterator)。

1.后续的讨论都是基于以上两个定义。

2.因迭代器常和可迭代对象结合使用,故引如可迭代对象这一概念,但迭代器的概念先于生成器(generator),在后续的讨论中请勿涉及生成器。

一些示例

示例 1

python 3 的 range() 是一个可迭代对象,其实现使用了迭代器。使用迭代器后不是直接生成列表,节省了内存,体现了迭代器的应用意义。

示例 2

《 Learn Python Programming(4th)》 第 246 页:

class OddEven: def __init__(self, data): self._data = data self.indexes = list(range(0, len(data), 2)) + list(range(1, len(data), 2)) def __iter__(self): return self def __next__(self): if self.indexes: return self._data[self.indexes.pop(0)] raise StopIteration # Testing the OddEven class oddeven = OddEven("0123456789") print("".join(c for c in oddeven)) # 0246813579 oddeven = OddEven("ABCD") # or manually... it = iter(oddeven) # this calls oddeven.__iter__ internally print(next(it)) # A print(next(it)) # C print(next(it)) # B print(next(it)) # D 

该示例虽然创建了一个迭代器,但就功能而言其实就是“将奇数位置的字符放在前半段,将偶数位置的字符放在后半段”,完全没有必要使用迭代器。关于迭代器的实力,本人看到的大多是这样的——毫无实际应用意义,令人深恶痛绝!

问题

问题 1

PEP 234 中写到 iterator 的 virtues 有:

  1. It provides an extensible iterator interface.
  2. It allows performance enhancements to list iteration.
  3. It allows big performance enhancements to dictionary iteration.
  4. It allows one to provide an interface for just iteration without pretending to provide random access to elements.
  5. It is backward-compatible with all existing user-defined classes and extension objects that emulate sequences and mappings, even mappings that only implement a subset of {__getitem__, keys, values, items}.
  6. It makes code iterating over non-sequence collections more concise and readable.

中译版:

如果包含该提案的所有部分,则会以一致且灵活的方式解决许多问题。其主要优点包括以下四点——不,五点——不,六点

  1. 它提供了一个可扩展的迭代器接口。
  2. 它允许对列表迭代进行性能优化。
  3. 它允许对字典迭代进行大幅度性能提升。
  4. 它允许为仅迭代提供接口,而无需假装提供对元素的随机访问。
  5. 它与所有现有的用户定义类和模拟序列和映射的扩展对象向后兼容,即使是仅实现了 {__getitem__, keys, values, items} 子集的映射。
  6. 它使遍历非序列集合的代码更加简洁易读。

上面所列出的优点较抽象,各位能否提供一些具体的例子?

问题 2

各位在实际应用中是否自己实现过迭代器?如果有麻烦提供一些例子。

参考资料

[1] Python Document Glossary ,iterator: https://docs.python.org/3/glossary.html#term-iterator

[2] PEP 234 – Iterators: https://peps.python.org/pep-0234

[3] PEP 234 – 迭代器: https://peps.pythonlang.cn/pep-0234/

]]>
小白求问,刚接触编程领域有什么速成的方式学习吗,学基础阶段并不太想去系统学习. tag:www.v2ex.com,2025-10-12:/t/1164684 2025-10-12T12:58:43Z 2025-10-14T05:12:22Z ljfdeguge member/ljfdeguge 如果找人一对一来学习是不是更好

]]>
𝜋thon ( Python 3.14) tag:www.v2ex.com,2025-10-10:/t/1164315 2025-10-10T16:14:49Z 2025-10-10T20:48:28Z cnbatch member/cnbatch 版本号十分特别,刚好就是 𝜋

已经有人改了代码,为这个版本添加专门的名称:𝜋thon

gh-119535: Support 𝜋thon in Python 3.14 venvs

]]>
Python 3.14 已发布 tag:www.v2ex.com,2025-10-08:/t/1163727 2025-10-08T10:44:24Z 2025-10-09T11:20:07Z w568w member/w568w 重大更新:

  1. 自由线程( PEP 779 )特性已稳定支持。之前在 Python 3.13 中,这一特性需要显式指定编译选项。不过,全局解释器锁( GIL )依然是可选的,而是否要彻底移除 GIL 仍在讨论中( PEP 703 );
  2. 多解释器( PEP 734 )特性已支持。现在,可以在同一个进程中运行多个解释器,每个解释器都有独立的 GIL 。作为 Python 并行编程中减少对 multiprocessing 依赖的又一步,还添加了 InterpreterPoolExecutor 来帮助管理多个解释器的并行;
  3. 官方发布的 macOS 和 Windows 版二进制现已包含 实验性 的即时编译( JIT )器( PEP 744 )。该 JIT 编译器尚处于早期开发阶段,性能表现存在波动:启用后根据工作负载不同,可能产生 10% 的性能下降至 20% 的性能提升;
  4. 模板字符串( t-string ,PEP 750 )支持。这一功能主要是对 f-string 的补充,允许从类似字符串字面量的写法直接创建一个字符串模板对象;
  5. 增量式垃圾回收。循环垃圾回收器现在采用增量式处理。这意味着对于较大的堆内存,最大暂停( Stop The World )时间将减少一个数量级或更多;
  6. 交互式 Shell 支持语法高亮。除非显式禁用,否则从 Python 3.14 起,Python 交互式环境( RHEL )将默认在终端中渲染代码高亮。此外,Shell 还增加了对 import ___ 的自动补全;
  7. asyncio 内省能力。可以使用 python -m asyncio <ps|pstree> <PID> 功能来检查正在运行的异步 Python 程序的 async task 树。

更多可在这里看到: https://docs.python.org/zh-cn/3.14/whatsnew/3.14.html

]]>
fastapi-router-viz, 可视化你的 API 内依赖关系 tag:www.v2ex.com,2025-10-02:/t/1163179 2025-10-02T12:17:35Z 2025-10-07T06:34:03Z tangkikodo member/tangkikodo https://github.com/allmonday/fastapi-router-viz

对于遵循 er 模型来构建视图数据的项目,fastapi-router-viz 可以为了解 api 返回类型间的关系提供快速,直接,可交互的图效果。

可以通过点击节点高亮全部上下游链路, 了解 pydantic class 的上下游依赖情况

alt 点击查看节点的源代码,或者直接在 vscode 中打开

根据 class + field name 来精准定位数据被哪些页面/ 接口使用

]]>
yfinance 获取数据总是 too many request 无法获取价格啊 tag:www.v2ex.com,2025-09-29:/t/1162621 2025-09-29T05:15:57Z 2025-09-30T23:03:48Z emisora member/emisora 这问题都出现半年了。尝试用 AI 解决,给我试了半天还都是 too many request.

我的网络是可以用 gemini cli 之类的,按理说应该不是网络问题啊。

简单测试代码如下:

import yfinance as yf import pandas as pd # 设置永辉超市的股票代码 ticker = "601933.SS" # .SS 表示上海证券交易所 # 创建 yfinance 对象 stock = yf.Ticker(ticker) # 获取实时价格(最新收盘价或当前价格,视市场情况而定) current_price = stock.history(period="1d")["Close"].iloc[-1] # 获取股票的详细信息(包括公司名称等) info = stock.info # 输出结果 print(f"永辉超市 ({ticker}) 的实时价格: {current_price:.2f} CNY") print(f"公司名称: {info.get('shortName', '未知')}") 

运行就直接报错:

 line 11, in <module> current_price = stock.history(period="1d")["Close"].iloc[-1] ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper result = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/base.py", line 91, in history return self._lazy_load_price_history().history(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper result = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/scrapers/history.py", line 178, in history data = get_fn( ^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper result = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/data.py", line 364, in get return self._make_request(url, request_method = self._session.get, user_agent_headers=user_agent_headers, params= params, timeout=timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper result = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/data.py", line 424, in _make_request raise YFRateLimitError() yfinance.exceptions.YFRateLimitError: Too Many Requests. Rate limited. Try after a while. 

这要怎么解决呢,难道 yahoo 的 API 封这么严重啊。有没有知道怎么解决的老兄啊,感谢!

]]>
小白求问,应聘 AI 算法工程师这类岗位应该有什么基础知识 tag:www.v2ex.com,2025-09-17:/t/1159945 2025-09-17T06:54:59Z 2025-09-17T14:55:13Z deng1xin2020 member/deng1xin2020 Celery 不支持类方法吗?静态方法呢 tag:www.v2ex.com,2025-09-15:/t/1159424 2025-09-15T11:08:13Z 2025-09-23T05:24:12Z VforVendetta member/VforVendetta 发现 Celery 4.2.3 不支持类方法

例子:

class Demo:  @app.task  @classmethod  def test(cls):      pass schedule 注册任务: Demo.test
]]>
Easy AI18n | 更好用的 Python3 i18n 库 tag:www.v2ex.com,2025-09-13:/t/1159007 2025-09-13T10:55:21Z 2025-09-13T22:32:01Z zilingmio member/zilingmio 目前已有 i18n 库的痛点

  1. Python 自带的 gettext 不支持动态选择语言 (比如 Bot 需要根据用户选择语言)
  2. 其他库需要手动维护翻译字典, 开发效率低
  3. 都不支持 f-string 语法, 写起来不够优雅, 不够方便

所以, Easy AI18n 诞生了, 解决了以上所有痛点


Easy AI18n 是一个现代化的 Python3 国际化工具库,支持 AI 翻译、多用户场景以及完整的字符串格式化语法,让项目全球化变得更加优雅自然。

https://github.com/z-mio/easy-ai18n


特点

对比

其他 i18n 工具 EasyAI18n
需手动维护翻译字典, 开发效率低 自动提取翻译内容,无需手动维护文件
仅支持部分格式化语法 完全支持所有格式化语法
不支持实时多语言切换,不适用于多用户场景 支持默认语言与多语言切换,适配多用户环境

👥 多用户多语言场景(如 Telegram Bot )

通过自定义语言选择器, 在多用户环境中实现动态语言选择:

/i18n.py:

from pyrogram.types import Message from easy_ai18n import EasyAI18n, PostLanguageSelector class MyPostLanguageSelector(PostLanguageSelector): def __getitem__(self, msg: Message): lang = msg.from_user.language_code return super().__getitem__(lang) i18n = EasyAI18n() _ = i18n.i18n(post_lang_selector=MyPostLanguageSelector) if __name__ == "__main__": i18n.build(target_lang=['en', 'ru']) 

/bot.py:

@bot.on_message() async def start(__, msg: Message): await msg.reply(_[msg]("Hello, world!")) 
]]>
有没有便宜的代理 ip 池啊?用来做爬虫用 tag:www.v2ex.com,2025-09-07:/t/1157599 2025-09-07T06:41:09Z 2025-09-10T20:43:36Z justtokankan member/justtokankan 在爬一些数据,如果请求过于频繁,其实也不是特别频繁,容易被 ip 封禁,有啥好用的免费 ip 池吗?或者付费的也行 tag:www.v2ex.com,2025-09-06:/t/1157547 2025-09-06T16:14:06Z 2025-09-07T00:38:57Z justtokankan member/justtokankan RT ,谢谢各位有经验的大佬

]]>
pycharm debug 的时候如何避免打印对象 堆栈溢出了,可能是循环引用 tag:www.v2ex.com,2025-08-22:/t/1154163 2025-08-22T02:46:18Z 2025-08-22T04:22:10Z harlen member/harlen 如题,代码正常能跑的。但是 debug 模式 pycharm 会自动打印对象。然后就堆栈溢出了, 还看不到具体是什么调用导致的溢出,只有

进程已结束,退出代码为 -1073741571 (0xC00000FD) 的退出码 
]]>
仿照 uv 写了个包管理器,用过的都说好 tag:www.v2ex.com,2025-08-19:/t/1153527 2025-08-19T11:46:06Z 2025-08-21T17:51:07Z LastWise member/LastWise 喜欢的可以 star 一下哈,更快更强

https://github.com/auv-sh/av

]]>
关于 Python 环境可复现性请教 tag:www.v2ex.com,2025-08-15:/t/1152582 2025-08-15T03:09:13Z 2025-08-25T18:54:31Z xgq89757 member/xgq89757
目前的做法是将环境做成了基础镜像,每次交付都基于这个镜像打包。不同版本有增量依赖或版本调整时在 Dockerfile 中单独 pip install ,但这也存在基础镜像管理和基础镜像复现的问题。 ]]>
有没有一起学深度学习和 Transformer 的 tag:www.v2ex.com,2025-08-14:/t/1152415 2025-08-14T09:21:06Z 2025-08-15T21:16:28Z moxiaowei member/moxiaowei 有没有一起学深度学习和 Transformer 的,或者需要写论文的,我买了套我觉得还不错的课,我已经基本上学完了,也手撸了几个 CNN 、LSTM 、Transformer 的模型。但是课 3K 买的,就想找几个想学的,我好回点本!

]]>
屎山配着详尽文档,真想提桶跑路了。 tag:www.v2ex.com,2025-08-12:/t/1151962 2025-08-12T20:48:08Z 2025-08-12T21:54:09Z xuegy member/xuegy 我想了很久也没想明白为什么要手撸一个支持传入 numpy 进行运算的矩阵类而不是直接用 numpy ?

]]>
写量化交易的代码,如掘金量化用哪个 AI 编程模型比较适合 tag:www.v2ex.com,2025-08-12:/t/1151814 2025-08-12T05:23:17Z 2025-08-17T23:53:36Z rangoBen member/rangoBen PEP 802 – Display Syntax for the Empty Set tag:www.v2ex.com,2025-08-09:/t/1151185 2025-08-09T03:30:44Z 2025-08-09T09:22:38Z XIVN1987 member/XIVN1987 >>> type({/}) <class 'set'> >>> {/} == set() True

感觉好奇怪的语法,,为啥非要引入一个空 set 语法??有啥特别大的好处吗?? set() 也挺短的啊??

]]>
有没有爬虫王!可以教下我 Websocket 怎么爬吗? tag:www.v2ex.com,2025-08-08:/t/1150953 2025-08-08T03:12:35Z 2025-08-11T13:25:38Z JoryJoestar member/JoryJoestar 想要爬的网站: https://crushon.ai/character/7e388767-63c7-45e3-b922-53458b4ae4f7/chat

一直请求 403 ,难受,搞不定,用无头 playwrihgt ,又不过 cloudflare ,请求又被拒绝,难搞!

想请教一下 v2 的各位佬,怎么爬这个网站聊天对话。

]]>
这 AI,让他帮我改个算法,好家伙把我关键代码给我误删了! tag:www.v2ex.com,2025-08-06:/t/1150473 2025-08-06T11:14:05Z 2025-08-06T15:37:02Z AlanZ1997 member/AlanZ1997 让他改个算法代码,把我代码给删错了,导致整个工程出现不可控问题

]]>
大佬们有用过 agno 和 langgraph 的吗,做类 cursor 的 agent,技术栈二选一哪个好一点 tag:www.v2ex.com,2025-08-06:/t/1150462 2025-08-06T10:25:00Z 2025-08-06T13:42:59Z zhengfan2016 member/zhengfan2016 如题,选技术栈 ing ,不知道有没有坑

]]>
[ Python ] 批量把代码加入到 head 元素里面。 tag:www.v2ex.com,2025-08-04:/t/1149792 2025-08-04T06:26:06Z 2025-08-04T06:53:02Z xkwdm member/xkwdm 日常需要把谷歌跟踪代码加入到 head 元素里面,所以借助 AI 写了一个小工具。

1 、把需要加入的内容保存到 GACode.txt 文件中

2 、执行代码,输入目录即可。(只会修改 html 扩展名的文件)

代码

import os import re import sys from pathlib import Path def get_resource_path(relative_path): """获取资源文件的绝对路径,支持 PyInstaller 打包""" try: # PyInstaller 创建临时文件夹,并将路径存储在_MEIPASS 中 base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) def check_and_add_google_analytics(): """ 检查所有 HTML 文件是否包含 Google Analytics 代码,如果不存在则添加 """ # 初始化统计信息 stats = { 'total': 0, 'modified': 0, 'skipped': 0, 'errors': 0 } # 从 GACode.txt 文件读取 Google Analytics 代码 ga_code_file = get_resource_path('GACode.txt') try: with open(ga_code_file, 'r', encoding='utf-8') as f: ga_code = f.read().strip() except FileNotFoundError: print(f"错误:找不到文件 {ga_code_file}") stats['errors'] = 1 return stats except Exception as e: print(f"错误:读取 GA 代码文件时出错: {str(e)}") stats['errors'] = 1 return stats if not ga_code: print("错误:GA 代码文件为空") stats['errors'] = 1 return stats # 获取当前目录下所有 HTML 文件 html_files = list(Path('.').glob('*.html')) stats['total'] = len(html_files) print(f"找到 {len(html_files)} 个 HTML 文件") for html_file in html_files: print(f"\n 处理文件: {html_file}") try: # 读取文件内容 with open(html_file, 'r', encoding='utf-8') as f: cOntent= f.read() # 检查是否已经包含 Google Analytics 代码 if 'googletagmanager.com/gtag/js' in content: print(f" ✓ {html_file} 已包含 Google Analytics 代码,跳过") stats['skipped'] += 1 continue # 查找</head>标签的位置 head_end_pattern = r'</head>' match = re.search(head_end_pattern, content, re.IGNORECASE) if not match: print(f" ✗ {html_file} 未找到</head>标签,跳过") stats['errors'] += 1 continue # 在</head>标签前插入 Google Analytics 代码 head_end_pos = match.start() new_cOntent= ( content[:head_end_pos] + ' ' + ga_code + '\n' + content[head_end_pos:] ) # 写入修改后的内容 with open(html_file, 'w', encoding='utf-8') as f: f.write(new_content) print(f" ✓ {html_file} 已成功添加 Google Analytics 代码") stats['modified'] += 1 except Exception as e: print(f" ✗ 处理 {html_file} 时出错: {str(e)}") stats['errors'] += 1 print("\n 处理完成!") return stats if __name__ == "__main__": try: # 获取用户输入的目录路径 current_dir = input("请输入要处理的目录路径: ").strip() # 如果用户没有输入,则使用当前目录 if not current_dir: current_dir = os.getcwd() print(f"当前工作目录: {current_dir}") # 切换到指定目录 try: os.chdir(current_dir) except FileNotFoundError: print(f"错误:目录 '{current_dir}' 不存在") input("\n 按回车键退出...") exit(1) except PermissionError: print(f"错误:没有权限访问目录 '{current_dir}'") input("\n 按回车键退出...") exit(1) # 检查是否在包含 HTML 文件的目录中 html_files = list(Path('.').glob('*.html')) if not html_files: print("当前目录下没有找到 HTML 文件,请确保在正确的目录下运行此脚本") input("\n 按回车键退出...") exit(1) # 执行添加 Google Analytics 代码的操作 stats = check_and_add_google_analytics() # 检查返回值是否有效 if stats is None: print("\n⚠ 函数执行异常,无法获取统计信息") stats = {'total': 0, 'modified': 0, 'skipped': 0, 'errors': 1} # 显示统计结果 print("\n=== 执行统计 ===") print(f"总文件数: {stats['total']}") print(f"成功修改: {stats['modified']} 个") print(f"已存在跳过: {stats['skipped']} 个") print(f"处理失败: {stats['errors']} 个") if stats['modified'] > 0: print(f"\n✓ 成功为 {stats['modified']} 个 HTML 文件添加了 Google Analytics 代码!") elif stats['total'] > 0 and stats['skipped'] == stats['total']: print("\n✓ 所有 HTML 文件都已包含 Google Analytics 代码,无需修改。") else: print("\n⚠ 没有成功修改任何文件,请检查文件格式或权限。") print("\n=== 程序执行完成 ===") input("\n 按回车键退出...") except KeyboardInterrupt: print("\n\n 程序被用户中断") input("\n 按回车键退出...") except Exception as e: print(f"\n 程序执行时发生未知错误: {str(e)}") input("\n 按回车键退出...") 

我就不发成品了,自行打包哈

]]>
pycharm 使用 uv 作为环境管理,出现导入划红线。 tag:www.v2ex.com,2025-08-02:/t/1149487 2025-08-02T08:59:45Z 2025-08-04T08:24:46Z llsquaer member/llsquaer 看图

logger ,requests 都属于第三方模块。但是 logger 就是红线。最初以为是环境没识别,但是运行都是正常的,这事情很费解啊。有解决办法么?

咋个没图,贴个地址吧 https://imgur.com/C7tWIvh

]]>
下面这篇“ Python 3.14 new features”内容好像是假的,,谁这么无聊搞这种东西?? tag:www.v2ex.com,2025-07-31:/t/1148957 2025-07-31T02:28:36Z 2025-08-01T18:20:33Z XIVN1987 member/XIVN1987 前几天在知乎上看到这篇文章,,当时完全没考虑文章的真实性,,只是觉得 Python 怎么加这么多奇葩语法,,要完。。

今天稍微搜了下,,发现文章中提到的 PEP 727 、PEP 740 并不是文章中描述的内容。。似乎整篇文章都是胡编乱造的。。

搞不懂谁会写这种东西??难道是 AI 生成的??

]]>
如何分离屎山中 Union 类型的变量 tag:www.v2ex.com,2025-07-31:/t/1148903 2025-07-31T00:12:38Z 2025-08-01T15:47:38Z xuegy member/xuegy 正在处理一座屎山,大概情况是这样的。有一个自定义的class X,需要改掉的东西注释写的是y=Union[X, str],实际情况也是两种类型到处都混在一起根本分不清。后面所有跟X类有关的方法一点注释没写,甚至都不做类型判断,而是大量的使用getattr(y, 'name', y)把水搅得更浑(如果y是字符串,没有name,返回字符串本身。否则返回y.name也是一个字符串)。最离谱的是整座屎山还配了一套 30 分钟才能跑完的 pytest 。

现在需要把混乱的y分成确定类型的yy_str,使用 pydantic 强制定义数据类型来一点点排错。然而改了几百行以后,所有跟X有关的方法都被迫改出两种版本的。pytest 不再报类型错误了,却开始出现各种离奇的 bug 挂掉。

有什么更强大的工具可以搞定这件事吗?比如同步检测两个版本的代码,看从哪一步开始两边的数据变得不一致了?

]]>
Django 长耗时任务,调用 ORM 时会出现"MySQL server has gone away"问题如何解决? tag:www.v2ex.com,2025-07-29:/t/1148514 2025-07-29T07:42:20Z 2025-07-29T08:42:20Z a663 member/a663 当 Django 结合异步任务(如 Celery 或者 MQ 等),执行长耗时任务,Django 会为该任务的函数第一次调用 ORM 时分配一条数据库连接,而且这个连接在 ORM 调用结束时不会立即释放,当你在同一个任务(长耗时)里其他地方再次调用 ORM 时,就会出现"MySQL server has gone away"的报错(原因是 MySQL 主动断开的)

官方推荐解决方案: 如果在 Django 的请求-响应周期之外的长运行进程中创建了连接,该连接将保持打开状态,直到显式关闭或超时发生。你可以使用 django.db.close_old_connections() 来关闭所有旧的或不可用的连接。

我觉得太 low 了。理论上,只需要设置每次调用 ORM 开始前获取一条连接,调用结束后关闭连接即可解决这个问题。

有没有大佬遇到过这个问题?如何更加优雅的解决?

]]>
PySide6 竟然能开发安卓 APP 了 tag:www.v2ex.com,2025-07-19:/t/1146375 2025-07-19T15:00:14Z 2025-07-19T21:05:59Z OSmile555 member/OSmile555 最近发现了这个事情。有点惊讶!

]]>
更现代的 pytest tag:www.v2ex.com,2025-07-18:/t/1146074 2025-07-18T03:43:51Z 2025-07-18T07:46:04Z heyzenxu member/heyzenxu pytest 的原生展示信息这么多年了也没怎么变, 我参考 nextest 写了插件 pytest-modern, 提供更现代化的输出

]]>
psycopg2 查询 sql 时报错 tag:www.v2ex.com,2025-07-17:/t/1145738 2025-07-17T02:02:26Z 2025-07-17T06:01:16Z Soulboy member/Soulboy V 友们,帮忙给点排查意见

问题不是必现的,偶尔就出现一次

问了 AI 给的也是模糊的的回答

连接 pg 数据库用的是 pool = PooledDB()

执行代码如下

 def dbQuery(self, sql): cOnn= pool.connection() cur = conn.cursor() cur.execute(sql) result = cur.fetchall() cur.close() conn.close() return result 

报错如下:

could not receive data from server: Software caused connection abort (0x00002745/10053) Traceback (most recent call last): File "aaTestV5.py", line 844, in process input_values = self.getInputValuesInfo() File "aa_process.py", line 117, in getInputValuesInfo order_list = super(tf, self).getInputValuesInfo() File "aaTestV5.py", line 555, in getInputValuesInfo results_fromno, no_list = self.getFromnoResult() File "aa_process.py", line 366, in getFromnoResult return self.getFromnoResultInner(False) File "aa_process.py", line 320, in getFromnoResultInner results_fromno, no_list = super(tf, self).getFromnoResult(True) File "aaTestV5.py", line 119, in getFromnoResult result_fromno1 = self.dbQuery(query_sql) File "aa_process.py", line 391, in dbQuery return super(tf, self).dbQuery(sql) File "aaTestV5.py", line 823, in dbQuery cur.execute(sql) File "\python\lib\site-packages\dbutils\steady_db.py", line 598, in tough_method result = method(*args, **kwargs) # try to execute psycopg2.DatabaseError: could not receive data from server: Software caused connection abort (0x00002745/10053) 
]]>
Python 官方发布版本管理工具 pymanager - 类似 pyenv, uv tag:www.v2ex.com,2025-07-14:/t/1145021 2025-07-14T02:43:53Z 2025-07-29T10:08:31Z iorilu member/iorilu https://github.com/python/pymanager

好像是刚发布的, 没看到有人讨论, 我也是昨天看到的

目前只支持 windows , 但官方产品应该以后会支持 linux, mac 把

官方总算认识到 python 的版本管理是个问题了

]]>
如何使用程序识别视频里面是否含有水印、字幕? tag:www.v2ex.com,2025-07-10:/t/1144381 2025-07-10T12:28:48Z 2025-07-18T22:43:28Z nikan999 member/nikan999 水印是未知的,有没有相关模型或者工具可以识别呢

]]>
极短时间内找出目录下所有带 vba 代码的 excel 文件,并把它们转换成没有 vba 代码的 excel 文件 tag:www.v2ex.com,2025-07-08:/t/1143886 2025-07-08T22:32:05Z 2025-07-11T08:14:05Z chen1star member/chen1star win11 中有一个文件目录,这个文件目录下有很多子目录以及子目录的子目录等等,在这些目录中有许多带 vba 代码的 excel 文件,也有许多不带 vba 的 excel 文件,大约几十万个,这些 excel 文件的版本不一样。现在需要编写一个程序,在极短时间内找出目录下所有带 vba 代码的 excel 文件,并把它们转换成没有 vba 代码的 excel 文件,保持原来的文件版本和原来的文件名,大家有什么好的方案?

]]>
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86