使用flask_mysqldb时出现“Library not loaded: libssl.1.0.0.dylib”,“Reason: image not found”的错误

5

我正在使用Python 3和Flask进行尝试,但在使用数据库时遇到了以下错误。

我正在macOS High Sierra v. 10.13.6上进行操作。

我的导入代码如下:

from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from data import Articles
from flask_mysqldb import MySQL
from wtforms import Form, StringField, TextAreaField, PasswordFeild, validators
from passlib.hash import sha256_crypt

尝试运行应用程序时,我遇到的错误是以下内容:
Traceback (most recent call last):
    File "app.py", line 3, in <module>
        from flask_mysqldb import MySQL  
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
          packages/flask_mysqldb/__init__.py", line 1, in <module> import MySQLdb  
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
          packages/MySQLdb/__init__.py", line 18, in <module> import _mysql  
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
             packages/_mysql.cpython-37m-darwin.so, 2): Library not loaded: 
             libssl.1.0.0.dylib  
    Referenced from: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- 
                     packages/_mysql.cpython-37m-darwin.so  
    Reason: image not found

我在其他与我的问题相关的多个问题中寻找过,但似乎没有找到解决我的问题的任何内容。或者至少我不知道如何解决。 我真的希望有人能帮助我。


@jalazbe,这给了我以下错误: 在终端中Command "python setup.py egg_info" failed with error code 1 in /private/tmp/pip-install-juotsd7s/MySQL-python/ - M. Quist
1
阅读此内容可能会有所帮助 https://dev59.com/y2w15IYBdhLWcg3w0e8V - jalazbe
你可以先尝试使用 sudo pip install --upgrade setuptools; sudo pip install mysql 吗? - jtlz2
@jtlz2 运行时出现以下错误:Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-cUPsLz/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-E8aY4Y/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-install-cUPsLz/MySQL-python/ - M. Quist
1
@jtlz2 不用担心,感谢你的帮助! - M. Quist
显示剩余12条评论
6个回答

16

问题已解决

经过进一步搜索,我找到了一个对我有效的解决方法:

第一步:使用brew安装openssl

brew install openssl

第二步:复制libssl.1.0.0.dylib和libcrypto.1.0.0.dylib

cd /usr/local/Cellar/openssl/1.0.1f/lib
sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/lib/

请注意文件夹名称(1.0.1f)。这将根据您的openssl版本而有所改变。

第三步:删除现有的链接

sudo rm libssl.dylib libcrypto.dylib
sudo ln -s libssl.1.0.0.dylib libssl.dylib
sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib

就是这样。


6

以下内容对我在使用 mysql Ver 14.14 Distrib 5.7.23, for osx10.14 (x86_64) 和 Django 2.2.3 时有用。

  1. 安装版本 1.1
   brew install openssl@1.1

将所需的库复制到 /usr/lib 目录。如果无法将其复制到 /usr/lib 目录,请参考以下网址上的文章:System Integrity Change
    cd /usr/local/Cellar/openssl@1.1/1.1.1c/lib
    sudo cp libssl.1.1.dylib libcrypto.1.1.dylib /usr/lib/
  1. 删除和更新链接
    sudo rm libssl.dylib libcrypto.dylib
    sudo ln -s libcrypto.1.1.dylib libcrypto.dylib
    sudo ln -s libssl.1.1.dylib libssl.dylib

谢谢你的解决方案!这是对我有用的一个。我不得不禁用Mac的SIP才能将文件复制到/usr/lib。也许有一个非SIP目录可以在不进入恢复模式的情况下进行复制。 - Mark D
5
您可以通过将文件复制到“/usr/local/lib”来解决此问题,而无需禁用MacOS SIP。这对我有用。 - Doug Couvillion
1
把那些文件复制到 /usr/lib 不是一个好主意:https://apple.stackexchange.com/questions/238828/root-user-cant-create-a-file-in-usr-lib - Baskaya
1
对于 sudo cp libssl.1.1.dylib libcrypto.1.1.dylib /usr/lib/ 命令会出现“操作不允许”的提示。 - Shahaf Shavit

0

我对这个问题的处理方式是:

不是:

from flask_mysqldb import MySQL

我使用了:

from flaskext.mysql import MySQL

所以这意味着我应该使用pip install flask-mysql而不是pip install flask-mysqldb。 注意:如果你想要获取一个游标,你可以使用这个库来执行cursor = mysql.get_db().cursor()

0

对我来说,我已经安装了openssl,解决方案很简单--重新安装openssl:

brew reinstall openssl@1.1

之后,Python 中的导入工作顺利进行。


0
在Mac上,如果您要更新openssl路径,请在~/.bash_profile中进行。将openssl@1.1转义为openssl\@1.1export PATH="/usr/local/opt/openssl\@1.1/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl\@1.1/lib" export CPPFLAGS="-I/usr/local/opt/openssl\@1.1/include"

0

之前我的代码出现了以下错误。

ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/osgeo/_gdal.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
  Referenced from: /usr/local/opt/gdal/lib/libgdal.20.dylib
  Reason: image not found

对于以下导入

import gdal

只需在所需位置创建目录 我的安装在这里...

/usr/local/Cellar/openssl/1.0.2s/

我在他们想要的位置创建了一个目录。openssl目录不存在,所以我使用mkdir命令创建了它。

/usr/local/opt/openssl/

然后按照要求复制了文件夹。现在

import gdal

正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接