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

Python3.9导入Prophet模块时ARM Mach-O架构兼容错误修复

问题描述

运行Python 3.9编写的股票预测脚本时出现架构兼容错误,提示/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so为Mach-O文件,但架构不兼容(现有'arm64',需'x86_64')。已尝试降级Python、重新安装所有依赖,问题仍未解决。

脚本代码

import streamlit as st
from datetime import date

import yfinance as yf
from fbprophet import Prophet
from fbprophet.plot import plot_plotly
from plotly import graph_objs as go

START = "2015-01-01"
TODAY = date.today().strftime("%Y-%m-%d")

st.title('Stock Forecast App')

stocks = ('GOOG', 'AAPL', 'MSFT', 'GME')
selected_stock = st.selectbox('Select dataset for prediction', stocks)

n_years = st.slider('Years of prediction:', 1, 4)
period = n_years * 365


@st.cache
def load_data(ticker):
    data = yf.download(ticker, START, TODAY)
    data.reset_index(inplace=True)
    return data

    
data_load_state = st.text('Loading data...')
data = load_data(selected_stock)
data_load_state.text('Loading data... done!')

st.subheader('Raw data')
st.write(data.tail())

# Plot raw data
def plot_raw_data():
    fig = go.Figure()
    fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'], name="stock_open"))
    fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'], name="stock_close"))
    fig.layout.update(title_text='Time Series data with Rangeslider', xaxis_rangeslider_visible=True)
    st.plotly_chart(fig)
    
plot_raw_data()

# Predict forecast with Prophet.
df_train = data[['Date','Close']]
df_train = df_train.rename(columns={"Date": "ds", "Close": "y"})

m = Prophet()
m.fit(df_train)
future = m.make_future_dataframe(periods=period)
forecast = m.predict(future)

# Show and plot forecast
st.subheader('Forecast data')
st.write(forecast.tail())
    
st.write(f'Forecast plot for {n_years} years')
fig1 = plot_plotly(m, forecast)
st.plotly_chart(fig1)

st.write("Forecast components")
fig2 = m.plot_components(forecast)
st.write(fig2)

报错堆栈

Traceback (most recent call last):
  File "/Users/srijan/Code/PP/stockpredictor3.py", line 4, in <module>
    import yfinance as yf
  File "/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/yfinance/__init__.py", line 23, in <module>
    from .ticker import Ticker
  File "/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/yfinance/ticker.py", line 29, in <module>
    from .base import TickerBase
  File "/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/yfinance/base.py", line 32, in <module>
    from .data import TickerData
  File "/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/yfinance/data.py", line 12, in <module>
    from cryptography.hazmat.primitives import padding
  File "/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/primitives/padding.py", line 11, in <module>
    from cryptography.hazmat.bindings._rust import (
ImportError: dlopen(/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so, 0x0002): tried: '/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so' (no such file), '/Users/srijan/miniforge3/envs/PersonalProject/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
解决办法
  • 确认当前终端架构:执行uname -m,输出x86_64表示终端在Rosetta 2模式运行,arm64表示原生Apple Silicon模式。
  • 重新创建匹配终端架构的conda环境:
    1. 删除现有环境:conda env remove -n PersonalProject
    2. 新建对应架构的环境:
      • 若终端为x86_64:CONDA_SUBDIR=osx-64 conda create -n PersonalProject python=3.9
      • 若终端为arm64:CONDA_SUBDIR=osx-arm64 conda create -n PersonalProject python=3.9
    3. 激活环境:conda activate PersonalProject
    4. 强制设置环境子目录匹配架构:
      • x86_64终端:conda config --env --set subdir osx-64
      • arm64终端:conda config --env --set subdir osx-arm64
  • 重新安装所有依赖:pip install streamlit yfinance fbprophet plotly
  • 验证cryptography架构:执行file $(python -c "import cryptography; print(cryptography.__file__.replace('__init__.py', 'hazmat/bindings/_rust.abi3.so'))"),输出需与终端架构一致。

备选方案:安装无rust绑定的旧版本cryptography,避免架构冲突:pip install cryptography==3.4.8

内容的提问来源于stack exchange,提问作者Srijan K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:25