Python 仅在PyCharm中尝试了超出顶级包消息的相对导入

Python 仅在PyCharm中尝试了超出顶级包消息的相对导入,python,pycharm,python-3.7,Python,Pycharm,Python 3.7,更新:如果我将select模块(发生导入错误的模块)的名称更改为select1,问题就会消失!怎么回事 首先:当我尝试从命令行导入包或在项目目录中运行pytest时,一切都正常 但是在PyCharm中,当我尝试运行测试时,我遇到了“试图在顶级包之外进行相对导入”的问题,并且只有在PyCharm中时才出现。我不明白为什么 我甚至删除并重新克隆了存储库,但问题仍然存在 这是问题分支的答案 以下是结核病: Testing started at 4:02 PM ... C:\Users\ricky\Ap

更新:如果我将
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
测试于下午4:02开始。。。
C:\Users\ricky\AppData\Local\Programs\Python37\Python.exe“C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.2\helpers\PyCharm\\u jb\u pytest\u runner.py”--路径C:/Users/ricky/PyCharm项目/candejar/tests
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\JetBrains\PyCharm社区版2018.1.2\helpers\PyCharm\\u jb\u pytest\u runner.py”,第10行,在
从pkg_资源导入iter_入口点
文件“C:\Users\ricky\AppData\Local\Programs\Python\37\lib\site packages\pkg\u resources\uuuuu init\uuuuu.py”,第36行,在
导入email.parser
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\parser.py”,第12行,在
从email.feedparser导入feedparser,BytesFeedParser
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\feedparser.py”,第27行,在
来自电子邮件。\u policybase import compat32
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\\u policybase.py”,第9行,在
从email.utils导入\u具有\u代理项
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\email\utils.py”,第29行,在
导入套接字
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\socket.py”,第52行,在
导入操作系统、系统、io、选择器
文件“C:\Users\ricky\AppData\Local\Programs\Python\Python37\lib\selectors.py”,第12行,在
导入选择
文件“C:\Users\ricky\PycharmProjects\candejar\candejar\select.py”,第24行,在
从…起进口交易所
ImportError:尝试在没有已知父包的情况下进行相对导入
进程已完成,退出代码为1
我肯定这里发生了一些简单的事情,但我就是想不出来。注意:我使用的是Python3.7RC1


pycharm中的
sys.path
和命令行是相同的,除了pycharm还包括pycharm项目主包目录(出于某种原因出现了两次)。

我可以通过从克隆的存储库中删除
.idea
目录并重新打开pycharm来解决这个问题。我仍然不知道出了什么问题,但现在已经解决了。很奇怪

更新:它与
.idea
文件夹中项目
.iml
文件中的以下行有关:

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


删除该xml代码可以解决这个问题。但我不知道为什么,我也不知道它最初是如何到达那里的(我不记得在这个错误之前,我的任何设置都被弄乱了).

检查您的
sys.path
在从控制台和PyCharm运行时是否不同。@Norrius除了PyCharm项目末尾包含项目主程序包目录外,
sys.path
列表是相同的。命令行版本的前面还会出现一个空字符串。至于edit:是Python中的标准模块,这可能会影响导入。@Norrius huh-我不知道它是stdlib的一部分。但它以前工作得很好。现在我已经删除了
.idea
目录,这似乎已经修复了它。