2011-07-19 43 views
0

我想知道如何导入一个级别的文件。 我在谷歌这个阅读:Python,从父目录导入一个模

>>> sys.path.append("../") 

但我不喜欢它,我希望有一个更好的解决方案

+2

这就是文件系统的工作原理。 –

回答

3

另一种选择,如果你正在写的一个包的一部分,是使用相对进口像这样:

from .. import foo 

其中foo是您要导入的模块的名称。

同样,如果你有在当前目录中的另一个模块,您可以使用:

from . import bar 

可悲的是(或许不那么伤心),但是,这并不比任何进一步的扩展这个。你不能去祖父母或更高。

编辑

至于如此慷慨指出的JAB,我最后的评论还没有真正:

从... SYS导入路径

注意的是,虽然去年案件是合法的,它肯定是不受欢迎的(“疯狂”是Guido使用的词)。

我必须内化Guido对它的描述太多。 ; ^)

编辑

好吧,我只是证实了这一在2.7 - 这显然是去深如你喜欢,是依赖于.

from .... import greatgrandparent 

作品juuuust数精细。我想我需要a bucket

+0

“你不能去祖父母,或更高。” PEP 328似乎暗示你可以。 HTTP://www.python。org/dev/peps/pep-0328 /#guido-s-decision – JAB

+0

我刚刚证实你可以(在Python 3中,至少;它不应该与Python 2有所不同,因为这个相对的import语法已经实现在第一个版本中)。 – JAB

+0

“我一定已经内化了Guido对它的描述太多了; ^)”Guido的描述不是指使用相对导入语法从标准Python模块导入项目吗? (我的意思是,当相对导入从内置的Python模块中获取某些内容时,它会变得非常愚蠢,因为它更合理,而且更合乎逻辑,只需对这些模块进行绝对导入)。 – JAB

0

根据项目的组织方式,您可能可以正常导入它。比方说你的项目结构是这样的:

from mymodule import helper 

/tmp/test_prj/launcher.py 
/tmp/test_prj/mymodule/__init__.py 
/tmp/test_prj/mymodule/helper.py 
/tmp/test_prj/mymodule/mysubmodule/__init__.py 

如果(在这种情况下launcher.py)使用一个发射器和总是调用与./launcher.py您的项目,您使用以下行可能进口helper.pymysubmodule

这是可行的,因为你当前的工作目录是/tmp/test_prj。你可以用print sys.path来检查它,它应该是第一个。

让我知道如果我不够清楚:D