【问题标题】:When importing Numpy from Flask in Virtualenv Numpy gives multiarray import error在 Virtualenv Numpy 中从 Flask 导入 Numpy 时出现多数组导入错误
【发布时间】:2017-10-08 03:47:10
【问题描述】:

我正在尝试在烧瓶 __init__.py 导入 numpy,但它给出了这个错误:

Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all 
files not under version control).  Otherwise reinstall numpy.

当我从烧瓶 __init__.py 中删除导入时,一切正常。 当我在 virtualenv 中执行 from numpy.core import multiarray 时,一切正常,但从 wsgi 导入它不起作用。

这里是 apache/站点可用的配置文件:

<VirtualHost *:80>
                ServerName 192.168.0.1
                ServerAdmin hello@world.com
                WSGIScriptAlias / /home/bar/FlaskApp/FlaskApp/FlaskApp.wsgi
                <Directory /home/bar/FlaskApp/FlaskApp/>
                        Require all granted
                </Directory>
                Alias /static /home/bar/FlaskApp/FlaskApp/static
                <Directory /home/bar/FlaskApp/FlaskApp/static/>
                        Require all granted
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
WSGIDaemonProcess FlaskApp python-path=/home/bar/FlaskApp:/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages
WSGIProcessGroup FlaskApp

这里是wsgi文件:

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/home/bar/FlaskApp")

from FlaskApp import app as application
application.secret_key = 'FlaskApp'

谢谢

附加信息: 我在导入其他模块(如 pandas、flask 或 os)时没有问题。 最初我导入熊猫所以错误来自熊猫依赖错误。 来自/var/log/apache/error.log

Traceback (most recent call last):
    File "/home/bar/FlaskApp/FlaskApp/FlaskApp.wsgi", line 7, in <module>
        from FlaskApp import app as application
    File "/home/bar/FlaskApp/FlaskApp/__init__.py", line 3, in <module>
        from myscript import myclass
    File "/home/bar/FlaskApp/FlaskApp/myscript.py", line 1, in <module>
        import pandas as pd
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/pandas/__init__.py", line$
        "Missing required dependencies {0}".format(missing_dependencies))
        ImportError: Missing required dependencies ['numpy']

这是我尝试直接从__init__.py 导入 numpy 时的错误日志:

Traceback (most recent call last):
    File "/home/bar/FlaskApp/FlaskApp/FlaskApp.wsgi", line 7, in <module>
        from FlaskApp import app as application
    File "/home/bar/FlaskApp/FlaskApp/__init__.py", line 3, in <module>
        import numpy as np
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/__init__.py", line 142, in <module>
        from . import add_newdocs
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/add_newdocs.py", line 13, in <module>
        from numpy.lib import add_newdoc
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/lib/__init__.py", line 8, in <module>
        from .type_check import *
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/lib/type_check.py", line 11, in <module>
        import numpy.core.numeric as _nx
    File "/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/core/__init__.py", line 24, in <module>
        raise ImportError(msg)
    ImportError:
    Importing the multiarray numpy extension module failed.  Most
    likely you are trying to import a failed build of numpy.
    If you're working with a numpy git repo, try `git clean -xdf` (removes all
    files not under version control).  Otherwise reinstall numpy.

当我尝试在 python 会话中将 numpy 导入 venv 时,它可以正常工作。

(venv) bar@bar:~/FlaskApp/FlaskApp$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> from numpy.core import multiarray
>>> multiarray.__file__
'/home/bar/FlaskApp/FlaskApp/venv/lib/python3.5/site-packages/numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so'
>>> 

【问题讨论】:

    标签: python numpy flask import virtualenv


    【解决方案1】:

    在 mod_wsgi 下导入可能会很棘手,尤其是使用 Python C 扩展库。

    这里的问题原来是将WSGIDaemonProcess python-path= 选项设置为带有已编译模块的venv。从这些文档中:

    如果使用 Python 虚拟环境,与其使用该选项来引用 Python 虚拟环境的 site-packages 目录,不如使用 python-home 选项来指定 Python 虚拟环境的根目录。

    在所有情况下,如果该目录包含具有 C 扩展组件的 Python 包,则必须使用与编译 mod_wsgi 模块时相同的基本 Python 版本安装这些包。您不应混合使用来自不同 Python 版本或安装的包。

    因此,python-home= 选项必须用于给定的 venv 目录,并且 Python 2.7 应该用于 venv,或者必须安装 mod_wsgi 的 Python 3 版本(@987654328 @ 在 Ubuntu 上)。

    对于某些应用程序,WSGIApplicationGroup 也需要进行如下配置:

    WSGIApplicationGroup %{GLOBAL}
    

    在任何 C 扩展使用简化线程 api 的情况下。

    从类似的问题,αβ,这似乎是一个常见的问题。

    【讨论】:

    • 仍然是同样的错误,但我更好地理解了这个问题。谢谢
    • 所以我的 virtualenv 中需要 pyton2.7 模块。我会让你知道。谢谢
    • 我使用 python 2.7 创建了 virtualenv 并安装了模块并将配置文件的路径更改为它。一切正常。非常感谢。我现在将导入一些打印功能。
    • 太好了,很高兴它有效,鉴于此,我将编辑我的答案以使其更清晰。 :)
    • 知道如何使用 python3 让它工作吗?我有同样的问题,但不想恢复到 python2.7。我安装了 libapache2-mod-wsgi-py3,但仍然出现同样的错误。
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2016-06-30
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多