【问题标题】:NameError: name 'PROTOCOL_TLS' is not definedNameError:未定义名称“PROTOCOL_TLS”
【发布时间】:2018-05-24 01:54:40
【问题描述】:

我正在尝试在我的 Mac 终端上导入 Biopython 模块,但它会引发以下错误。如果有人能帮我解决这个问题,那将非常有帮助。

>>> from Bio import SeqIO
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/Bio/SeqIO/__init__.py", line 317, in <module>
    from Bio._py3k import basestring
  File "/Library/Python/2.7/site-packages/Bio/_py3k/__init__.py", line 235, in <module>
    from urllib2 import urlopen, Request
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 94, in <module>
    import httplib
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1230, in <module>
    import ssl
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 133, in <module>
    PROTOCOL_SSLv23 = PROTOCOL_TLS
NameError: name 'PROTOCOL_TLS' is not defined

谢谢!!!

【问题讨论】:

    标签: python python-2.7 biopython


    【解决方案1】:

    PROTOCOL_TLS was added in 2.7.13.

    奇怪的是,您的错误似乎在 ssl 模块本身中,它应该知道这个常量;我猜想为 OpenSSL 提供 C 接口的 _ssl 模块出了点问题。我知道 Mac 和 OpenSSL 一直是 CPython 开发人员头疼的问题,但我不能再给你更多了。

    尝试执行import _ssl 并确保_ssl.PROTOCOL_TLS 存在并且_ssl 来自一个健全的文件系统位置(在ssl 模块本身附近的某个位置);如果没有,你的_ssl 模块就是个问题。有可能你已经在你的sys.path 中包含了一个 pre-2.7.13 _ssl 模块,即使正在加载一个 post-2.7.13 ssl 模块,它希望在 @987654334 中找到 PROTOCOL_TLS @,找不到时会爆炸。

    【讨论】:

    • 非常感谢!!我在 bashrc 文件中设置了一大堆不必要的东西。我删除了以下内容并且它有效 -> #export PATH="/usr/local/bin:$PATH" #export PATH="/usr/local/opt/hdf5@1.8.18/bin:$PATH"
    • /usr/local/lib/python2.7/lib-dynload/_ssl.so 是 _ssl 模块的错误路径吗?
    • @kinORnirvana:看起来不错(有多种可能的路径,但看起来很典型)。问题在于确定_ssl 是否具有它应该具有的常量。
    • 我厌倦了这个调查,并通过编辑/usr/lib/python2.7/ssl.py (添加PROTOCOL_TLS = 2行)完成了它。之后(运行 pip)的问题得到了解决(但我不确定我没有破坏什么)。
    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2021-04-15
    • 2019-01-26
    • 2021-10-05
    • 2017-08-16
    • 2019-08-18
    相关资源
    最近更新 更多