попытка относительного импорта за пределы сообщения пакета верхнего уровня только в PyCharm

ОБНОВЛЕНИЕ: если я изменю имя модуля select (в котором возникает ошибка импорта) на select1, проблема исчезнет! Что за?

Прежде всего: все работает нормально, когда я пытаюсь импортировать свой пакет из командной строки или запускаю pytest в каталоге проекта.

Но в PyCharm у меня возникает проблема «попытка относительного импорта за пределы пакета верхнего уровня», когда я пытаюсь запустить свои тесты и ТОЛЬКО в PyCharm. Я не могу понять, почему.

Я даже удалил и повторно клонировал репозиторий, но проблема все еще возникает.

Вот ссылка на проблемную ветку.

А вот тб:

Testing started at 4:02 PM ...
C:\Users\ricky\AppData\Local\Programs\Python\Python37\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.2\helpers\pycharm\_jb_pytest_runner.py" --path C:/Users/ricky/PycharmProjects/candejar/tests
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.2\helpers\pycharm\_jb_pytest_runner.py", line 10, in <module>
    from pkg_resources import iter_entry_points
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\site-packages\pkg_resources\__init__.py", line 36, in <module>
    import email.parser
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\_policybase.py", line 9, in <module>
    from email.utils import _has_surrogates
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\utils.py", line 29, in <module>
    import socket
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\socket.py", line 52, in <module>
    import os, sys, io, selectors
  File "C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\selectors.py", line 12, in <module>
    import select
  File "C:\Users\ricky\PycharmProjects\candejar\candejar\select.py", line 24, in <module>
    from . import exc
ImportError: attempted relative import with no known parent package

Process finished with exit code 1

Я уверен, что здесь происходит что-то простое, но я просто не могу понять это. ПРИМЕЧАНИЕ. Я использую Python 3.7 RC 1.

sys.path в pycharm и командной строке оказываются одинаковыми, за исключением того, что pycharm также включает основной каталог пакета проекта pycharm (который по какой-то причине появляется дважды).


person Rick supports Monica    schedule 19.06.2018    source источник
comment
Проверьте, отличается ли ваш sys.path при запуске из консоли и из PyCharm.   -  person Norrius    schedule 19.06.2018
comment
@Norrius, списки sys.path идентичны, за исключением того, что проект pycharm включает основной каталог пакета проекта в конце. пустая строка также отображается в начале версии командной строки.   -  person Rick supports Monica    schedule 19.06.2018
comment
Что касается редактирования: select — это стандартный модуль в Python, который может повлиять импорт.   -  person Norrius    schedule 19.06.2018
comment
@ Норриус, ага, я не знал, что это часть стандартной библиотеки. но раньше работал нормально. и теперь я удалил каталог .idea, и это, похоже, исправило его.   -  person Rick supports Monica    schedule 19.06.2018


Ответы (1)


Я смог решить эту проблему, удалив каталог .idea из клонированного репозитория и повторно открыв PyCharm. Я до сих пор не знаю, что было не так, но теперь это исправлено. Очень странно.

ОБНОВЛЕНИЕ: это как-то связано со следующей строкой в ​​файле проекта .iml в папке .idea:

<sourceFolder url="file://$MODULE_DIR$/candejar" isTestSource="false" />

Удаление этого XML-кода решает проблему. Но я не знаю почему, и я не знаю, как это вообще туда попало (я не помню, чтобы возился с какими-либо настройками до этой ошибки).

person Rick supports Monica    schedule 19.06.2018