Python 无法导入 ssl 模块
Posted
技术标签:
【中文标题】Python 无法导入 ssl 模块【英文标题】:Python cannot import ssl module 【发布时间】:2017-11-02 03:23:05 【问题描述】:在 ubuntu-16.04 上安装了 xampp。
XAMPP根安装位置:/opt/lampp
Python 2.7.12 姜戈 1.11 XAMPP 5.6.30
wsgi.py 设置: ```蟒蛇
import os
import sys
import site
site.addsitedir('/opt/lampp/htdocs/dpcm/dpcm/lib/python2.7/site-packages')
sys.path.insert(0, '/opt/lampp/htdocs/dpcm')
sys.path.insert(1, '/opt/lampp/htdocs/dpcm/dpcm1')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dpcm1.settings")
os.environ.setdefault("PYTHON_EGG_CACHE", "/opt/lampp/htdocs/dpcm/.python-eggs")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# if import ssl module, it will occur an error.
import ssl
```
/opt/lampp/apache2/conf/httpd.conf 内容:
Alias /bitnami/ "/opt/lampp/apache2/htdocs/"
Alias /bitnami "/opt/lampp/apache2/htdocs"
<Directory "/opt/lampp/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias /dpcm/ /opt/lampp/htdocs/dpcm/dpcm1/wsgi.py
#WSGIDaemonProcess /dpcm/ python-path=/opt/lampp/htdocs/dpcm:/opt/lampp/htdocs/dpcm/dpcm/lib/python2.7/site-packages
#WSGIProcessGroup /dpcm/
WSGIPythonPath /opt/lampp/htdocs/dpcm
WSGIPythonHome /opt/lampp/htdocs/dpcm/dpcm/
<Directory /opt/lampp/htdocs/dpcm/dpcm1>
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>
Alias /static/ /opt/lampp/htdocs/dpcm/static/
<Directory /opt/lampp/htdocs/dpcm/static>
Order allow,deny
Allow from all
</Directory>
如果在非活动模式下导入ssl模块,则可以成功导入。 但是如果在wsgi.py或者其他django项目文件中添加'import ssl',就会报错:
[Thu Jun 01 10:54:13.272126 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] mod_wsgi (pid=5430): Target WSGI script '/opt/lampp/htdocs/dpcm/dpcm1/wsgi.py' cannot be loaded as Python module.
[Thu Jun 01 10:54:13.272176 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] mod_wsgi (pid=5430): Exception occurred processing WSGI script '/opt/lampp/htdocs/dpcm/dpcm1/wsgi.py'.
[Thu Jun 01 10:54:13.272207 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] Traceback (most recent call last):
[Thu Jun 01 10:54:13.272230 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] File "/opt/lampp/htdocs/dpcm/dpcm1/wsgi.py", line 33, in <module>
[Thu Jun 01 10:54:13.272308 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] import ssl
[Thu Jun 01 10:54:13.272320 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] File "/usr/lib/python2.7/ssl.py", line 97, in <module>
[Thu Jun 01 10:54:13.276754 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] import _ssl # if we can't import it, let the error propagate
[Thu Jun 01 10:54:13.276826 2017] [wsgi:error] [pid 5430] [client 10.0.2.15:41534] ImportError: /opt/lampp/lib/libssl.so.1.0.0: version `OPENSSL_1.0.1' not found (required by /opt/lampp/htdocs/dpcm/dpcm/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so)
在正常情况下,它将.so链接到/usr/lib
,但它在/opt/lampp/lib
中找到,
所以我认为这是环境变量问题。
在 shell 脚本中添加以下代码:lampp
LD_LIBRARY_PATH='/usr/lib'
export LD_LIBRARY_PATH
和注释代码
# if test "$(osguess)" = "macosx"
# then
# # Thanks to drosenbe! - oswald [3sep10]
# if test -z $DYLD_LIBRARY_PATH
# then
# export DYLD_LIBRARY_PATH="$LIBRARY_PATH"
# else
# export DYLD_LIBRARY_PATH="$LIBRARY_PATH:$DYLD_LIBRARY_PATH"
# fi
# else
# # Thanks to drosenbe! - oswald [3sep10]
# if test -z $LD_LIBRARY_PATH
# then
# export LD_LIBRARY_PATH="$LIBRARY_PATH"
# else
# export LD_LIBRARY_PATH="$LIBRARY_PATH:$LD_LIBRARY_PATH"
# fi
# fi
这个没用,有没有人和我一样的问题?
【问题讨论】:
推荐您阅读modwsgi.readthedocs.io/en/develop/user-guides/…,了解使用 Python 虚拟环境设置 mod_wsgi 的正确方法。你不应该使用python-path
。不过,这与您的 SSL 问题无关。
【参考方案1】:
您的 Python 发行版是针对与您的 Apache 发行版使用的不同的 SSL 库编译的。 Apache 加载的优先,导致 Python 稍后失败。
简而言之,您不能使用该 Apache 发行版,因为它将与任何嵌入语言的 Apache 模块不兼容,例如 Python、php、Perl 等,其中语言运行时使用系统 SSL 库。请改用系统 Apache 发行版。
【讨论】:
是的,你是对的,我使用 apache2+mysql 来服务我的项目,而不是 xampp。它运作良好。非常感谢。【参考方案2】:请也检查一下,这可能会有所帮助。 Why use sys.path.append(path) instead of sys.path.insert(1, path)?
【讨论】:
【参考方案3】:刚导入
site.addsitedir('/opt/lapmpp/htdocs/dpcm/dpcm/lib/python2.7/site-packages')
应该是 /opt/lampp 而不是 /opt/lapmpp?
请尝试此更改。
【讨论】:
opps,还是不行,我觉得这个问题和question是一样的以上是关于Python 无法导入 ssl 模块的主要内容,如果未能解决你的问题,请参考以下文章
Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题
AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”