2

我希望这个问题有一个简单的答案,而我只是忽略了。

这是设置:

foo/
    __init__.py
    run.py

run.py 的内容:

import foo

运行脚本:

$ python run.py 
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    import foo
ImportError: No module named foo

我能想出解决这个问题的唯一方法是:

run.py 的内容:

import sys
import os

path = os.path.abspath(__file__)
sys.path.append(os.path.join(os.path.dirname(path), "../"))

import foo

这样就可以了,但是问题(如果我没记错的话)是这会将 foo/ 的父目录添加到sys.path并因此搜索 foo/ 的所有同级文件夹以查找 Python 模块。

我有一个案例,我真的,真的不想那样做。我只想将单个目录作为模块添加到我的路径中,但我无法弄清楚如何在添加该目录的父目录以及该父目录下的所有其他目录的情况下添加该模块。

我在这里忽略了什么吗?有没有一种简单的方法可以将脚本的父文件夹添加为模块?

4

1 回答 1

0

我不太明白为什么run要导入它自己的父。毕竟,包只是将模块收集在一起的一种方式。它并不意味着拥有自己的重要功能。

包是一种通过使用“带点的模块名称”来构建 Python 模块名称空间的方式。例如,模块名称 AB 指定了一个名为 A 的包中的一个名为 B 的子模块。就像使用模块使不同模块的作者不必担心彼此的全局变量名称一样,使用点分模块名称可以节省作者多模块包,如 NumPy 或 Python Imaging Library,不必担心彼此的模块名称。

您确定不想run导入同级模块吗?您可以使用相对导入来做到这一点。

于 2010-12-23T16:41:46.977 回答