You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一项目中同时使用32位与64位Python解释器?

解决方案:同时使用32位/64位Python处理Access数据库与大数据

方案1:用subprocess独立调用32位Python并保留数据结构

核心思路是通过64位Python的subprocess模块,调用32位Python解释器执行数据库查询脚本,将查询结果序列化为JSON字符串输出,再在64位环境中反序列化为对应数据类型(比如pandas.DataFrame)。

32位环境脚本(second_main.py)

import pyodbc
import pandas as pd
import json
import sys

def query_access():
    # 配置Access连接字符串,根据你的数据库路径调整
    conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\your_path\old_db.mdb;'
    conn = pyodbc.connect(conn_str)
    # 执行查询
    df = pd.read_sql("SELECT * FROM target_table", conn)
    conn.close()
    # 将DataFrame转为JSON字符串,保留数据结构
    return df.to_json(orient='records')

if __name__ == "__main__":
    result = query_access()
    print(result)
    sys.stdout.flush()  # 确保输出被完整捕获

64位环境主脚本(main.py)

import subprocess
import json
import pandas as pd

# 替换为你的32位Python绝对路径
PYTHON_32_PATH = r'C:\Python38-32\python.exe'
# 替换为second_main.py的绝对路径
SCRIPT_PATH = r'C:\project_path\second_main.py'

def get_access_data():
    try:
        # 调用32位Python执行查询脚本
        proc_result = subprocess.run(
            [PYTHON_32_PATH, SCRIPT_PATH],
            capture_output=True,
            text=True,
            check=True
        )
        # 反序列化JSON字符串为DataFrame
        json_data = json.loads(proc_result.stdout)
        return pd.DataFrame(json_data)
    except subprocess.CalledProcessError as e:
        # 捕获脚本执行错误,打印报错信息
        print(f"32位脚本执行失败:{e.stderr}")
        raise

# 测试调用并处理大数据
if __name__ == "__main__":
    access_df = get_access_data()
    print(access_df.head())
    # 后续用64位Python进行大数据处理操作

方案2:文件作为中间数据载体(适合大体积数据)

如果查询结果数据量很大,用标准输出传递效率较低,可以将32位环境的查询结果保存为高效格式文件(比如Parquet),再由64位环境读取。

32位环境脚本(second_main.py)

import pyodbc
import pandas as pd

def query_and_save():
    conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\your_path\old_db.mdb;'
    conn = pyodbc.connect(conn_str)
    df = pd.read_sql("SELECT * FROM target_table", conn)
    conn.close()
    # 保存为Parquet格式(比CSV更高效,支持复杂数据类型)
    df.to_parquet(r'C:\temp\access_temp_data.parquet')

if __name__ == "__main__":
    query_and_save()

64位环境主脚本(main.py)

import pandas as pd
import os

TEMP_FILE_PATH = r'C:\temp\access_temp_data.parquet'

def get_access_data():
    df = pd.read_parquet(TEMP_FILE_PATH)
    # 可选:读取后删除临时文件
    os.remove(TEMP_FILE_PATH)
    return df

if __name__ == "__main__":
    access_df = get_access_data()
    print(access_df.shape)
    # 执行大数据处理逻辑

方案3:轻量RPC服务(适合频繁调用场景)

用32位Python启动一个简单的HTTP服务,64位Python通过HTTP请求获取查询结果,适合需要多次调用Access查询的场景。

32位环境服务脚本(second_main.py)

from flask import Flask, jsonify
import pyodbc
import pandas as pd

app = Flask(__name__)

def query_access():
    conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\your_path\old_db.mdb;'
    conn = pyodbc.connect(conn_str)
    df = pd.read_sql("SELECT * FROM target_table", conn)
    conn.close()
    return df

@app.route('/get-access-data')
def send_data():
    df = query_access()
    return jsonify(df.to_dict(orient='records'))

if __name__ == "__main__":
    app.run(host='localhost', port=5000, debug=False)

64位环境主脚本(main.py)

import requests
import pandas as pd

def get_access_data():
    # 先确保32位服务已启动,可通过subprocess预先启动
    response = requests.get('http://localhost:5000/get-access-data')
    response.raise_for_status()
    data = response.json()
    return pd.DataFrame(data)

if __name__ == "__main__":
    access_df = get_access_data()
    print(access_df.dtypes)
    # 大数据处理逻辑

注意事项

  • 确保32位Python安装了匹配版本的pyodbc和32位Access ODBC驱动(驱动位数必须与Python一致)
  • 使用subprocess时,要处理脚本执行失败的异常,避免主进程崩溃
  • 文件载体方案需注意临时文件的权限和清理,避免磁盘占用

内容的提问来源于stack exchange,提问作者G_G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:49