Power BI连接Python超时求助:脚本无法运行问题排查
问题背景
重装Windows版Python 3.11后,Power BI运行Python脚本时持续卡在“Please wait while we establish a connection to python”加载窗口,无法推进。已重装Power BI,脚本在Python IDE中可正常执行,系统无其他Python版本,环境变量配置无误。
排查与解决思路
确认Power BI的Python解释器路径
打开Power BI的「选项和设置」→「选项」→「Python scripting」,手动指定Python 3.11的安装路径(例如C:\Users\<你的用户名>\AppData\Local\Programs\Python\Python311\python.exe),不要依赖自动检测功能。移除脚本中的交互式依赖
脚本中使用getpass.getuser()获取用户名,而Power BI的Python运行环境不支持交互式终端,这可能导致阻塞。暂时将该行替换为硬编码的用户名(如username = "你的实际用户名"),测试是否能正常运行。优化脚本的文件读取逻辑
当前脚本用openpyxl逐行读取Excel内容,效率极低,若文件夹内文件多或文件大,极易触发超时:- 改用
pd.read_excel直接读取「Lessors」工作表,结合openpyxl作为引擎,通过skiprows过滤隐藏行,替代逐行遍历的方式。 - 细化文件过滤规则,比如只处理包含特定关键词的xlsx文件,减少不必要的文件处理。
- 改用
检查OneDrive路径的访问权限
脚本指向OneDrive同步文件夹,Power BI可能因权限不足无法访问同步文件。建议将测试文件复制到本地非同步目录(如C:\Temp\TestFiles),修改脚本路径后重新测试。查看Power BI日志定位报错
前往Power BI日志目录(默认C:\Users\<你的用户名>\AppData\Local\Microsoft\Power BI Desktop\Logs),查找包含「Python」关键词的日志文件,从中提取具体报错信息,定位问题根源。
用户提供的原始脚本
import os import pandas as pd import glob import getpass from pathlib import Path from openpyxl import load_workbook username = getpass.getuser() print(username) if username.lower() == "xxxx": opra = (r"C:\Users\xxxx\OneDrive - xxxx\OPRA - Documents\Lessor Tracker\Lessor Tracking") elif username.lower() == "xxxx": opra = (r"C:\Users\xxxx\OneDrive - xxxx\OPRA - Documents\Lessor Tracker\Lessor Tracking") elif username.lower() == "xxxx": opra = (r"C:\Users\xxxx\OneDrive - xxxx\OPRA - Documents\Lessor Tracker\Lessor Tracking") else: opra = (r"C:\Users\xxxx\OneDrive - xxxx\OPRA - Documents\Lessor Tracker\Lessor Tracking") os.chdir(opra) cwd = os.path.abspath(opra) print(cwd) files = os.listdir(opra) ## Method 1 gets the first sheet of a given file df = pd.DataFrame() for file in files: r=0 if file.endswith('.xlsx'): print(file) wb = load_workbook(file) # use the actual path of your workbook ws = wb.get_sheet_by_name(name = 'Lessors') data = [] # iterate over all the rows in the sheet for row in ws: if ws.row_dimensions[row[0].row].hidden == False: row_values = [cell.value for cell in row] data.append(row_values) jd = pd.DataFrame(data[1:], columns=data[0]) r=r+1 wbn = str(file) + str(r) jd.insert(6,"Workbook",wbn,False) df = df.append(jd, ignore_index=False) print(df)
内容的提问来源于stack exchange,提问作者Mark k

