PyCharm导入时未解决的引用问题?

4
为什么PyCharm会在这些导入语句下划线:
from oauth2_helper import (_url, get_token, get_session)
from config import scope

作为“未解决的引用”,但如果我在前面加上点:

from .oauth2_helper import (_url, get_token, get_session)
from .config import scope

我在PyCharm中没有看到错误下划线,但是当我从终端运行我的应用程序时,我遇到了这个错误:ModuleNotFoundError: No module named '__main__.oauth2_helper'; '__main__' is not a package。您认为这是为什么?需要进一步调查原因。

3
你是否在终端中选择了你的应用程序运行目录作为Sources Root?(右键单击要设置为根目录的文件夹,然后点击Mark Directory As -> Sources Root)根文件夹应该有一个蓝色的图标。然后PyCharm将自动检查从这个定义的根目录导入的内容。 - Eskapp
将其作为答案发布,这是问题的解决方案。 - Dinko Pehar
1个回答

2
这里有两个问题需要解决:
正如Eskapp在评论中所说,PyCharm配置的项目根目录与您期望的不同,这可以通过它将您的导入标记为未解析的引用来证明。您没有提供任何有关项目结构的提示,但很可能您的项目根目录设置为Python模块的父目录(甚至更高层次)。 PyCharm正在寻找${PROJECTROOT}/oath2_helper,但找不到它,因为项目根目录设置错误。
然后,您尝试通过更改为相对导入来解决此问题,这似乎是一个合理的解决方案。看起来您正在直接调用编写这些导入的模块(即python myapp.py)。当您以这种方式调用模块时,它会丢失有关包结构的信息,并且不再具有有关其他模块相对位置的任何信息。请参见https://dev59.com/y3VD5IYBdhLWcg3wJIAK#73149

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接