TableSynthesis/test_pandas_dll.py
2025-07-02 20:08:23 +08:00

170 lines
4.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试pandas DLL模块加载
专门检查可能导致PyInstaller问题的模块
"""
import sys
import traceback
from pathlib import Path
def test_pandas_core():
"""测试pandas核心模块"""
print("=" * 50)
print("测试pandas核心模块")
print("=" * 50)
modules_to_test = [
'pandas',
'pandas._libs',
'pandas._libs.lib',
'pandas._libs.hashtable',
'pandas._libs.algos',
'pandas._libs.index',
'pandas._libs.writers',
'pandas._libs.parsers',
'pandas._libs.tslibs',
'pandas._libs.tslibs.base',
'pandas._libs.window',
'pandas._libs.window.aggregations', # 关键模块!
'pandas._libs.window.indexers',
]
success_count = 0
for module in modules_to_test:
try:
__import__(module)
print(f"{module}")
success_count += 1
except ImportError as e:
print(f"{module}: {e}")
except Exception as e:
print(f"⚠️ {module}: {e}")
print(f"\n成功加载: {success_count}/{len(modules_to_test)} 个模块")
return success_count == len(modules_to_test)
def test_pandas_functionality():
"""测试pandas基本功能"""
print("\n" + "=" * 50)
print("测试pandas基本功能")
print("=" * 50)
try:
import pandas as pd
import numpy as np
# 创建测试数据
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]
})
print("✅ DataFrame创建成功")
# 测试窗口函数(这是出错的关键)
result = df['A'].rolling(window=2).sum()
print("✅ rolling窗口函数正常")
# 测试聚合函数
agg_result = df.groupby('A').agg({'B': 'sum'})
print("✅ groupby聚合函数正常")
# 测试Excel读写
test_file = Path('test_pandas.xlsx')
df.to_excel(test_file, index=False)
df_read = pd.read_excel(test_file)
test_file.unlink() # 删除测试文件
print("✅ Excel读写功能正常")
return True
except Exception as e:
print(f"❌ pandas功能测试失败: {e}")
traceback.print_exc()
return False
def check_pandas_installation():
"""检查pandas安装信息"""
print("\n" + "=" * 50)
print("pandas安装信息")
print("=" * 50)
try:
import pandas as pd
print(f"✅ pandas版本: {pd.__version__}")
print(f"✅ pandas路径: {pd.__file__}")
# 检查_libs目录
pandas_path = Path(pd.__file__).parent
libs_path = pandas_path / '_libs'
if libs_path.exists():
print(f"✅ _libs目录存在: {libs_path}")
# 统计.pyd文件
pyd_files = list(libs_path.glob('**/*.pyd'))
print(f"✅ 找到 {len(pyd_files)} 个.pyd文件")
# 检查关键文件
key_files = [
'window/aggregations.cp310-win_amd64.pyd',
'window/indexers.cp310-win_amd64.pyd',
'hashtable.cp310-win_amd64.pyd',
'lib.cp310-win_amd64.pyd'
]
for key_file in key_files:
file_path = libs_path / key_file
if file_path.exists():
print(f"✅ 关键文件存在: {key_file}")
else:
print(f"❌ 关键文件缺失: {key_file}")
else:
print(f"❌ _libs目录不存在: {libs_path}")
return False
return True
except Exception as e:
print(f"❌ 检查pandas安装失败: {e}")
return False
def main():
"""主函数"""
print("🔍 pandas DLL模块测试工具")
print("用于诊断PyInstaller构建问题")
print()
# 基本信息
print(f"Python版本: {sys.version}")
print(f"平台: {sys.platform}")
# 运行测试
install_ok = check_pandas_installation()
core_ok = test_pandas_core()
func_ok = test_pandas_functionality()
print("\n" + "=" * 50)
print("测试结果总结")
print("=" * 50)
if install_ok and core_ok and func_ok:
print("✅ 所有测试通过pandas安装正常")
print("💡 如果PyInstaller仍有问题请使用 fix_dll_build.py")
else:
print("❌ 存在问题,建议:")
if not install_ok:
print(" 1. 重新安装pandas: pip uninstall pandas && pip install pandas")
if not core_ok:
print(" 2. 检查pandas C扩展是否正确编译")
if not func_ok:
print(" 3. 检查依赖库numpy等是否正常")
print("=" * 50)
input("\n按Enter键退出...")
if __name__ == '__main__':
main()