【发布时间】:2012-07-13 18:57:55
【问题描述】:
我正在尝试使用 python,主要是对其他人的代码进行故障排除。我正在尝试运行一个程序“path\folderA\program.py”。
我正在从path\folderA运行程序
我收到一个错误:
ImportError: No module named fff.ggg.ppp
program.py 包含一个导入:
from fff.ggg.ppp import mmm
在文件夹“path\folderB”中有:
"path\folderB\fff\__init__.py"
"path\folderB\fff\ggg"
文件夹ggg还包含__init__.py,以及程序ppp.py
通过阅读其他帖子,例如 Python error "ImportError: No module named",我了解到拥有 __init__.py 会使文件夹成为“包”,从而可以从中导入 - 但它不起作用,因为我遇到了错误。
这一直适用于参与这些项目的其他人,所以我的设置有问题。
我读到了一些关于必须在 sys.path 中的目录。这是否意味着我必须将它们添加到环境变量路径中?这意味着向 PATH 中添加很多目录,所以不可能。
所以我还发现了以下内容:
import sys
sys.path.append( <path to FolderB> )
但这意味着更改代码(其他人没有必要)并硬编码一条指向我本地机器上的路径 - 我不应该这样做,对吧?
我无法想象它 - 显然我不应该更改代码并硬编码导入模块的物理路径 - 那么来自文件夹 A 的程序怎么可能知道在文件夹 B 中查找导入?
__init__.py 的魔力如何发挥作用?
【问题讨论】:
-
Python 在
PYTHONPATH环境变量中查找,而不是PATH