首页 文章

PyCharm错误:'No Module'尝试导入自己的模块(python脚本)

提问于
浏览
89

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

在ProjectView(CMD-7)中,我可以看到我的项目 cur_proj (红色)和"External Libraries"下我看到 my_module . 在cool_script.py中,我可以写

from my_module import my_mod as mm

而PyCharm甚至为my_mod提出建议 . 到现在为止还挺好 .

However, when I try to run cool_script.py, PyCharm tells me "No module named my_module"

这对我来说很奇怪,因为

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

B)在PyCharm中 - 设置 - 项目cur_proj - 项目解释器 - 在python解释器旁边的CogWheel - 更多 - 显示所选解释器图标的路径,PYTHONPATH的路径确实出现(我认为应该这样)

因此,当我尝试运行cool_script.py时,为什么会出现错误? - What am I missing?

笔记:

附录2015年2月25日

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

所以它现在有效 - but why

出现了更多问题:

  • 什么是"content roots"什么是"source roots"?为什么在PYTHONPATH中添加一些内容会让它以某种方式破坏?

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

10 回答

  • 4

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

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

  • 6

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

    我希望这有帮助 .

  • 1

    PyCharm社区/专业人员2018.2.1

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

    如果你去 File - > Settings - > Project: YourProjectName - > Project Structure ,你'll have a directory layout of the project you'目前正在使用 . 你必须浏览你的目录并将它们标记为所有源文件的 Source 目录,或者作为 Resource 严格用于导入的文件的文件夹 .

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

    我希望这个答案对某人有所帮助,希望JetBrains能解决这个烦人的错误 .

  • 0

    my_module 是一个文件夹而不是模块,您无法导入文件夹,请尝试将 my_mod.py 移动到与 cool_script.py 相同的文件夹,然后执行 import 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
    
  • 8

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

    Redirect input from:

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

    • 运行输入脚本的目录,或者交互式运行解释器的当前目录

    • PYTHONPATH环境变量中包含的目录列表(如果已设置) .

    • 安安装Python时配置的依赖于安装的目录列表,在我的例子中是Ubuntu上的usr / lib / python3.6 .

  • 0

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

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

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

    它对我有用 .

  • 2

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

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

  • 203

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

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

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

  • 0

    Pycharm 2017.1.1

    • 点击 View->ToolBarView->Tool Buttons

    • 在左侧窗格中,可以看到 Project ,右键单击它并按 Autoscroll to source 然后运行您的代码 .

    这对我有用 .

相关问题