※ 引述《chin2049 (YesOrNo)》之銘言:
: 環境基本上都設定好了
: 作者有確認過
: 但還是Error
: 作者也不明白問題出在哪
: 原始碼及執行結果如下
: https://i.imgur.com/udLavmA.png
: 有版友有想法嗎?
好,我也測了一下發現確實有這問題。我幫你(以及原作者)找了一下,我猜問
題出在這裡。websockets的官方文件2.x版本裡面有提到這件事:
https://websockets.readthedocs.io/en/2.2/
The websockets.http module provides HTTP parsing functions. They’re
merely adequate for the WebSocket handshake messages. They’re used by
the sample client and servers.
These functions cannot be imported from websockets; they must be
imported from websockets.http.
所以websockets.http是一個獨立的module,並沒有被自動import,你需要額外
手動import它。很奇怪的最新版(9.0.1)文件裡面好像沒這段。但不管怎樣,我把
你的Code加一行來測試:
import sys
import websockets.http
from PyPtt import PTT
結果這樣就解決了AttributeError: module 'websockets' has no attribute
'http'這個問題,可以順利執行。
但我不知道為何PyPtt原作者沒有發生這個問題,這可能要他確認一下XD
既然你都問了他,那可以請你順便回報他一下讓他確認看看嗎XD
* 2021/05/07 更新問題實際原因與解決狀況
真實的原因是PyPtt使用到的websockets近期做的一個改版(看9.0的部分):
https://websockets.readthedocs.io/en/stable/changelog.html
The framing, handshake, headers, http, and uri modules in the websockets
package are deprecated. These modules provided low-level APIs for reuse
by other WebSocket implementations, but that never happened. Keeping
these APIs public makes it more difficult to improve websockets for no
actual benefit.
websockets.http模組被棄用(雖然仍然可以手動import)。而PyPtt作者們信任
websockets,結果沒有特別去鎖相依版本,就導致「只有新安裝PyPtt的使用者,才
會因為跟著裝了9.0以後的websockets導致此問題」。
PyPtt辛苦的作者們正在動手處理此版本相依性問題,幸運的原Po應該可以成為
最初也是最後遇到此問題的幸運兒XD