假设我在目录 e 中有一个python文件,如下所示:
/a/b/c/d/e/file.py
在目录 e 下我有一些我想访问的文件夹,但如果file.py是从其他地方执行而不是从文件夹 e 执行,则相对路径不会为我工作。文件夹 e 也可以位于任何位置,但始终使用一组子文件夹,因此绝对路径不起作用。
首先,是否有任何函数可以获得与源文件位置相关的绝对路径?
如果没有,任何想法如何解决这个问题?抓住使用的命令行并将CWD一起添加?
我的问题是这个文件夹安装在20台不同的机器和操作系统上,我希望它尽可能动态,只需要很少的配置和必须安装的“规则”等。
答案 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