DEV Community

codemee
codemee

Posted on

2

解決 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 套件, 不需要你再自行安裝了。

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more