升级到Ubuntu 16.04后,MySQL-python的依赖关系出现了问题。

33

我刚刚将Ubuntu系统升级到了16.04,但似乎这破坏了MySQL-Python包中的mysql依赖关系。

以下是我的错误消息:

  File "/opt/monitorenv/local/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 386, in create_engine
return strategy.create(*args, **kwargs)
  File "/opt/monitorenv/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 75, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/opt/monitorenv/local/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 92, in dbapi
return __import__('MySQLdb')
  File "/opt/monitorenv/local/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory
基本上,import_mysql正在寻找一个不存在的so文件,因为在Ubuntu 16.04中,我已经安装了libmysqlclient20,而libmysqlclient18不可用。 据我所知(或者至少我相信),我的Python库已经更新到最新版本。
(我尝试运行pip install --upgrade mysql-python,结果显示已是最新版本。)
你们有什么建议吗?

从 requirements.txt 文件创建一个新的虚拟环境。如果没有此文件: pip freeze > requirements.txt - Klaus D.
1
我恐怕还是会得到之前相同的错误。 - RyanH
8个回答

47

感谢Largaroth。如果您在Ubuntu 16.04上使用mysqlclient并出现以下错误:

ImportError: libmysqlclient.so.18:无法打开共享对象文件:没有那个文件或目录

您可以通过以下操作解决:

sudo -H pip uninstall mysqlclient

sudo -H pip install --no-binary mysqlclient mysqlclient

2
报告已安装了“MySQL-python”,因此这个答案是纠正问题的答案。 - Nathan Crause
谢谢。这个和上面的修复对我有帮助。 - Addinall

27

我最终通过在这个帖子中提到的方法解决了我的问题:pip install --no-binary MySQL-python MySQL-python


希望我能多次点赞。在过去的一周里,我遇到了这个问题多次。不幸的是,答案并不太容易找到。 - Bono
1
对于那些遇到“no such option: --no-binary”错误的人,请确保首先升级您的pip版本! - ShaneOH

8

我遇到了相同的问题。我卸载了MySQL-Python并重新安装:

pip uninstall MySQL-python
pip install MySQL-python

2

我在升级到stretch时遇到了这个问题。为了解决它,我更新了我的requirements.txt:

mysqlclient==1.4.2.post1

因此,您可以手动更新它或者使用pip install --upgrade mysqlclient进行更新。

“Original Answer”翻译成中文是“最初的回答”。


1
谢谢,这个(--upgrade选项)在从Ubuntu 19.04升级到19.10后解决了我的问题。 - FlyingZebra1

1

我的问题是我在使用来自旧操作系统的wheelhouse。

当我卸载/安装软件包或更新wheelhouse时,问题得到了解决...

从文档中:

http://mysql-python.sourceforge.net/FAQ.html#importerror

这意味着您的MySQLdb版本是针对某个MySQL版本编译的,现在正在尝试针对不同版本运行它。共享库版本往往会在主要发布版之间更改。
解决方案:重新构建MySQLdb或获取匹配的MySQL版本。

1

步骤:

  1. 搜索mysql路径

    which mysql

    输出:/opt/mysql/

  2. 创建符号链接到usr/lib

    sudo ln -s /opt/mysql/lib/mysqlclient.so.20 /usr/lib

注意:mysqlclient.so.20将根据您的版本而定


0

我在我的虚拟环境中使用django 2.2.7和Ubuntu 19.10解决了这个问题,方法如下:

pip3卸载mysqlclient

pip3安装mysqlclient


0

我在使用 Python 3.6 时遇到了这个问题... 当我使用 Python 3.5 的环境时,它就可以正常工作。


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