如何导入位于 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中,我有以下导入结构,

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 使用类似的导入语句...它运行没有任何问题。


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


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

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

from util.util import my_function

然后你可以很容易地在你的脚本中导入模块 __init__.py 告诉 python 它应该将该文件夹视为 python 包,它也可以用于 import/load 模块。

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

引用 docs:

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.

推荐方式:

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

你可以在 Pycharm -> Preferences -> Project: XYZ -> Project Structure

Select 您的工作文件夹并将其标记为 Sources。然后 Pycharm 将工作文件夹识别为项目的源文件夹,您将能够使用

在该文件夹中简单地添加其他文件
import filename.py

from filename.py import mudule1

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

不推荐方式:

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

from .util import my_functions

资源

关于如何实施 Package Relative Imports 的更多信息,还有一个很好的参考。我强烈建议查看此页面。

Package Relative Imports

注:可能有点不相关。

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

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

我在 Ubuntu 16.04

上使用 PyCharm 2017.3

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

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

在 Pycharm 中转到 "Run - Configuration" 并取消选中 'Add Content root to Pythonpath' 和 'Add source roots to Pythonpath', 然后使用

from filename import functionname

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

import filename

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

import 01_MyModuleToImport

import MyModuleToImport