2012-07-06 105 views
0

我有这样的目录结构:Python的路径覆盖

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

而且我想someModule导入从utils.hasClassIWantToImport东西。当我打电话:

from utils.hasClassIWantToImport import ClassIWant 

它无法解析“hasClassIWantToImport”,因为它认为我说的是在当前目录下的utils.py。

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

+2

给不同的模块/类使用相同的名字并不是一个好习惯。 – 2012-07-06 18:36:09

回答

1

没有任何这样你就可以同时保持对PYTHONPATHDIR/utilsPYTHONPATHDIR/App1/utils.py的访问权限,而无需提及其中一个相对于其他的东西。

如果修改路径以使PYTHONPATHDIR位于列表的头部,则可以导入utils.hasClassIWantToImport,但是您将失去对utils.py的访问权限。

关于你能做的最好的就是让App1包放置一个__init__.py文件到它,并Munge时间你的路径就像@Gryphius建议(即把/path/to/utilssys.path头)。当你想utils.hasClassIWantToImport访问,你

from utils.hasClassIWantToImport import ClassIWant 

相对于文件导入到utils.py,然后你会

from App1.utils import ClassIWantFromApp1 

然而,这是一个可怕的黑客只是为了避免重命名utils.py。我建议您自己保存路径处理的长期头痛,并重命名该文件。

1

不知道如果我理解正确的目录设置,但你可以尝试:

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