ImportError:没有名为 parse 的模块

Posted

技术标签:

【中文标题】ImportError:没有名为 parse 的模块【英文标题】:ImportError: No module named parse 【发布时间】:2015-03-30 14:33:35 【问题描述】:

我正在尝试使用 mongodb 和 pymongo 运行 Web 应用程序以提供来自数据库的数据。

我得到的错误是 ImportError: No module named parse。请参阅下面来自 apache2 网络服务器的 error.log:

mod_wsgi (pid=18824): Target WSGI script '/var/www/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module.
[:error] [pid 18824:tid 139967053518592] mod_wsgi (pid=18824): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[:error] [pid 18824:tid 139967053518592] Traceback (most recent call last):
File "/var/www/FlaskApp/flaskapp.wsgi", line 12, in <module>
[:error] [pid 18824:tid 139967053518592]      from ABC import app as application
[:error] [pid 18824:tid 139967053518592]    File "var/www/FlaskApp/ABC/__init__.py", line 1, in <module>
[:error] [pid 18824:tid 139967053518592]     from pymongo import MongoClient
[:error] [pid 18824:tid 139967053518592]   File "/var/www/FlaskApp/ABC/venv/lib/python3.4/site-packages/pymongo/__init__.py", line 92, in <module>
[:error] [pid 18824:tid 139967053518592]     from pymongo.connection import Connection
[:error] [pid 18824:tid 139967053518592]    File "/var/www/FlaskApp/ABC/venv/lib/python3.4/site-packages/pymongo/connection.py", line 39, in <module>
[:error] [pid 18824:tid 139967053518592]      from pymongo.mongo_client import MongoClient
[:error] [pid 18824:tid 139967053518592]    File "/var/www/FlaskApp/ABC/venv/lib/python3.4/site-packages/pymongo/mongo_client.py", line 46, in <module>
[:error] [pid 18824:tid 139967053518592]      from pymongo import (auth,
[:error] [pid 18824:tid 139967053518592]    File "/var/www/FlaskApp/ABC/venv/lib/python3.4/site-packages/pymongo/uri_parser.py", line 18, in <module>
[:error] [pid 18824:tid 139967053518592]     from urllib.parse import unquote_plus
[:error] [pid 18824:tid 139967053518592]  ImportError: No module named parse

我有 Python 3.4、Flask 和 pymongo 的虚拟环境。我正在使用 mongodb 2.6.7。

有什么想法会导致问题吗?

【问题讨论】:

【参考方案1】:

Python2.7:

from urlparse import urlparse

Python3:

from urllib.parse import urlparse

python2 urlparse

【讨论】:

【参考方案2】:

看起来您正在使用 python 2.x 运行您的应用程序,但您的应用程序使用的模块来自 python 3.x。特别是pymongo 正在尝试导入模块urllib.parse,在python 2.x 中称为urlparse。因此,使用 python 2.x 执行 import urllib.parse 会导致 ImportError。

我有 Python 3.4 的虚拟环境,

您是如何激活虚拟环境的?

对评论的回应:

我想我没有使用虚拟环境安装Mongodb

没关系。虚拟环境中的 pymongo 代码连接到您的 mongodb 服务器(使用指定端口)。

安装 Flask 和 pymongo 后,我停用了虚拟环境。

您是否按照Flask docs 中关于mod_wsgivirtualenv 和设置activate_this 变量的说明进行操作?

对评论 #2 的回应:

我的网站在静态模式下工作,只有当我开始使用数据库时 由于解析模块的这个问题,它停止工作

是的,您的站点在使用 python 2.x 执行时运行良好,但是当您开始使用 db 时,您正在使用尝试在 python 3.x 中导入库的模块。因此,如果您继续使用 python 2.x 来执行您的站点,那么您将不会使用 db。

我不知道需要在 activate_this.py 中放入什么。

试试这个:

1) 转到包含您的虚拟环境的目录:

$ cd /some/path/to/venv

2) 列出所有文件:

$ ls 

3) 进入bin目录:

$ cd bin

4) 列出所有文件:

$ ls

5) 打开文件activate_this.py 并读取顶部的cmets,例如

$ vi activate_this.py

6) 点击我在之前回复中发布的 Flash 文档的链接,然后再次阅读那里的材料。

【讨论】:

感谢您的建议!是的,我在服务器上确实有导致问题的 Python 2.7.8 和 3.4.2。但是,Python 3.4.2 用于虚拟环境,Flask 和 pymongo 安装用于称为 venv 的虚拟环境。我使用了“源 venv/bin/activate”。我使用 pip3 (Python 3.4.2) 安装了 pymongo。我想我没有使用虚拟环境来安装 Mongodb。安装 Flask 和 pymongo 后,我停用了虚拟环境。 来自@user3151858:不,我没有使用“activate_this”,因为我不知道需要在 activate_this.py 中放入什么。除此之外,我按照说明安装“mod_wsgi”。我的网站在静态模式下工作,只有当我开始使用数据库时,它才会因为解析模块的问题而停止工作。 @user3151858,请参阅上面的回复。 当我运行 python -V 时,我曾经得到 Python 2.7.8。现在我设法切换到 Python 3.4.2,我希望这能解决我在 2.7.8 上运行 Flask 的问题,但显然这仍然是一个问题,因为我是“没有名为 parse 的模块”。 Flask 似乎仍在 2.7.8 上运行。

以上是关于ImportError:没有名为 parse 的模块的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为瓶子的模块

ImportError:没有名为枚举的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 websocket 的模块

ImportError:没有名为“backports”的模块

ImportError:没有名为 ghostscript 的模块