从相对路径导入模块

时间:2014-01-17 23:58:39

标签: python python-2.7

我正在寻找关于我遇到的python问题的一些建议。我是python的新手。我相信我依靠其他语言的编程经验来完成这项工作,我终于站稳了脚跟。这是场景,我正在导入一个依赖于另一个模块的模块。

我的程序驱动程序名为test.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

然后在QueryDDEX.py文件中我有:

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

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

1 个答案:

答案 0 :(得分:1)

查看此方案。您在alpha.py处有C:\projects\test\文件。然后,您还在beta.py处有一个名为C:\projects\test\modules\的文件,因此要从beta导入alpha,您应该这样做:

import modules.beta

或者,不是很好但很有用,将modules目录添加到sys.path

然后,如果要从beta.py文件导入模块,则必须注意不在C:\projects\test\modules\目录,而是在alpha.py目录中。例如,如果gamma.py处有第三个名为modules/的文件,如果要从beta.py导入,则应使用:

import modules.gamma

因为您位于导入程序文件alpha.py)路径,而不是导入的文件beta.py)路径。

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