获取Python可执行文件路径

4

我用Python编写了一个程序,当在Python解释器中运行时,可以正常运行。它从同一目录下读取一些文件。为了能够从其他路径运行脚本,该脚本将其工作目录更改为自身所在位置。

import os
abspath = os.path.realpath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)

但是,当我将其打包为.exe文件时,它就不起作用了。因为运行.exe时,__file__变量被设置为"main.py"

我知道可以通过显式设置固定路径来解决此问题:

os.chdir('/Fixed/Path')

但是是否有一种优雅的解决方案?

1
你尝试过 import sys; print sys.executable 吗? 或者 os.path.dirname(sys.argv[0]) - wpercy
是的,看到这样一个打包的Python脚本中sys.executable等于什么是非常有趣的。如果完整的解释器与其一起打包,它可能会奏效。 - ForceBru
@wpercy 谢谢!我试了sys.executable并且它可以。它是我的程序的确切.exe路径。 - Sobir
所以当我写 os.chdir(sys.executable) 时,在使用 Python 解释器运行时它不起作用 :). 现在有什么建议? - Sobir
os.chdir(sys.executable) 试图将当前工作目录更改为可执行文件所在的文件夹,而不是该文件夹。 - martineau
@SobirBobiev 我已经添加了一个答案,应该会有所帮助。 - wpercy
1个回答

9

这里的答案实际上分为两部分。要获取可执行文件的位置,您可以使用

import sys
exe = sys.executable

要将当前目录更改为可执行文件所在的目录,您可以尝试类似以下的命令:

cd 可执行文件所在目录

import os
import sys

exe = sys.executable
dname = os.path.dirname(exe)
os.chdir(dname)

或者简单地说

os.chdir(os.path.dirname(sys.executable))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接