问题:PyCharm错误:尝试导入自己的模块时(“ Python模块”)为“无模块”
我已经编写了一个模块(位于文件my_mod.py
夹中的文件文件my_module
)。目前,我正在处理文件cool_script.py
夹中的文件cur_proj
。我已经使用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中-设置-项目cur_proj-项目解释器-python解释器旁边的CogWheel-更多-显示所选解释器图标的路径,PYTHONPATH的路径确实出现(我认为应该如此)
因此,为什么在尝试运行cool_script.py时出现错误?- 我想念什么?
笔记:
- 我没有在cool_script.py顶部声明其他/特殊的python版本
- 我确保路径
my_module
正确 - 我将
__init__.py
文件(空文件)都my_module
放入cur_proj
- 我没有用
virtualenv
附录2015年2月25日
当我进入PyCharm以运行-编辑配置时,对于当前项目,有两个选中的选项带有复选标记:“ 将内容根添加到PYTHONPATH ”和“ 将源根添加到PYTHONPATH ”。当我都取消选中时,我可以加载我的模块。
现在就可以了- 但是为什么呢?
出现了其他问题:
- 什么是“内容根”和什么是“源根”?为什么在PYTHONPATH中添加一些内容却使其以某种方式中断?
- 我是否应该一直取消选中这两个选项(在默认设置中也要取消选中这两个选项,而不是仅针对项目特定的配置(“运行/调试配置”对话框的左侧面板)?
回答 0
如果您自己的模块在同一路径中,则需要将该路径标记为Sources Root
。在项目浏览器中,右键单击要导入的目录。然后选择Mark Directory As
,然后选择Sources Root
。
我希望这有帮助。
回答 1
所以如果你去
->设置->项目:My_project->项目结构,
仅提供源代码所在的目录,并将其标记为“源”(您可以在同一窗口中看到它)。带有源代码的目录应变为蓝色。现在,您可以导入位于同一目录中的模块。
回答 2
PyCharm社区/专业版2018.2.1
我现在遇到了这个问题,并且能够以类似于@Beatriz Fonseca和@Julie指出的方式解决它。
如果转到File
-> Settings
-> Project: YourProjectName
-> Project Structure
,则将具有当前正在处理的项目的目录布局。必须浏览目录并将其标记Source
为所有源文件的目录,或作为Resource
严格导入文件的文件夹。
您还需要确保将__init__.py
文件放置在资源目录中,或者实际上是要导入的任何位置,并且可以很好地工作。
我希望这个答案对某人有帮助,并希望JetBrains可以解决此烦人的错误。
回答 3
我尝试的是获取文件所在的位置。
例如 E:\git_projects\My_project\__init__.py is my location.
我转到文件->设置->项目:My_project->项目结构,然后将内容根添加到要提到的地方 E:\git_projects\My_project
它为我工作。
回答 4
my_module
是不是模块的文件夹,您不能导入文件夹,请尝试移至my_mod.py
与相同的文件夹cool_script.py
,然后执行import my_mod as mm
。这是因为python仅在当前目录和中sys.path
查找,因此my_mod.py
除非在同一目录中,否则不会找到
或者,您可以在此处找到答案,告诉您如何从其他目录导入。
关于您的其他问题,我不知道我不使用PyCharm。
回答 5
我也收到“将源根添加到PYTHONPATH”错误。我的问题是我有两个具有相同名称的文件夹,例如project/subproject1/thing/src
和,project/subproject2/thing/src
并且两个文件夹都标记为源根。当我将其中一个"thing"
文件夹重命名为"thing1"
(任何唯一的名称)时,它起作用了。
也许PyCharm自动添加选定的源根目录,它不会使用完整路径,因此会混淆具有相同名称的文件夹。
回答 6
当Python解释器找不到您的代码时,可能会导致这种情况。您必须向Python明确提及才能在此位置找到您的代码。
为此:
- 转到您的python控制台
- 添加
sys.path.extend(['your module location'])
到Python控制台。
在您的情况下:
- 转到您的python控制台,
首先,编写以下代码:
import sys sys.path.extend([my module URI location])
编写此语句后,可以运行以下命令:
from mymodule import functions
回答 7
必须完成的关键混乱步骤是为您要执行的源文件重新创建运行配置,以便IDE选择新路径。
对我而言,真正有效的方法是转到“运行/编辑配置…”,为您要在左侧运行的文件选择配置,取消选中“将源根添加到PYTHONPATH”框,保存,然后返回并选中该框并保存。然后它会工作。
回答 8
内容根是保存项目代码的文件夹,而源根也被定义为相同的文件夹。我唯一了解的区别是,源根目录中的代码是在内容根目录中的代码之前构建的。
取消选中它们不会影响运行时,直到您没有在程序包中创建单独的模块(这些模块已手动连接到Django)为止。这意味着,如果您的任何文件不包含“ from django import …”或未通过django调用任何功能,则取消选中这两个选项将导致故障。
更新-仅在使用Virtual Environmanet时出现问题,并且仅在通过提供的终端控制项目时出现。因为终端仍然可以通过默认系统pyhtonpath而不是虚拟环境工作。而python django控制面板可以正常工作。
回答 9
解决此问题而不必将目录标记为源根的解决方案是编辑运行配置,然后在执行中选择选项“重定向输入自”,然后选择要运行的脚本。之所以可行,是因为随后将其视为脚本是在此目录中以交互方式运行。但是,Python仍会使用错误“没有名为x的模块”来标记模块名称:
解释器执行import语句时,它将在从以下来源汇编的目录列表中搜索x.py:
- 运行输入脚本的目录或当前目录(如果解释器正在交互运行)
- PYTHONPATH环境变量(如果已设置)中包含的目录列表。
- 在安装Python时配置的与安装有关的目录列表,在我的情况下为Ubuntu上的usr / lib / python3.6。
回答 10
Pycharm 2017.1.1
- 点击
View->ToolBar
&View->Tool Buttons
- 在左窗格
Project
上将可见,右键单击它,然后按Autoscroll to source
,然后运行您的代码。
这对我有用。
回答 11
ln -s someProject
如果您有someDirectory / someProjectDir和两个文件,则file1.py和file2.py,以及file1.py尝试使用此行导入
从someProjectDir导入file2
即使您已将someProjectDir指定为源目录,并且即使它在首选项中也将项目,项目结构菜单显示为内容根目录,它也无法使用。它将起作用的唯一方法是通过链接如上所示的项目(unix命令,在Mac中工作,不确定Windows的使用或语法)。由于软链接是由Pycharm在依赖项目中创建的,因此似乎存在某种机制,Pycharm可以在从版本控制签出或作为上下文根添加时自动执行此操作。因此,尽管复制了相同的内容,但奇怪的是目录的复制令人烦恼,而必要性却令人困惑。同样在自动创建的依赖项中,它在版本控制下也不显示为新目录。.idea文件的比较可能会发现更多。
回答 12
对我有用的答案确实是OP在他的2015年更新中提到的内容:取消选中Python运行配置中的以下两个框:
- “将内容根添加到PYTHONPATH”
- “将源根添加到PYTHONPATH”
我已经将run config设置为使用正确的venv,因此PyCharm不需要做其他工作即可向路径添加内容。相反,它导致了错误。