Оболочка Python работает по-разному в разных местах на одном компьютере в одной виртуальной среде
У меня есть облачный экземпляр машины Linux (openSuSE) с несколькими пользователями. Я создал виртуальную среду и установил все необходимые библиотеки (включая Klein).
У меня есть два пользователя "а" и "б". Когда вы вошли как "а" и внутри virtualenv, когда я открываю оболочку python в домашнем каталоге и набираю
import klein
он импортирует нормально.
Теперь, когда я меняю каталог на
/ Дом / б /
и запустить то же самое (открыть оболочку Python, импорт Klein), находясь в той же virtualenv, это дает мне ошибку.
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'
Команда "what python" дает одинаковый адрес в обоих местах, который является моим python-адресом virtualenv, и этого следовало ожидать.
Но что вызывает это странное поведение оболочки Python.
Спасибо
2 ответа
Может быть несколько разных пакетов Python, которые предоставляют один и тот же модуль Python. Например, есть как минимум два пакета, которые обеспечивают attr
модуль:
https://pypi.org/project/attr/
https://pypi.org/project/attrs/
Возможно, вы установили неправильный пакет в зависимости от требований. Вы можете проверить, что вы установили с pip freeze
,
Я решил это, и очень постыдная причина вызвала ошибку.
Одним из модулей, который использует Twisted, является модуль "attr". Я назвал один из моих файлов attr.py, и это было причиной всей ошибки.
Я сам не удаляю этот вопрос, если у модерации нет проблем, возможно, кто-то вроде меня может оказаться в такой же ситуации. Это может помочь им.
Никогда не называйте ваши файлы Python такими же, как у любого стандартного модуля, если не переопределите.
Также, если ваша проблема не устранена, ответ Джин определенно разрешит ее.