apache 服务器上的 wsgi ModuleNotFoundError
ModuleNotFoundError with wsgi on apache server
我正在 运行在 apache 网络服务器(亚马逊 Linux 2)上使用 wsgi 编写烧瓶脚本。
我在使用 Python 3.7.
时收到“ModuleNotFoundError:没有名为 'cv2' 的模块”错误
其他模块没有出现这个错误,我怀疑是因为 cv2 是唯一存储在
“/home/ec2-user/.local/lib/python3.7/站点包”。其他的在“/usr/local/lib/python3.7/site-packages/”
我检查了 site-packages 文件夹的文件权限,该目录没有读写权限。
我为所有用户添加了它(脚本是 apache 用户 运行,而不是所有者)。
我检查了“/home/ec2-user/.local/lib/python3.7/site-packages”在 sys.path
当我 运行 没有 wgsi 的烧瓶脚本时导入工作正常
这不是 python 2 和 3 之间的混淆问题,因为导入我只有 python3 中的模块是有效的
我的mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so文件兼容python3.7
由于我没有使用守护进程模式,我可以尝试在我的 apache 配置中添加 WSGIPythonPath /home/ec2-user/.local/lib/python3.7/site-packages/
行,这并不奇怪地没有解决问题
我尝试在 cv2 导入之前添加 sys.path.insert(0, '/home/ec2-user/.local/lib/python3.7/site-packages/')
但没有成功
我没有运行任何类型的虚拟环境
conf/httpd-le-ssl.conf
<IfModule mod_ssl.c>
#WSGIPythonPath /home/ec2-user/.local/lib/python3.7/site-packages/
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName "domain.app"
ServerAdmin "admin@domain.app"
ServerAlias "www.domain.app"
WSGIScriptAlias / /var/www/application/myapplication.wsgi
<Directory /var/www/application>
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/domain.app/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.app/privkey.pem
</VirtualHost>
</IfModule>
感谢任何帮助。
这可能是因为模块不在路径中(您可能不正确地更改了路径)或类似的小问题。也许这可能是模块放置不当或以某种方式被删除。我是菜鸟,但我尽力帮忙
原来.local和site-packages都没有执行权限。
我以为读权限允许遍历目录,但显然是执行权限。
我只是 运行 chmod a+x directoryName
在两个目录上,它起作用了。
我还必须取消注释 WSGIPythonPath 行。
我正在 运行在 apache 网络服务器(亚马逊 Linux 2)上使用 wsgi 编写烧瓶脚本。
我在使用 Python 3.7.
时收到“ModuleNotFoundError:没有名为 'cv2' 的模块”错误其他模块没有出现这个错误,我怀疑是因为 cv2 是唯一存储在 “/home/ec2-user/.local/lib/python3.7/站点包”。其他的在“/usr/local/lib/python3.7/site-packages/”
我检查了 site-packages 文件夹的文件权限,该目录没有读写权限。 我为所有用户添加了它(脚本是 apache 用户 运行,而不是所有者)。
我检查了“/home/ec2-user/.local/lib/python3.7/site-packages”在 sys.path
当我 运行 没有 wgsi 的烧瓶脚本时导入工作正常
这不是 python 2 和 3 之间的混淆问题,因为导入我只有 python3 中的模块是有效的
我的mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so文件兼容python3.7
由于我没有使用守护进程模式,我可以尝试在我的 apache 配置中添加
WSGIPythonPath /home/ec2-user/.local/lib/python3.7/site-packages/
行,这并不奇怪地没有解决问题我尝试在 cv2 导入之前添加
sys.path.insert(0, '/home/ec2-user/.local/lib/python3.7/site-packages/')
但没有成功我没有运行任何类型的虚拟环境
conf/httpd-le-ssl.conf
<IfModule mod_ssl.c>
#WSGIPythonPath /home/ec2-user/.local/lib/python3.7/site-packages/
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName "domain.app"
ServerAdmin "admin@domain.app"
ServerAlias "www.domain.app"
WSGIScriptAlias / /var/www/application/myapplication.wsgi
<Directory /var/www/application>
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/domain.app/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.app/privkey.pem
</VirtualHost>
</IfModule>
感谢任何帮助。
这可能是因为模块不在路径中(您可能不正确地更改了路径)或类似的小问题。也许这可能是模块放置不当或以某种方式被删除。我是菜鸟,但我尽力帮忙
原来.local和site-packages都没有执行权限。 我以为读权限允许遍历目录,但显然是执行权限。
我只是 运行 chmod a+x directoryName
在两个目录上,它起作用了。
我还必须取消注释 WSGIPythonPath 行。