从 Virtualenv 中的 Flask 导入 Numpy 时,会出现多数组导入错误



我正在尝试在烧瓶__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'

谢谢

附加信息: 导入其他模块(如熊猫、烧瓶或操作系统)没有问题。 最初我导入熊猫,所以错误是熊猫依赖错误。 从/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 会话中的 venv 中导入 numpy 时,它可以正常工作。

(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'
>>> 

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

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

如果使用 Python 虚拟

环境,而不是使用此选项来引用 Python 虚拟环境的站点包目录,则应使用 python-home 选项来指定 Python 虚拟环境的根目录。

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

因此,python-home=选项必须用于给定的 venv dir,要么 Python 2.7 应该用于 venv,要么必须安装 Python 3 版本的mod_wsgi(libapache2-mod-wsgi-py3在 Ubuntu 上)。

对于某些应用程序,还需要按如下方式配置WSGIApplicationGroup

WSGIApplicationGroup %{GLOBAL}

如果任何 C 扩展使用简化的线程 API。

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

相关内容

最新更新