ChatGPT解决这个技术问题 Extra ChatGPT

PyCharm 错误:尝试导入自己的模块时出现“无模块”(python 脚本)

我编写了一个模块(位于文件夹 my_module 中的文件 my_mod.py 文件)。目前,我正在处理位于文件夹 cur_proj 中的文件 cool_script.py。我已经使用 File -- open 在 PyCharm 中打开了该文件夹(因此我假设它是一个 PyCharm 项目)。

在 ProjectView (CMD-7) 中,我可以看到我的项目 cur_proj(红色),在“外部库”下我确实看到了 my_module。在cool_script.py,我可以写

from my_module import my_mod as mm

PyCharm 甚至为 my_mod 提出了建议。到目前为止,一切都很好。

但是,当我尝试运行cool_script.py 时,PyCharm 告诉我“没有名为 my_module 的模块”

这对我来说似乎很奇怪,因为

A)在终端(OS 10.10.2)中,在python中,我可以导入模块没问题-.bashrc中的PYTHONPATH中有相应的条目

B)在 PyCharm -- Settings -- Project cur_proj -- Project Interpreter -- CogWheel next to python interpreter -- more -- 显示所选解释器图标的路径,来自 PYTHONPATH 的路径确实出现了(我认为它们应该出现)

因此,当我尝试运行cool_script.py 时,为什么会出现错误? ——我错过了什么?

笔记:

我没有在cool_script.py 的顶部声明不同/特殊的python 版本

我确保 my_module 的路径是正确的

我将 __init__.py 文件(空文件)放在 my_module 和 cur_proj 中

我没有使用 virtualenv

附录 2015-Feb-25

当我进入 PyCharm 运行 - 编辑配置时,对于我当前的项目,有两个选项带有复选标记:“将内容根添加到 PYTHONPATH”和“将源根添加到 PYTHONPATH”。当我都未选中时,我可以加载我的模块。

所以它现在可以工作了——但是为什么呢?

进一步的问题出现了:

什么是“内容根”,什么是“源根”?为什么向 PYTHONPATH 添加一些东西会使其以某种方式中断?

我是否应该一直取消选中这两个选项(默认情况下也是如此,不仅是项目特定的配置(运行/调试配置对话框的左侧面板)?

您可能已经尝试过,但是在从其他包导入模块时,请包含包名 from foldername.mymodule import mymethod。我必须做的另一件事是在所有用于访问模块的文件夹中添加空的 _init.py 文件夹,因此在 from parentfolder.childfolder.mymodule ... 的情况下,您需要两个 init文件夹。根据文件夹相对于彼此的位置,您可能需要在 sys.path 中有一个顶级包,如本 answer 中所述
我也有你的问题。以下帖子解决了我的问题:stackoverflow.com/questions/21236824/…
您是否确定为什么取消选中这些复选框而不是选中它们实际上有效?
对我有用的是在 PyCharm 专业版的设置 Languages & Frameworks -> Django 中取消选中 Enable Django Support。它正在打开一个导致导入问题的 django 控制台。
如果您带着本地开发的库来到这里并在终端中再次导入新添加的运行 pip install -e . 的模块解决了我的问题。

b
bad_coder

如果您自己的模块在同一路径中,则需要将路径标记为 Sources Root。在项目资源管理器中,右键单击要导入的目录。然后选择 Mark Directory As 并选择 Sources Root


这对我有用,但我还必须删除并重新创建我之前创建的运行配置,然后再将文件夹标记为源根目录。
并且需要添加 __init__.py 以使 Python 将目录视为包含包:stackoverflow.com/questions/448271/…
如果你不使用 pycharm,你会怎么做?我遇到了完全相同的问题。
@BeatrizFonseca 是的,我做到了。我无法让它在 sublime 中工作,但我安装了 pycharm 并在这里尝试了答案,它工作得非常好,所以它必须与将正确的目录指定为根包有关。
@BoudewijnAasman,您可以尝试在包名称前使用 . 来指定此包是本地包
S
Samujjwal Ghosh

所以如果你去

-> 设置 -> 项目:My_project -> 项目结构,

只是源代码可用的目录并将其标记为“Sources”(您可以在同一窗口中看到它)。包含源代码的目录应变为蓝色。现在您可以导入位于同一目录中的模块。


b
bad_coder

PyCharm 社区/专业版 2018.2.1

我刚才遇到了这个问题,我能够以@Beatriz Fonseca 和@Julie 指出的类似方式解决它。

如果你去 File -> Settings -> Project: YourProjectName -> Project Structure,您将拥有当前正在处理的项目的目录布局。您必须浏览您的目录并将它们标记为所有源文件的 Source 目录,或Resource 文件夹,用于存放严格用于导入的文件。

您还需要确保将 __init__.py 文件放置在您的资源目录中,或者实际上是您想要从中导入的任何位置,并且它会正常工作。


这并不特定于 PyCharm Professional,而是在 PyCharm Community 版本中也提供了此功能。在项目结构中,右键单击包含模块的目录,然后从上下文菜单中选择 Mark Directory as 并选择 Sources Root
您能否告知此 Sources Root 的含义。虽然它解决了我的问题,但不太明白我为什么要这样做。
m
malioboro

我尝试的是获取我的文件所在的位置。

例如E:\git_projects\My_project\__init__.py is my location.

我去了文件->设置->项目:我的项目->项目结构并将内容根添加到关于提及位置 E:\git_projects\My_project

它对我有用。


源项目结构中的文件夹对我有用。谢谢。
感谢@Virendra Patel 和@Microos。我的 pycharm 项目位于 /home/my_user/git_projects/this_git_project/this_pycharm_project/。我将 /home/my_user/git_projects/this_git_project/ 添加为内容根目录,并将 /home/my_user/git_projects/this_git_project/this_pycharm_project/ 添加为唯一的源文件夹,最终一切顺利。
G
Gabriel

始终将导入上方的目录标记为源根目录!

所以如果结构是

parent_folder/src/module.py

您必须输入以下内容:

from src.module import function_inside_module

并在 PyCharm 中将 parent_folder 标记为“源文件夹”


奇怪..我将 src 的等价物标记为源文件夹,但随后使用您的 src.module 为我解决了这个问题!谢谢,虽然我还是很困惑
t
tuomastik

我也收到了“将源根添加到 PYTHONPATH”的错误。我的问题是我有两个同名的文件夹,例如 project/subproject1/thing/srcproject/subproject2/thing/src,并且我将它们都标记为源根目录。当我将其中一个 "thing" 文件夹重命名为 "thing1"(任何唯一名称)时,它起作用了。

也许如果 PyCharm 自动添加选定的源根目录,它不会使用完整路径,因此会混淆具有相同名称的文件夹。


C
Community

my_module 是文件夹而不是模块,您无法导入文件夹,请尝试将 my_mod.py 移动到与 cool_script.py 相同的文件夹,然后执行import my_mod as mm。这是因为 python 只查找当前目录和 sys.path,因此不会找到 my_mod.py,除非它在同一目录中

或者,您可以在 here 中查找告诉您如何从其他目录导入的答案。

至于你的其他问题,我不知道,因为我不使用 PyCharm。


您可以在文件夹中创建 init.py,python 解释器将读取为 python 包:mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html
t
tomchappell

必须完成的关键混淆步骤是为您尝试执行的源文件重新创建运行配置,以便 IDE 选择新路径。

实际上对我有用的方法是转到运行/编辑配置...,选择您要在左侧运行的文件的配置,取消选中“将源根添加到 PYTHONPATH”框,保存,然后返回并检查该框并保存。那么它会起作用。


令人惊讶的是,这正是我所需要的,尽管我做了两次 Invalidate Cache/Restart
N
Nathaniel Ford

当 Python 解释器找不到您的代码时,可能会导致这种情况。您必须向 Python 明确提及才能在此位置找到您的代码。

为此:

转到您的 python 控制台

将 sys.path.extend(['your module location']) 添加到 Python 控制台。

在你的情况下:

转到您的 python 控制台,

在开始时,编写以下代码: import sys sys.path.extend([my module URI location])

编写此语句后,您可以运行以下命令: from mymodule import functions


添加这样的路径有点难看,但它对我有用。
这应该由 pycharm 完成,在打开控制台时,他应该自动包含 sys.path.extend 命令,用于包含依赖项(其他项目)的目录和包含当前项目源代码的目录。但它不会自动完成
R
RA123

内容根是保存项目代码的文件夹,而源根也被定义为相同的。我理解的唯一区别是源根中的代码是在内容根中的代码之前构建的。

取消选中它们不会影响运行时,直到您没有在包中创建手动连接到 Django 的单独模块。这意味着如果您的任何文件不包含 'from django import...' 或没有通过 django 调用任何函数,取消选中这两个选项将导致故障。

更新 - 问题仅在使用 Virtual Environmanet 时出现,并且仅在通过提供的终端控制项目时出现。导致终端仍然通过默认系统 pyhtonpath 而不是虚拟环境工作。而 python django 控制面板工作正常。


P
PyFox

无需将目录标记为源根即可解决此问题的方法是编辑运行配置并在执行中选择“重定向输入自”选项并选择要运行的脚本。这是有效的,因为它被视为脚本在此目录中以交互方式运行。但是 Python 仍然会用错误“no module named x”来标记模块名称:

https://i.stack.imgur.com/lAqOJ.png

当解释器执行 import 语句时,它会在从以下来源组装的目录列表中搜索 x.py:

运行输入脚本的目录或当前目录(如果解释器正在交互运行) PYTHONPATH 环境变量中包含的目录列表(如果已设置)。在安装 Python 时配置的依赖于安装的目录列表,在我的例子中是 Ubuntu 上的 usr/lib/python3.6。


u
user10895922

ln -s 。一些项目

如果您有 someDirectory/someProjectDir 和两个文件 file1.py 和 file2.py,并且 file1.py 尝试使用此行导入

从 someProjectDir 导入文件2

即使您已将 someProjectDir 指定为源目录,并且即使它在首选项、项目、项目结构菜单中显示为内容根目录,它也不起作用。唯一可行的方法是通过如上所示链接项目(unix 命令,在 mac 中工作,不确定 Windows 的使用或语法)。由于软链接是由 Pycharm 在依赖项目中创建的,因此似乎有一些机制使 Pycharm 在从版本控制签出或添加为上下文根时自动执行此操作。因此,只需复制相同的内容,尽管奇怪的目录复制很烦人,而且必要性令人困惑。同样在自动创建的依赖项中,它不会显示为版本控制下的新目录。也许 .idea 文件的比较会揭示更多。


M
Mr. Unnormalized Posterior

PyCharm 2021.2.4——2022 年 3 月 4 日

通过将源目录标记为“源”来解决它。完成了它

右键单击 IDE 左侧项目结构中的源目录。我有一个名为 src/ 的代码源。

导航到“将目录标记为”。

选择“源”作为目录类型。

简而言之,

src -> Mark Directory as -> Source


g
geometrikal

如果您正在运行与其父目录之一同名的 python 文件并尝试导入另一个,则可能会发生这种情况

例如

假设你有文件

my_project/processing/method1/processing.py
my_project/processing/algorithms/predict.py

在 processing.py 中,您可以执行以下操作:

from my_project.processing.algorithms.predict import Predict

它会抛出错误


C
Community

Pycharm 2017.1.1

单击 View->ToolBar & View->Tool Buttons 在左侧窗格中,项目将可见,右键单击它并按 Autoscroll 到源代码,然后运行您的代码。

这对我有用。


b
bsberry

对我有用的答案确实是 OP 在他的 2015 年更新中提到的:在 Python 运行配置中取消选中 these two boxes

“将内容根添加到 PYTHONPATH”

“将源根目录添加到 PYTHONPATH”

我已经将运行配置设置为使用正确的 venv,所以 PyCharm 不需要做额外的工作来将东西添加到路径中。相反,它导致了错误。