在相同虚拟环境中同一台机器上的不同位置上,Python Shell的工作方式不同

时间:2018-07-14 07:22:12

标签: python anaconda twisted attr klein-mvc

我有一个具有多个用户的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'

“哪个python”命令在两个位置都给出了相同的地址,这是我的virtualenv python地址,应该是预期的。

但是是什么原因导致了这种怪异的python shell行为。

谢谢

2 个答案:

答案 0 :(得分:2)

我解决了这个问题,很可耻的原因导致了错误。

Twisted使用的模块之一是“ attr”模块。我已将我的一个文件命名为attr.py ,这就是导致所有错误的原因。

如果节制没有问题,我本人也不会删除这个问题,也许像我这样的人可能会陷入同样的​​境地。这可能对他们有帮助。

  

除非覆盖,否则不要将您的python文件命名为任何标准模块的文件。

如果您的问题仍然存在,那么Jean的回答肯定会解决。

答案 1 :(得分:1)

可以有多个不同的Python包提供相同的Python模块。例如,至少有两个提供attr模块的软件包:

https://pypi.org/project/attr/
https://pypi.org/project/attrs/

根据要求,您可能安装了错误的软件包。您可以使用pip freeze检查安装的内容。