2014-01-17 180 views
1

我正在寻找一些关于我遇到的python问题的建议。我是python的新手。我相信我依靠其他语言的编程经验来完成这项工作,并且我终于停滞不前。这里是场景,我正在导入一个依赖于另一个模块的模块。从相对路径导入模块

我的节目,叫司机test.py,开始时是这样的:在QueryDDEX.py文件

import sys 
sys.path.append(r'C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files') 

import QueryDDEX 

然后,我有:

import sys,os 

temp = os.getcwd() 
os.chdir(os.path.dirname(os.path.realpath(__file__))) 
sys.path.append(os.path.realpath("..\..\..\..\..\..\..\..\..\python")) 

print sys.path 

import zorba_api 

os.chdir(temp) 

在我脑子里,我想(1)保存当前工作目录,(2)将当前工作目录更改为QueryDDEX.py模块的目录,(3)从相对路径导入zorba_api模块,因为如果我将此模块部署到其他计算机上,它们可能不会与我的文件结构相同,(4)更改当前的工作目录回到最初的样子。

现在,我已经读过,使用相对路径并不好,我也读过它是好的。我没有看到另一个选择,因为我没有写zorba_api,所以我没有太多的控制权。无论如何,该程序的输出是这样的:

['C:\\Users\\Administrator\\Desktop', 'C:\\Python27\\Lib\\idlelib', 'C:\\Windows\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\uris\\com\\nuemeta\\www\\modules\\DDEXpedite\\bindings\\Python\\Code and Other Files', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python'] 

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\Test.py", line 4, in <module> 
import QueryDDEX 
    File "C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files\QueryDDEX.py", line 9, in <module> 
    import zorba_api 
ImportError: No module named zorba_api 

这就是事情在我看来变得棘手时,zorba_api模块位于

C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python 

,我们可以通过我的调试语句看到它IS在python类路径中。那么,为什么我会得到这个错误?

回答

1

看看这个场景。您的文件alpha.pyC:\projects\test\。然后,你也有一个在C:\projects\test\modules\beta.py所以导入betaalpha你应该做的文件:

import modules.beta 

或者说,不是很好,但有用的,加入modules目录到sys.path

然后,如果你想从你的beta.py文件导入模块,你将不得不注意你不在C:\projects\test\modules\目录,你在alpha.py目录。因此,举例来说,如果有一个在modules/称为gamma.py第三个文件,如果你想从beta.py导入它,你应该使用:

import modules.gamma 

因为你是在进口商文件alpha.py)路径,而不是在导入文件beta.py)路径。

希望它有助于解决您的问题!

+0

我明白你在说什么,但也许我不知道,因为我仍然不明白为什么我的解决方案在这种情况下不起作用。我将当前工作目录更改为__file__,因此它位于模块的位置,然后尝试使用从第一个模块到第二个模块的相对路径。它适用于我使用绝对路径。最后,我能做些什么来解决它?我开始明白为什么我的程序不能正常工作,但现在我更加困惑于如何让它工作。 – zg303

+0

在你的'QueryDDEX中追加一个新路径。py'文件你应该注意你在'test.py'路径,所以也许你提供的路径是错误的。 – cdonts

+0

原来我是我的相对路径中的一个目录,添加“/../”解决了这个问题。感谢您的帮助,如果没有您,需要花费更长的时间进行调试。 – zg303

相关问题