从另一个文件夹导入失败python

Tha*_*lia 5 python import

我正在尝试使用python,主要是对其他人的代码进行故障排除.我正在尝试运行程序," path\folderA\program.py".

我正在运行该程序 path\folderA

我收到一个错误:

ImportError: No module named fff.ggg.ppp
Run Code Online (Sandbox Code Playgroud)

program.py包含一个导入:

from fff.ggg.ppp import mmm
Run Code Online (Sandbox Code Playgroud)

在文件夹"path\folderB"中有:" path\folderB\fff\__init__.py"" path\folderB\fff\ggg"

文件夹ggg还包含 __init__.py,以及程序ppp.py

从阅读其他帖子,如Python错误"ImportError:没有模块命名"我明白,__init__.py让一个文件夹成为一个"包",使得从它进口 - 但它不起作用,因为我收到一个错误.

这一直适用于使用这些项目的其他人,所以我的设置有问题.

我读了一些关于必须在sys.path中的目录的内容.这是否意味着我必须将它们添加到环境变量路径中?这意味着要向PATH添加很多目录,所以它不可能.

所以我也发现了以下内容:

import sys
sys.path.append( <path to FolderB> )
Run Code Online (Sandbox Code Playgroud)

但这意味着改变代码(对于其他人来说并不是必需的)并且硬编码到我本地机器上的路径 - 我不应该这样做,对吧?

我无法想象它 - 显然我不应该更改代码并硬编码导入模块的物理路径 - 那么来自folderA的程序怎么能知道在folderB中查找导入?

__init__.py工作的魔力如何?

Win*_*ert 1

我无法想象它 - 显然我不应该更改代码并将物理路径硬编码到导入模块 - 那么来自folderA的程序如何知道在folderB中查找导入?

你是对的。不知何故,你必须告诉 python 在folderB 中查找导入的模块。没有什么__init__.py魔法可以让您从硬盘驱动器上的其他文件夹导入。

通常,如果您有类似的各种不同的 python 包,它们可以通过安装到 python 库中来工作。这样它们就可以从任何地方导入。这通常是通过setup.py脚本来完成的。检查一下是否folderB有。运行它python setup.py install。

如果这不起作用,我们将需要有关此代码的结构的更多信息。