V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
timchou
V2EX  ›  macOS

m1 mac python3.9 使用 mysqlclient 包报错: name '_mysql' is not defined

  •  
  •   timchou · 2021-06-12 11:25:21 +08:00 · 3401 次点击
    这是一个创建于 1020 天前的主题,其中的信息可能已经有所发展或是发生改变。
    装了 arm 版的 homebrew,mysql\python3.9\mysql-client 全部都用 arm brew 重新安装过了,还是报错:

    Traceback (most recent call last):
    File "/x/lib/python3.9/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
    ImportError: dlopen(/x/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so, 2): no suitable image found. Did find:
    /x/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so: mach-o, but wrong architecture
    /x/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so: mach-o, but wrong architecture

    NameError: name '_mysql' is not defined

    求教有人遇到过吗?
    12 条回复    2021-09-26 16:54:29 +08:00
    hello2061
        1
    hello2061  
       2021-06-12 11:42:40 +08:00 via iPhone
    but wrong architecture 架构还是不对?
    timchou
        2
    timchou  
    OP
       2021-06-12 12:00:25 +08:00
    @hello2061
    生成的_mysql.cpython-39-darwin.so 文件,还是 Mach-O 64-bit bundle x86_64
    IgniteWhite
        3
    IgniteWhite  
       2021-06-12 15:35:17 +08:00 via iPhone
    请善用搜索,谢谢。我帮你搜了一下,搜到了。你 Python 版本没搞对,要用 ARM 原生版本的 Python
    https://github.com/Homebrew/discussions/discussions/569
    timchou
        4
    timchou  
    OP
       2021-06-12 16:18:59 +08:00
    @IgniteWhite 害,你怎么知道我没搜呢,要不是全了搜了一遍还没没解,我能来发帖。。?另外没看到我原贴里就写了 arm brew 安装的 python 吗



    all,现在问题解决了,我尝试了各种办法,目前试下来,只能用 x86 的 homebrew 来跑,也就是说系统维护 2 个 brew,一个 x86 一个 arm64,然后用 x86 brew 来安装 python 和 mysql-client,然后再 pip install mysqlclient 。
    如果哪位能用原生 arm 来解决,求提示下
    IgniteWhite
        5
    IgniteWhite  
       2021-06-12 16:37:58 +08:00 via iPhone
    @timchou 我给你的链接里不就有用原生 ARM 解决的步骤么……关键是你怎么确定自己装的是 ARM 版 Python ? which python3 的输出是什么
    timchou
        6
    timchou  
    OP
       2021-06-12 20:32:11 +08:00
    @IgniteWhite 谢谢您费心,不过我原文都写了,arm 版的 homebrew\python\mysql\mysql-client,都是,file xxx 查看都是 arm64,但是就是用 mysqlclient 的时候不行。
    我 2 楼也写了,查到的原因是 mysqlclient 生成的.so 文件是 x86 的,问题是在这里,但是我没找到办法怎么生成 arm64 的 so 文件,所以只能干脆用 x86 的 python 来跑
    IgniteWhite
        7
    IgniteWhite  
       2021-06-12 23:00:29 +08:00
    @timchou okok,希望以后解决。我看有人说以前用过 pyenv 没处理干净也会有影响。
    megachweng
        8
    megachweng  
       2021-06-13 17:56:58 +08:00 via iPhone
    楼主可以试试 conda,M1 下环境管理非常香
    Kobayashi
        9
    Kobayashi  
       2021-06-14 04:38:00 +08:00 via Android
    你确定你的 Python 是 arm 版的?输出一下 which python
    timchou
        10
    timchou  
    OP
       2021-06-15 09:42:32 +08:00
    @megachweng 好的,我研究下,谢谢
    James1847
        12
    James1847  
       2021-09-26 16:54:29 +08:00
    this can help u solve this problem
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1147 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:00 · PVG 07:00 · LAX 16:00 · JFK 19:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.