【问题标题】:Getting flask fail to import error for flask-mysqldb when the module is already installed当模块已经安装时,获取烧瓶失败导入烧瓶-mysqldb的错误
【发布时间】:2019-11-29 12:21:36
【问题描述】:

我正在尝试从 this 教程中学习将烧瓶与 MySQL 数据库链接。

我使用 pip3 将flask-mysqldb 安装到我的虚拟环境中,这很成功。

有一些答案,但在我的情况下它们都涵盖了fail to install flask-mysqldb,安装本身是成功的,但我仍然在网页上收到错误。

当我使用 flask run 启动服务器并尝试在浏览器中运行路由 URL localhost:5000/ 时,我收到 flask-mysqldb 的导入错误。

这是我得到的确切错误:

flask.cli.NoAppException: While importing "todo_app", an ImportError was raised:

File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)

File "/home/shubham/repos/academy-hackathon/week-0/day-3/my_todo_app/todo_app/app.py", line 7, in <module> 
from flask_mysqldb import MySQL 

File "/home/shubham/venv/lib/python3.6/site-packages/flask_mysqldb/__init__.py", line 1, in <module> 
import MySQLdb 

File "/home/shubham/venv/lib/python3.6/site-packages/MySQLdb/__init__.py", line 18, in <module> 
from . import _mysql 

ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 338, in __call__
    self._flush_bg_loading_exception()
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 326, in _flush_bg_loading_exception
    reraise(*exc_info)
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 314, in _load_app
    self._load_unlocked()
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 330, in _load_unlocked
    self._app = rv = self.loader()
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 247, in locate_app
    "\n\n{tb}".format(name=module_name, tb=traceback.format_exc())
flask.cli.NoAppException: While importing "app", an ImportError was raised:

Traceback (most recent call last):
  File "/home/shubham/venv/lib/python3.6/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/home/shubham/repos/academy-hackathon/week-0/day-3/my_todo_app/todo_app/app.py", line 7, in <module>
    from flask_mysqldb import MySQL
  File "/home/shubham/venv/lib/python3.6/site-packages/flask_mysqldb/__init__.py", line 1, in <module>
    import MySQLdb
  File "/home/shubham/venv/lib/python3.6/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

venv是python环境的名字

我不确定为什么会出现此错误,我正在从安装模块 flask-mysqldb 的同一 python 环境运行服务器。

另外,我在“base”命名环境的机器上安装了 anaconda-navigator,我尝试使用 conda install flask-mysqldb 安装模块,但没有显示模块错误。那么这个错误有可能是conda环境造成的吗?

请提出任何解决方案,从昨晚开始就一直坚持这个。

编辑: 我发现here 安装MySQL-python 应该可以解决这个问题,但我在安装MySQL-python 时遇到另一个错误

Collecting MySQL-python
  Using cached https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-9zyrtdz5/MySQL-python/setup.py", line 13, in <module>
        from setup_posix import get_config
      File "/tmp/pip-install-9zyrtdz5/MySQL-python/setup_posix.py", line 2, in <module>
        from ConfigParser import SafeConfigParser
    ModuleNotFoundError: No module named 'ConfigParser'
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-9zyrtdz5/MySQL-python/

【问题讨论】:

  • 你必须安装数据库 MySQL
  • @furas 你的意思是 MySQL 服务器...在那种情况下我已经安装了它..但是如果你的意思是 MySQL 数据库...你能分享一些安装相同的链接吗? ..因为搜索它只是提供安装 MySQL 服务器的方法。
  • 在 Linux Mint 上,我使用 apt-get 安装了 mysql-server libmysqlclient20。但我不使用flask-mysql,而是使用SQLAlchemypeeweemysql.connector
  • 在错误消息中我看到libmysqlclient.so.18,这可能意味着它需要旧版本libmysqlclient18,而您在apt-get 中可能没有此版本
  • 是的..我也试过sudo apt install libmysqlclient18 libmysqlclient-dev,但我得到了不可用的错误。

标签: python mysql flask python-module


【解决方案1】:

首先,安装Flask-MySQLdb:

$ pip install flask-mysqldb

Flask-MySQLdb 依赖并将为您安装最新版本的 Flask(0.12.4 或更高版本)和 mysqlclient。 Flask-MySQLdb 与 Python 2.7、3.5、3.6 和 3.7 兼容并经过测试。

接下来,将 MySQL 实例添加到您的代码中:

from flask import Flask
from flask_mysqldb import MySQL

..根据提供的信息 - here.

文档链接 - here

【讨论】:

  • 感谢您的回答,但问题已通过关注此线程link解决了
【解决方案2】:

按同样的顺序试试这个

sudo apt install python3.6-dev libpython3.6-dev
sudo apt-get install mysql-server
virtualenv -p python3.6 venv
source venv/bin/activate
pip3 install flask
pip3 install flask-mysqldb

然后创建app.py

from flask import Flask

app = Flask(__name__)


if __name__ == '__main__':
    app.run()

然后执行应用模块

python app.py

【讨论】:

  • 仍然出现同样的错误...即使安装了上述软件包
  • 那么我猜它的设置问题。你能说一下你正在使用的python版本,操作系统平台吗?
  • ubuntu 18.04...和python 3.6.8
  • 更新了答案以获得更详细的设置
  • 有什么方法可以重置吗?
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多