[英]"ImportError: No module named" when trying to run Python script
[英]ModuleNotFoundError: No module named 'xlwings' when trying to run a Python script out of a VBA macro in Excel
我有一個名為“RapidAPI_Invest_FX_Lista_Pares_POST_Req.py”的 Python 模塊,它從 RapidAPI POST 方法中獲取來自 Investing.com 的可用外匯貨幣對的更新列表,如下所示:
import xlwings as xw
import requests
import json
def FX_Lista_Pares():
# Reference Excel file:
FinMkt = xw.Book("""FinMkt.xlsm""")
# Reference API info worksheet:
wsAPIURL = FinMkt.sheets["""API URL"""]
wsAPIheaders = FinMkt.sheets["""API Headers"""]
# Pull URL from API info worksheet:
url = wsAPIURL.range("E26").value
# Pull credentials from API info worksheet:
keyHeader = wsAPIheaders.range("B8").value
key = wsAPIheaders.range("C8").value
hostHeader = wsAPIheaders.range("B9").value
host = wsAPIheaders.range("C9").value
# RapidAPI content type (when required), key and host headers:
headers = {
keyHeader: key,
hostHeader: host
}
# Fetch POST method endpoint data and return in JSON format:
response = requests.request("POST", url, headers=headers)
data = response.json()
# Serializing data into JSON:
json_object = json.dumps(data, indent=4)
# Writing to sample.json
with open("""RapidAPI Investing POST Output/FX_Lista_Pares.json""", "w") as outfile:
outfile.write(json_object)
運行后,上述代碼將更新保存在其各自指定子文件夾下的“FX_Lista_Pares.json”文件。
然后我在 Excel 中開發了一個 PQ 查詢,它加載並轉換提到的 JSON 文件並將其轉換為 Excel 表,如下圖所示:
由於我打算將此文件分發給具有零編碼知識的許多不同用戶,因此我將使用預設的 xlwings 安裝文件並啟用宏,因此可以觸發 VBA 代碼來運行相應的 Python 腳本,該腳本將更新此類列表按下按鈕(上圖中的“Atualizar lista de moedas”按鈕)。
按照 xlwings 的標准流程,我在 VBA 模塊中編寫了以下代碼,因此將其分配給上述按鈕:
Sub FX_Lista_Pares_POST()
RunPython ("import RapidAPI_Invest_FX_Lista_Pares_POST_Req; RapidAPI_Invest_FX_Lista_Pares_POST_Req.FX_Lista_Pares()")
ActiveWorkbook.Connections("Query - FX_Lista_Pares_Post_Req").Refresh
Range("A4").Select
End Sub
問題是每次我嘗試通過單擊按鈕運行代碼時,它都會立即返回以下錯誤消息:
我目前通過 VS Code 在 Anaconda 環境下運行 Python,並且我已經安裝了所有必需的模塊(包括 xlwings)所以這個 Python 腳本運行得很好。
由於 xlwings 應該默認在虛擬環境之外運行 Python,因此其他沒有預安裝 Anaconda 環境的用戶可以直接運行它,我通過啟動“RapidAPI_Invest_FX_Lista_Pares_POST_Req.py文件”來檢查它。並意識到與 xlwings 模塊導入相關的代碼行以黃色下划線顯示,就好像它不是安裝在 Windows VE 上的 pip 一樣:
但問題是我的機器上已經安裝了 xlwings。 如此之多,以至於當我運行新的“pip install xlwings”作為對問題進行故障排除的手段時,Powershell 只會返回消息說要求已經得到滿足!
我還在 Anaconda 之外安裝了另一個 Python 3.10.6 實例,並在 xlwings 的工具欄上指定了其 PYTHONPATH。
我已經用盡了在 web 周圍可以找到的所有故障排除技巧來解決此問題,但無濟於事。 誰能解釋一下這個?
提前致謝,
萊昂納多
我用下面的代碼替換了之前設置的 VBA 代碼,它成功了。
Sub FX_Lista_Pares_POST()
Dim objShell As Object
Dim PythonExePath As String, PythonScriptPath As String
ActiveWorkbook.Save
Set objShell = VBA.CreateObject("Wscript.Shell")
PythonExePath = """%USERPROFILE%\AppData\Local\Programs\Python\Python310\python.exe"""
PythonScriptPath = """%USERPROFILE%\OneDrive\Jobs\Consulting\Data BI\Cases\FinData\FinMkt\RapidAPI_Invest_FX_Lista_Pares_POST_Req.py"""
objShell.Run PythonExePath & PythonScriptPath
ActiveWorkbook.Connections("Query - FX_Lista_Pares_POST_Req(1)").Refresh
Range("A4").Select
End Sub
我試圖通過使用相同的 VBA 腳本來解決此問題,但我已將其 scope 限制在相應的工作表中,這可能是問題持續存在的原因。 現在我已經在一個模塊中完成了,一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.