把 Python 的 venv 移到其他機器
前言 要怎麼在不重新下載東西的情況下,把一整包 code 包含依賴本身,移到新的地方呢? 舉個之前遇到的例子:我想在學校部署一個用 Python Streamlit 框架寫的程式碼評測工具,但是在測試部署時發現一個非常頭痛的問題:學校的連外網路特別慢,導致 pip 幾乎無法正常完成安裝。在嘗試了 pip download 以及一些打包方案後,發現 Streamlit 的執行最終都會缺幾個元件導致啟動失敗,最終都還是需要用 pip install 補全依賴。最後我想到一個 workaround:拿其他同學的 Windows 筆電先把程式準備好,再把準備好的程式複製到新的地方。 不過要怎麼「準備好程式」然後「複製到新的地方」呢? Python 不像 Go 和 Rust 可以編譯成靜態的執行檔,也不像 Node.js 和 PHP 有著各個專案獨立的 node_modules 或 vendor 資料夾,可以搬到其他地方而保持程式的依賴正常運作。不過 Python 有個很類似 node_modules 的東西——Virtualenv,搞不好我們真的能像 node_modules 一樣直接把整組專案複製到其他電腦上,專案就能跑了。 但是 Stack Overflow 的文章又提到「venv 通常不能直接複製到其他電腦上」。 In general you can’t copy virtual environments anywhere, Docker or otherwise. They tend to be tied to a very specific filesystem path and a pretty specific Python installation. If you knew you had the exact same Python binary, and you copied it to the exact same filesystem path, you could probably COPY it in as-is, but the build system would be extremely fragile. 1 ...