Replace ctypes.DllGetClassObject and remove DllCanUnloadNow
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- PR 合併指標
- PR 指標待擷取
描述
As far as I can tell, these functions are hooks: third-party code is meant to replace them.
Their implementation in ctypes (i.e. their default behaviour) is to import and call the same-named functions from a third-party library, comtypes.server.inprocserver. This is not good. comtypes should instead register their hook on import.
Here's a possible plan to make the API boundary better without breaking users.
DllCanUnloadNow
While the Python interpreter is running, it is not safe to unload the shared library that contains _ctypes. Therefore:
- The C function
DllCanUnloadNowexported from _ctypes should be changed to always returnS_FALSE. We should change that now, without a deprecation period. (Note that thecomtypeshook already does this.) - We should stop importing and calling
comtypes.server.inprocserver. I'm not sure about the necessary deprecation period, but I think that it should be a non-breaking change and can also be done immediately. Or is someone relying on it for side effects? O_o - Setting and getting the hook should be deprecated. In about Python 3.18 we should stop calling it, and remove it.
DllGetClassObject
This one, on the other hand, sounds like a useful hook. It also looks like an inprocess COM server need a special build so it's not useful to allow multiple hooks -- replacing a global one is enough. Is that so?
If yes:
ctypes.DllGetClassObject(the default implementation) should raise aDeprecationWarning. In about Python 3.18, it should be changed to do nothing, just, returnCLASS_E_CLASSNOTAVAILABLE.comtypesshould be changed: on import, it should replacectypes.DllGetClassObjectwith its own hook.
This should ensure that old versions of comtypes still work as before (until after the deprecation period).
Does that sound reasonable?
cc @junkmd
Linked PRs
- gh-127766
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
首先檢視連結的 pull request gh-127766,以及 issue 中針對 ctypes.DllGetClassObject 和 DllCanUnloadNow 提出的變更。追蹤現有的 ctypes hooks,以及此處所述的 comtypes.server.inprocserver 整合;當 API 和棄用行為達成共識、實作過程未導致 comtypes 意外損壞,並由相關測試涵蓋時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- operating-systems
- Issue 類型
- 重構
- 難度
- 5/5
- 預估耗時
- 一週以上
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 20/100