Python路径覆盖

时间:2012-07-06 18:22:36

标签: python python-module

我有一个像这样的目录结构:

PYTHONPATHDIR
    App1
        someModule.py
        utils.py  
    utils
        hasClassIWantToImport.py

我想要someModule从utils.hasClassIWantToImport导入一些东西。我打电话的时候:

from utils.hasClassIWantToImport import ClassIWant

它无法解析“hasClassIWantToImport”,因为它认为我在谈论当前目录中的utils.py。

我如何解决这个问题?我知道我可以重命名其中一个“utils”但不愿意......

2 个答案:

答案 0 :(得分:1)

不确定我是否已正确理解您的目录设置,但您可以尝试:

import sys
sys.path.insert(0,'/path/to/utils')
from hasClassIwantToImport import ClassIWant

答案 1 :(得分:1)

没有任何方法可以同时保持对PYTHONPATHDIR/utilsPYTHONPATHDIR/App1/utils.py的访问权限,而无需相对于其他内容引用其中一个PYTHONPATHDIRutils.hasClassIWantToImport

如果您修改路径以使utils.py位于列表的首位,则可以导入App1,但您将无法访问__init__.py

关于您可以做的最好的事情是通过将/path/to/utils文件放入其中来制作sys.path文件包并像@Gryphius建议的那样挖掘您的路径(即将utils.hasClassIWantToImport放在from utils.hasClassIWantToImport import ClassIWant 的头部{1}})。如果您想要访问utils.py,那么

from App1.utils import ClassIWantFromApp1

要导入相对于utils.py的文件,您将

{{1}}

然而,这是一个可怕的黑客,只是为了避免重命名{{1}}。我建议你自己保存路径操作的长期头痛并重命名该文件。