我在这里回答我自己的问题,以节省其他人花在解决这个问题上的 2 个小时。
另外,虽然这是一个python3.6问题,但我想同样的陷阱将适用于2.7
我在 ubuntu 18.04 上运行一个 venv,其中默认的 python 是 2.7。在我决定创建一个venv之前,我必须指定python3.6
才能为我的项目获得正确的python版本。
然后我决定(作为适当的做法(使用 venv。我像这样创建了 venv:
python3.6 -m venv .
从我工作的目录中。然后-
pip install pyopenssl
我像以前一样运行我的脚本 - shebang 是 #!/usr/bin/python3.6
./sslchecker.py
并收到一个错误,指出它无法加载 OpenSSL 库。
所以我试了这个:
$ python3.6
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/dominic/.local/lib/python3.6/site-packages', '/usr/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>>
没有提到我当前的目录?什么给?
我使用的是python3.6系统,而不是venv中的系统。
诀窍是停用 venv,然后从中删除系统文件夹(可能不完全必要,但我不完全确定我在黑客攻击时弄了什么乱七八糟(
$ deactivate
dominic at dominic-ThinkPad-X220 in ~/ssl-checker on master*
$ rm -rf bin include lib lib64 __pycache__ pyvenv.cfg share
然后
dominic at dominic-ThinkPad-X220 in ~/ssl-checker on master*
$ python3.6 -m venv .
dominic at dominic-ThinkPad-X220 in ~/ssl-checker on master*
$ source bin/activate
(ssl-checker) dominic at dominic-ThinkPad-X220 in ~/ssl-checker on master*
$ python --version
Python 3.6.9
(ssl-checker) dominic at dominic-ThinkPad-X220 in ~/ssl-checker on master*
$ python
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/dominic/ssl-checker/lib/python3.6/site-packages']
>>>
只是在 venv 中说python
,而不是指定python3.6
,才是问题的真正关键。