一個庫,比如kott_tinymce ,想把的依賴庫從kotti升級到kotti2 ,請問我是不是查找替換,把所有的kotti字符替換成kotti2就行了?
kotti和kotti2的包結構、模塊路徑、接口完全一樣,除了import kotti 變成kotti2
如果?kotti?和?kotti2?的包結構、模塊路徑、接口完全一樣,唯一區別就是包名由?kotti
?改成了?kotti2
,那么直接全局查找替換
import kotti
?→?import kotti2
確實是可行的(前提是你確認功能和API完全兼容,沒有其他差異)。
推薦的升級步驟(簡化版)
-
修改依賴
requirements.txt
?/?pyproject.toml
?/?setup.py
?中把kotti
換成kotti2
。
-
代碼中查找替換
- 所有?
import kotti
?改成?import kotti2
- 所有引用?
kotti.
?的地方改成?kotti2.
。你可以用IDE或者文本編輯器的“全局查找替換”功能完成。
- 所有?
-
配置文件確認
- 檢查項目里關于kotti的配置文件(如
.ini
、.yaml
等),確認沒有硬編碼?kotti
,或者調整為?kotti2
。
- 檢查項目里關于kotti的配置文件(如
-
執行測試
- 運行單元測試和集成測試,確認沒有意外問題。
- 做趣味測試(Smoke test)驗證應用啟動和主要功能正常。
-
必要時做回滾方案
- 備份原項目,一旦出現問題可以快速回滾。
需要注意的小細節
-
虛擬環境:最好在一個干凈的虛擬環境里操作,避免舊?
kotti
?包干擾。 -
依賴的第三方庫:你用的其他擴展庫(比如
kotti_tinymce
)是否對?kotti
?做了硬編碼?有些庫可能沒更新?kotti2
,需要檢查并替換。 -
文本中字符串引用:不要忘了檢查代碼里寫的字符串,比如日志、配置中的包名、入口點腳本名等。
總結
如果?
kotti
?與?kotti2
?僅包名不同,其他完全相同,全局替換包名是可行且合理的升級策略。
測試了一下,要比想像的復雜一點,因為無腦查找替換后,有些對應的是路徑,也就是目錄名,這樣就要求那些路徑也要改名....
另外還有些庫測試的時候需要,比如用這個命令測試:
pytest --disable-warnings --disable-pytest-warnings
報錯
_____________ ERROR collecting kotti2_tinymce/tests/test_views.py ______________
ImportError while importing test module '/usr/home/skywalk/github/kotti_tinymce-master/kotti2_tinymce/tests/test_views.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/home/skywalk/minipy312/lib/python3.12/importlib/__init__.py:90: in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
kotti2_tinymce/tests/test_views.py:6: in <module>from kotti2_image.resources import Image
E ModuleNotFoundError: No module named 'kotti2_image'
_____________ ERROR collecting kotti2_tinymce/tests/test_views.py ______________
ImportError while importing test module '/usr/home/skywalk/github/kotti_tinymce-master/kotti2_tinymce/tests/test_views.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/home/skywalk/minipy312/lib/python3.12/importlib/__init__.py:90: in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
kotti2_tinymce/tests/test_views.py:6: in <module>from kotti2_image.resources import Image
E ModuleNotFoundError: No module named 'kotti2_image'
還有報錯
fanstatic.core.UnknownResourceError: Resource file does not exist: /usr/home/skywalk/github/kotti_tinymce-master/kotti2_tinymce/static/kotti2_tinymce.js
將那幾個js文件的kotti改名為kotti后,相關報錯消失,現在就只剩kotti2_image這個報錯了。
所以回頭還需要把kotti_image再改成kotti2_image .
另外這些庫比較老了,沒有pyproject.toml文件,后面還需要補上。暫時可以先用pip install -e . 這條命令執行編譯安裝。