Replit 是我很喜歡的線上開發環境, 它除了給你一台雲端的虛擬電腦以外, 在協助開發的工作上也加上了不少的功能, 像是最近它就加入了類似 ChatGPT 的 AI 聊天功能 GhostWriter。
不過 Replit 有一個很貼心、卻有可能造成困擾的功能, 就是在預設的狀況下, 它會幫你根據程式碼匯入的模組猜測應該要安裝哪一個套件, 並且會自動幫你安裝。既然是猜測, 當然有可能會猜錯, 造成程式無法執行。以這個 Test-Config 專案為例, 預期要使用 googlesearch-python
套件內的 googlesearch
匯入可取得 Google 搜尋結果的 search
函式:
from googlesearch import search
for i in search('nba', advanced=True):
print(i.title)
但 Replit 總是會猜測成使用 google-search
套件:
但是 google-search
套件內的 googlesearch
模組並沒有 search
函式, 導致一執行就出錯:
你必須自行解除安裝 google-search
套件, 再安裝 googlesearch-python
套件才整讓程式正常運作, 但麻煩的是之後若是因為任何套件有更新, Replit 還是會再猜測, 又重新安裝 google-search
套件了。
使用 .replit 檔設定專案
其實 Replit 中每個專案都有一個 .replit 設定檔, 可以控制專案的一些細部動作, 當然也包含要如何安裝套件。要編輯這個檔案, 必須先顯示隱藏檔:
取消自動猜測並安裝套件的功能
開啟 .replit 檔後, 可以找到 [packager] 區段:
# Configures the packager.
[packager]
language = "python3"
ignoredPackages = ["unit_tests"]
[packager.features]
enabledForHosting = false
# Enable searching packages from the sidebar.
packageSearch = true
# Enable guessing what packages are needed from the code.
guessImports = false
其中 [packager.features] 子區段中有個 guessImports 可以設定要不要讓 Replit 自己猜測要使用哪一個套件, 預設為 true
, 只要改為 false
, 就不會自動猜測並且安裝套件, 但是就變成要自行安裝所有需要用到的套件。
取消猜測特定模組安裝套件的功能
剛剛的設定會完全取消 Replit 自動從模組名稱猜測並安裝對應套件的功能, 這可能會讓你覺得不大方便, 不過還好, 另外有一個設定是 ignoredPackages 可以列出不要讓 Replit 去猜測的模組清單, 例如:
# Configures the packager.
[packager]
language = "python3"
ignoredPackages = ["googlesearch", "unit_tests"]
這樣當 Replit 看到程式碼中要匯入 googlesearch
模組時, 就不會猜測應該要安裝哪一個套件, 但是如果看到的不是在這個清單內的模組, 還是會自動猜測並安裝套件。
使用特殊格式註解強制指定要使用的套件
前面的設定雖然可以解決問題, 不過卻必須自行安裝沒有自動猜測的模組對應的套件。Replit 很貼心的想到了這一點, 因此提供有另外一個功能, 讓你可以在匯入模組的陳述句加上特定格式的註解, 強制讓 Replit 安裝指定的套件。例如以下的註解就會讓 Replit 知道要使用 googlesearch
模組需要安裝的是 googlesearch-python
套件:
from googlesearch import search #upm package(googlesearch-python)
當 Replit 看到這一行時, 就會幫你自動安裝 googlesearch-python
套件, 不需要你再自行安裝了。
Top comments (0)