我有一个具有多个用户的 Linux 计算机 (openSuSE) 的云实例。 我已经创建了一个虚拟环境并安装了所有需要的库(包括 Klein)。
我有两个用户“a”和“b”。 当我以“a”身份登录并在 virtualenv 内时,当我在主目录中打开 python shell 并输入
import klein
它正常导入。
现在当我将目录更改为
/home/b/
并在同一个 virtualenv 中运行相同的(打开 python shell,导入 klein),它给了我一个错误。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/a/.local/lib/python3.6/site-packages/klein/__init__.py", line 3, in <module>
from klein._plating import Plating
File "/home/a/.local/lib/python3.6/site-packages/klein/_plating.py", line 16, in <module>
from .app import _call
File "/home/a/.local/lib/python3.6/site-packages/klein/app.py", line 19, in <module>
from twisted.internet import endpoints, reactor
File "/home/a/.local/lib/python3.6/site-packages/twisted/internet/endpoints.py", line 58, in <module>
from twisted.protocols.tls import TLSMemoryBIOFactory
File "/home/a/.local/lib/python3.6/site-packages/twisted/protocols/tls.py", line 63, in <module>
from twisted.internet._sslverify import _setAcceptableProtocols
File "/home/a/.local/lib/python3.6/site-packages/twisted/internet/_sslverify.py", line 158, in <module>
verifyHostname, VerificationError = _selectVerifyImplementation()
File "/home/a/.local/lib/python3.6/site-packages/twisted/internet/_sslverify.py", line 141, in _selectVerifyImplementation
from service_identity import VerificationError
File "/home/a/.conda/envs/mm/lib/python3.6/site-packages/service_identity/__init__.py", line 7, in <module>
from . import cryptography, pyopenssl
File "/home/a/.conda/envs/mm/lib/python3.6/site-packages/service_identity/cryptography.py", line 16, in <module>
from .exceptions import SubjectAltNameWarning
File "/home/a/.conda/envs/mm/lib/python3.6/site-packages/service_identity/exceptions.py", line 21, in <module>
@attr.s
AttributeError: module 'attr' has no attribute 's'
命令“which python”在两个位置给出相同的地址,这是我的 virtualenv python 地址,这应该是预期的。
但是是什么导致了这种奇怪的 python shell 行为。
谢谢
最佳答案
我解决了这个问题,一个非常可耻的原因导致了这个错误。
Twisted 使用的模块之一是“attr”模块。我将我的一个文件命名为 attr.py,这就是导致所有错误的原因。
如果审核没有问题,我自己不会删除这个问题,也许像我这样的人可能会陷入同样的情况。这可能对他们有帮助。
Never name your python files same as that of any standard module unless overriding.
此外,如果您的问题仍然存在,那么 Jean 的回答肯定会解决它。
关于Python shell 在同一虚拟环境中同一台机器的不同位置上的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336251/