DEV Community

codemee
codemee

Posted on

解決 Replit 猜錯套件安裝的問題

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)
Enter fullscreen mode Exit fullscreen mode

但 Replit 總是會猜測成使用 google-search 套件:

Image description

但是 google-search 套件內的 googlesearch 模組並沒有 search 函式, 導致一執行就出錯:

Image description

你必須自行解除安裝 google-search 套件, 再安裝 googlesearch-python 套件才整讓程式正常運作, 但麻煩的是之後若是因為任何套件有更新, Replit 還是會再猜測, 又重新安裝 google-search 套件了。

使用 .replit 檔設定專案

其實 Replit 中每個專案都有一個 .replit 設定檔, 可以控制專案的一些細部動作, 當然也包含要如何安裝套件。要編輯這個檔案, 必須先顯示隱藏檔:

Image description

取消自動猜測並安裝套件的功能

開啟 .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
Enter fullscreen mode Exit fullscreen mode

其中 [packager.features] 子區段中有個 guessImports 可以設定要不要讓 Replit 自己猜測要使用哪一個套件, 預設為 true, 只要改為 false, 就不會自動猜測並且安裝套件, 但是就變成要自行安裝所有需要用到的套件。

取消猜測特定模組安裝套件的功能

剛剛的設定會完全取消 Replit 自動從模組名稱猜測並安裝對應套件的功能, 這可能會讓你覺得不大方便, 不過還好, 另外有一個設定是 ignoredPackages 可以列出不要讓 Replit 去猜測的模組清單, 例如:

# Configures the packager.
[packager]
language = "python3"
ignoredPackages = ["googlesearch", "unit_tests"]
Enter fullscreen mode Exit fullscreen mode

這樣當 Replit 看到程式碼中要匯入 googlesearch 模組時, 就不會猜測應該要安裝哪一個套件, 但是如果看到的不是在這個清單內的模組, 還是會自動猜測並安裝套件。

使用特殊格式註解強制指定要使用的套件

前面的設定雖然可以解決問題, 不過卻必須自行安裝沒有自動猜測的模組對應的套件。Replit 很貼心的想到了這一點, 因此提供有另外一個功能, 讓你可以在匯入模組的陳述句加上特定格式的註解, 強制讓 Replit 安裝指定的套件。例如以下的註解就會讓 Replit 知道要使用 googlesearch 模組需要安裝的是 googlesearch-python 套件:

from googlesearch import search  #upm package(googlesearch-python)
Enter fullscreen mode Exit fullscreen mode

當 Replit 看到這一行時, 就會幫你自動安裝 googlesearch-python 套件, 不需要你再自行安裝了。

Top comments (0)