PyCharm错误:尝试导入自己的模块时没有模块(python脚本)

问题描述 投票:110回答:13

我写了一个模块(文件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时,为什么会出现错误? - 我错过了什么?

笔记:

Addendum 2015-Feb-25

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

所以它现在有效 - 但为什么呢?

出现了更多问题:

  • 什么是“内容根源”和什么是“源根”?为什么在PYTHONPATH中添加一些东西会让它以某种方式破坏?
  • 我是否应该一直取消选中这两个选项(默认情况下,不仅是项目特定的配置(运行/调试配置对话框的左侧面板)?
python module pycharm
13个回答
254
投票

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

我希望这有帮助。


0
投票

Pycharm 2017.1.1

  1. 点击View->ToolBarView->Tool Buttons
  2. 在左侧窗格中,可以看到Project,右键单击它并按Autoscroll to source然后运行您的代码。

这对我有用。


0
投票

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

Redirect input from:

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

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

0
投票

ln -s。 someProject

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

来自someProjectDir导入文件2

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


0
投票

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

  • “将内容添加到PYTHONPATH”
  • “将源根添加到PYTHONPATH”

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


0
投票

当工作目录设置不正确时,我收到此错误。这很奇怪,因为它是一个全新的安装,我想不出为什么PyCharm会使用一些随机目录作为项目的工作目录,而不是根目录


16
投票

PyCharm Community/Professional 2018.2.1

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

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

您还需要确保将__init__.py文件放在资源目录中,或者确实放在要导入的任何位置,并且它将完美地运行。

我希望这个答案对某人有帮助,希望JetBrains能解决这个烦人的问题。


7
投票

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

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

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

它对我有用。


6
投票

所以,如果你去

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

只是源代码可用的目录,并将其标记为“Sources”(您可以在同一窗口中看到它)。带源代码的目录应该变为蓝色。现在你可以导入驻留在同一个目录中的模块。


4
投票

my_module是一个文件夹而不是模块,你不能导入文件夹,尝试将my_mod.py移动到与cool_script.py相同的文件夹,然后再移动到doimport my_mod as mm。这是因为python只查看当前目录和sys.path,所以不会找到my_mod.py,除非它在同一目录中

或者你可以查看here的答案,告诉你如何从其他目录导入。

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


2
投票

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

为此:

  • 转到你的python控制台
  • sys.path.extend(['your module location'])添加到Python控制台。

在你的情况下:

  • 转到你的python控制台,
  • 在开始时,编写以下代码: import sys sys.path.extend([my module URI location])
  • 编写完该语句后,可以运行以下命令: from mymodule import functions

2
投票

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

对我来说实际工作的方式是转到运行/编辑配置...,选择您尝试在左侧运行的文件的配置,取消选中“将源根添加到PYTHONPATH”框,保存,然后返回并选中复选框并保存。然后它会工作。


2
投票

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.