Target WSGI script cannot be loaded as Python module + ImportError: No module named

Target WSGI script cannot be loaded as Python module + ImportError: No module named

我在使用 mod_wsgi 部署我的 Flask 应用程序时遇到错误。这是错误日志:

[Sat Feb 10 01:58:24.785611 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065] mod_wsgi (pid=17184): Target WSGI script '/var/www/itemcatalog/itemcatalog.wsgi' cannot be loaded as Python module.
[Sat Feb 10 01:58:24.785635 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065] mod_wsgi (pid=17184): Exception occurred processing WSGI script '/var/www/itemcatalog/itemcatalog.wsgi'.
[Sat Feb 10 01:58:24.785649 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065] Traceback (most recent call last):
[Sat Feb 10 01:58:24.785664 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065]   File "/var/www/itemcatalog/itemcatalog.wsgi", line 6, in <module>
[Sat Feb 10 01:58:24.785710 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065]     from itemcatalog import app as application
[Sat Feb 10 01:58:24.785729 2018] [wsgi:error] [pid 17184:tid 140591748056832] [remote 41.36.31.164:45065] ImportError: No module named itemcatalog

我在 itemcatalog 目录中有一个 init.py 文件,我做了一些搜索,发现 python 可能没有将我的 itemcatalog 识别为一个包,这是什么原因?

Python 是全局安装的,但后来我也尝试将它安装在虚拟环境中。

这是虚拟主机的代码:

<VirtualHost *:80>
            ServerName 18.194.244.229
            ServerAdmin admin@18.194.244.229
            WSGIDaemonProcess itemcatalog python-path=/var/www/itemcatalog:/var/www/itemcatalog/venv/lib/python2.7/site-packages
            WSGIProcessGroup itemcatalog
            WSGIScriptAlias / /var/www/itemcatalog/itemcatalog.wsgi

            <Directory /var/www/itemcatalog/>
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
             </Directory>

            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn
            CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这是里面的文件结构/var/www/itemcatalog/

而不是:

WSGIDaemonProcess itemcatalog python-path=/var/www/itemcatalog:/var/www/itemcatalog/venv/lib/python2.7/site-packages

使用:

WSGIDaemonProcess itemcatalog python-path=/var/www \
  python-home=/var/www/itemcatalog/venv

Python 路径必须是包的父目录,而不是包目录本身。

不要使用 python-path 来设置虚拟环境,而是使用 python-home,如官方文档中所述: