如何导入位于pycharm项目中相同子目录中的python文件

How to import python file located in same subdirectory in a pycharm project

调试和运行时,pycharm中出现输入错误。

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

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

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

1
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,它也使用类似的import语句从util/util.py导入函数...并且它运行没有任何问题。

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

当我将文件移到另一个目录时,问题消失了。所以我想这个问题是如何导入位于pycharm项目同一目录中的python文件?因为pycharm如果执行import util会引发错误,并提示我使用根目录下的全名。


推荐方式:

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

您可以在Pycharm -> Preferences -> Project: XYZ -> Project Structure中进行操作

选择您的工作文件夹并将其标记为Sources。然后,Pycharm将工作文件夹识别为项目的"源"文件夹,您将可以使用以下命令在该文件夹中添加其他文件

1
import filename.py

要么

1
from filename.py import mudule1

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

不推荐的方式:

Pycharm中,您可以简单地在要从同一文件夹导入的.py文件之前添加.。在你的情况下

1
from .util import my_functions


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

1
from util.util import my_function

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

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

引用文档

The __init__.py files are required to make Python treat the
directories as containing packages; this is done to prevent
directories with a common name, such as string, from unintentionally
hiding valid modules that occur later on the module search path. In
the simplest case, __init__.py can just be an empty file, but it can
also execute initialization code for the package or set the __all__
variable, described later.


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


就我而言,仅当我省略扩展名时它才起作用。例:

1
import filename

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


注意:可能有点无关。

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

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

我在Ubuntu 16.04上使用PyCharm 2017.3


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

1
from filename import functionname