如何将脚本的父目录作为模块加载,而不将该目录的父目录的所有兄弟都添加到我的sys.path中?

时间:2010-12-23 16:07:27

标签: python sys.path

我希望这个问题很容易回答,我只是忽略了。

以下是设置:

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模块。 / p>

我有一个案例,我真的,真的不想那样做。我只是想将一个目录作为模块添加到我的路径中,但我无法弄清楚如何添加该模块而不添加该目录的父目录,从而添加该父目录下的每个其他目录

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

1 个答案:

答案 0 :(得分:0)

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

  

包是一种结构化方式   使用Python的模块命名空间   “虚线模块名称”。例如,   模块名称A.B表示a   名为B的子模块名为   A.就像使用模块一样节省   来自不同模块的作者   不得不担心对方的   全局变量名,使用   虚线模块名称保存了作者   多模块软件包,如NumPy或   拥有的Python Imaging Library   担心彼此的模块   名。

您确定不希望run导入兄弟模块吗?您可以使用relative imports