【问题标题】:PyCharm error: 'No Module' when trying to import own module (python script)PyCharm 错误:尝试导入自己的模块时出现“无模块”(python 脚本)
【发布时间】:2015-04-26 14:54:16
【问题描述】:

我已经编写了一个模块(文件my_mod.py 位于文件夹my_module 中)。 目前,我正在处理位于文件夹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 在 python 解释器旁边 -- 更多 -- 显示所选解释器图标的路径,来自 PYTHONPATH 的路径确实出现(我认为它们应该出现)

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

注意事项:

2015 年 2 月 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 控制台。

标签: python module pycharm


【解决方案1】:

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

【讨论】:

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

所以如果你去

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

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

【讨论】:

    【解决方案3】:

    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 的含义。虽然它解决了我的问题,但不太明白我为什么要这样做。
    【解决方案4】:

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

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

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

    它对我有用。

    【讨论】:

    • Source 项目结构中的文件夹对我有用。谢谢。
    • 感谢@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/ 添加为唯一的源文件夹,最终一切顺利。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      所以如果结构是

      parent_folder/src/module.py

      您必须输入以下内容:

      from src.module import function_inside_module

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

      【讨论】:

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

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

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

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

      【讨论】:

      【解决方案8】:

      这可能是因为 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 命令,用于包含依赖项(其他项目)的目录和包含当前项目源代码的目录。但它不会自动完成
      【解决方案9】:

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

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

      【讨论】:

      • 令人惊讶的是,这正是我所需要的,尽管我做了两次Invalidate Cache/Restart
      【解决方案10】:

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

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

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

      【讨论】:

        【解决方案11】:

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

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

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

        【讨论】:

          【解决方案12】:

          ln -s 。一些项目

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

          从 someProjectDir 导入文件2

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

          【讨论】:

            【解决方案13】:

            Pycharm 2017.1.1

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

            这对我有用。

            【讨论】:

              【解决方案14】:

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

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-06
                • 1970-01-01
                • 1970-01-01
                • 2012-08-27
                • 2016-06-24
                相关资源
                最近更新 更多