首页 文章

ImportError:没有名为parse的模块

提问于
浏览
3

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

我得到的错误是ImportError:没有名为parse的模块 . 请参阅以下来自apache2 web服务器的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 .

是什么原因导致问题?

2 回答

  • 4

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

    我有Python 3.4的虚拟环境,

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

    Response to comment:

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

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

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

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

    Response to comment #2:

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

    是的,您的网站在使用python 2.x执行时工作正常,但是当您开始使用数据库时,您正在使用尝试在python 3.x中导入库的模块 . 因此,如果您继续使用python 2.x来执行您的站点,那么您将不会使用数据库 .

    我无法弄清楚我需要把它放在activate_this.py中 .

    试试这个:

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

    $ cd /some/path/to/venv
    

    2)列出所有文件:

    $ ls
    

    3)切换到bin目录:

    $ cd bin
    

    4)列出所有文件:

    $ ls
    

    5)打开文件 activate_this.py 并阅读顶部的注释,例如

    $ vi activate_this.py
    

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

  • 1

    Python2.7:

    from urlparse import urlparse
    

    Python3:

    from urllib.parse import urlparse
    

    python2 urlparse

相关问题