【问题标题】:How to import python file located in same subdirectory in a pycharm project如何在pycharm项目中导入位于同一子目录中的python文件
【发布时间】:2020-12-21 04:23:44
【问题描述】:

我在pycharm调试运行时出现输入错误。

我的项目结构已正确植根,etc./HW3/. 因此HW3 是根目录。

我在 HW3 中有一个子文件夹 util 和一个文件 util/util.py。我在util 中有另一个名为run_tests.py 的文件。

run_tests.py,我有以下导入结构,

from util.util import my_functions, etc.

这会产生输入错误,from util.util import load_dataset,proportionate_sample ImportError: No module named 'util.util'; 'util' is not a package


但是,在完全相同的项目中,在另一个名为data 的目录(与util 相同的级别)中,我有一个文件data/data_prep.py,它还使用类似的导入语句从util/util.py 导入函数。 .它运行没有任何问题。


显然,我是在做作业的过程中这样做的,所以请理解:这是作业范围的附属。


当我将文件移动到另一个目录时,问题就消失了。所以我猜这个问题是How do I import a python file located in the same directory in a pycharm project?因为如果我只做import util,pycharm会引发错误并提示我使用全名从根。

【问题讨论】:

  • 你有没有__init__.py 如果没有,创建一个并从util.util import my_function 添加然后尝试在文件中导入它
  • 然后我将__init__.py 放在基目录(我的问题中是HW3)中,并在其中包含该行?
  • 没有在util文件夹中,告诉python它是一个包,__init__.py也可以用来导入/加载模块
  • 好的,很好,我应该删除还是您要回答?谢谢,这是非常有用的信息。到目前为止,我一直是 Python 的速成课程。
  • 得到一些代表会很棒:)

标签: python pycharm importerror


【解决方案1】:

推荐方式:

确保将工作文件夹设置为Sources

你可以在Pycharm->Preferences->Project: XYZ->Project Structure中做到这一点

选择您的工作文件夹并将其标记为Sources。然后 Pycharm 将工作文件夹识别为项目的源文件夹,您将能够通过使用简单地在该文件夹中添加其他文件

import filename.py

from filename.py import mudule1

==================

不推荐的方式:

Pycharm 中,您只需在.py 文件之前添加.,您将从同一文件夹 导入该文件。在你的情况下,它会是

from .util import my_functions

资源

还有一个很好的参考,以获取更多信息,例如如何实现 Package Relative Imports。我强烈建议您查看此页面。

Package Relative Imports

【讨论】:

  • 这解决了我的问题!我的文件夹源设置不正确
  • 这也解决了我的问题。我可以运行我的代码,但在将其标记为 sources PyCharm 之前抱怨“未找到模块...”
  • 啊,有福了!
  • 这很好,直到您尝试从终端运行程序。在那一刻,所有 ModuleNotFoundErrors 都出现了。
【解决方案2】:

如果您没有__init__.py,请创建一个并添加此行

from util.util import my_function

然后您可以轻松地在脚本中导入模块 __init__.py 告诉 python 它应该将该文件夹视为 python 包,它也可以用于导入/加载模块。

在大多数情况下,__init__.py 是空的。

引用docs

需要__init__.py 文件才能让 Python 处理 包含包的目录;这样做是为了防止 无意中使用通用名称(例如 string)的目录 隐藏稍后出现在模块搜索路径上的有效模块。在 最简单的情况,__init__.py 可以只是一个空文件,但它可以 还执行包的初始化代码或设置__all__ 变量,稍后介绍。

【讨论】:

    【解决方案3】:

    右键单击要标记为源的文件夹 > 将目录标记为 > 源根目录。

    【讨论】:

      【解决方案4】:

      注意:可能有点无关。

      我遇到了同样的问题,但是在运行 jupyter notebook 时,我无法在同一目录(而不是 OP 要求的子目录)中导入模块(这里的目录没有__init__.py)。奇怪的是,我已经设置了 python 路径和解释器位置以及所有内容。其他答案都没有帮助,但更改 python 中的目录确实有效。

      import os
      os.chdir(/path/to/your/directory/)
      

      我在Ubuntu 16.04上使用PyCharm 2017.3

      【讨论】:

        【解决方案5】:

        我在使用 pycharm 时遇到了同样的问题,但实际的错误是我尝试导入的文件没有 .py 扩展名,即使我能够将它作为独立脚本运行。查看资源管理器窗口并确保它具有 .py 扩展名。如果没有,请右键单击资源管理器窗口中的文件,选择重构,然后将其重命名为 .py 扩展名。

        【讨论】:

          【解决方案6】:

          就我而言,它仅在我省略扩展名时才有效。示例:

          import filename
          

          【讨论】:

            【解决方案7】:

            在 Pycharm 中转到“运行 - 配置”并取消选中 '将内容根目录添加到 Pythonpath' 和 '将源根添加到 Pythonpath', 然后使用

            from filename import functionname
            

            【讨论】:

              【解决方案8】:

              对我来说,问题是源目录标记正确,但我要导入的文件以数字值开头命名。通过重命名解决。

              import 01_MyModuleToImport
              

              import MyModuleToImport
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-09-26
                • 2022-01-27
                • 1970-01-01
                • 2020-04-29
                • 1970-01-01
                • 1970-01-01
                • 2011-05-07
                相关资源
                最近更新 更多