2

我一直在尝试学习python-unipath并且已经掌握了基本命令。然而,我一直被这个问题难住了。所以,我想获取当前文件的祖先(2)。所以,在 python 解释器上,我做了这样的事情:

Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from unipath import Path
>>> ORM_ROOT = Path("/home/foo/lump/foobar/turf/orm/unipath_try.py").ancestor(2)
>>> ORM_ROOT
Path('/home/foo/lump/foobar/turf')

..这是正确的,正是我想要的。现在,我将其包装在一个文件中,如下所示:

# -*- coding: utf-8 -*-
# unipath_try.py

from unipath import Path
ORM_ROOT = Path(__file__).ancestor(2)
print ORM_ROOT

当我使用它运行它时,python unipath_try.py我没有得到任何输出!也没有导入错误。我完全困惑为什么会这样——可能真的很愚蠢。将不胜感激任何帮助/指导:(

4

2 回答 2

5

使用os.path.abspath(__file__)而不是__file__.

这是因为__file__在您的情况下包含相对路径。

__file__在不同情况下可以包含相对路径或绝对路径:

因此,如果您不在 sys.path 包含模块的部分内,您将获得一个绝对路径。如果您在 sys.path 包含模块的部分内,您将获得相对路径。

如果你在当前目录中加载一个模块,而当前目录不在 sys.path 中,你会得到一个绝对路径。

如果您在当前目录中加载一个模块,并且当前目录在 sys.path 中,您将获得一个相对路径。

(引用Python __file__ 属性是绝对的还是相对的?

于 2013-08-26T12:40:07.433 回答
4

如果在文件所在的目录中运行脚本,__file__则为filename.py.

>>> Path('a.py')
Path(u'a.py')
>>> Path('a.py').ancestor(2)
Path(u'')

使用以下方式传递绝对路径os.path.abspath

import os

from unipath import Path

ORM_ROOT = Path(os.path.abspath(__file__)).ancestor(2)
print ORM_ROOT

选择

也可以使用absolute()方法。

Path('t.py').absolute().ancestor(2)
于 2013-08-26T12:40:15.690 回答