获取.py源文件的位置

时间:2011-08-23 14:10:22

标签: python

假设我在目录 e 中有一个python文件,如下所示:

/a/b/c/d/e/file.py

在目录 e 下我有一些我想访问的文件夹,但如果file.py是从其他地方执行而不是从文件夹 e 执行,则相对路径不会为我工作。文件夹 e 也可以位于任何位置,但始终使用一组子文件夹,因此绝对路径不起作用。

首先,是否有任何函数可以获得与源文件位置相关的绝对路径?

如果没有,任何想法如何解决这个问题?抓住使用的命令行并将CWD一起添加?

我的问题是这个文件夹安装在20台不同的机器和操作系统上,我希望它尽可能动态,只需要很少的配置和必须安装的“规则”等。

3 个答案:

答案 0 :(得分:79)

# in /a/b/c/d/e/file.py
import os
os.path.dirname(os.path.abspath(__file__)) # /a/b/c/d/e

答案 1 :(得分:8)

这是我的解决方案,它(a)获取.py文件而不是.pyc文件,(b)排除符号链接。

在Linux上工作时,.py文件通常符号链接到另一个地方,.pyc文件生成在符号链接的py文件旁边的目录中。要查找源文件的真实路径,这是我用来查找源路径的脚本的一部分。

try:
    modpath = module.__file__
except AttributeError:
    sys.exit('Module does not have __file__ defined.')
    # It's a script for me, you probably won't want to wrap it in try..except

# Turn pyc files into py files if we can
if modpath.endswith('.pyc') and os.path.exists(modpath[:-1]):
    modpath = modpath[:-1]

# Sort out symlinks
modpath = os.path.realpath(modpath)

答案 2 :(得分:1)

在Python +3.4中,使用pathlib更方便:

from pathlib import Path

source_path = Path(__file__).resolve()
source_dir = source_path.parent