0

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

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

我希望 someModule 从 utils.hasClassIWantToImport 导入一些东西。当我打电话时:

from utils.hasClassIWantToImport import ClassIWant

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

我该如何解决这个问题?我知道我可以重命名“utils”之一,但宁愿不...

4

2 回答 2

1

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

import sys
sys.path.insert(0,'/path/to/utils')
from hasClassIwantToImport import ClassIWant
于 2012-07-06T18:27:18.827 回答
1

没有任何方法可以让您同时保持对两者的访问,PYTHONPATHDIR/utilsPYTHONPATHDIR/App1/utils.py无需参考其中一个相对于其他事物。

如果您修改路径以使其PYTHONPATHDIR位于列表的开头,则可以导入utils.hasClassIWantToImport,但您将无法访问utils.py.

你能做的最好的事情是App1通过将文件放入其中来制作一个包,__init__.py然后像@Gryphius 建议的那样调整你的路径(即/path/to/utils放在sys.path. 当你想访问时utils.hasClassIWantToImport,你

from utils.hasClassIWantToImport import ClassIWant

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

from App1.utils import ClassIWantFromApp1

然而,这是一个可怕的黑客,只是为了避免重命名utils.py。我建议让自己免于长期头痛的路径操作,只需重命名该文件即可。

于 2012-07-06T20:30:11.747 回答