我有一个加载文件 parameters / parameters.xml 的Python3脚本。该脚本内置于PyInstaller的应用程序中。启动以下方式,脚本和应用程序工作正常:
- Windows命令行
- Windows双击浏览器
- Mac OS X命令行
从OS X Finder启动应用程序时,无法找到XML文件。
调用该文件的代码剪切:
try:
self.paramTree = ET.parse("../parameters/parameters.xml")
except:
self.paramTree = ET.parse("parameters/parameters.xml")
self.paramRoot = self.paramTree.getroot()
我怎样才能使文件始终从应用程序的位置加载?
答案 0 :(得分:1)
您可以通过相对路径访问文件。看起来当前的工作目录在最后一种情况下(OS X Finder)没有以相同的方式设置:这会导致找不到文件。
因此,您可以根据程序的位置设置工作目录:
import os
# __file__ is a relative path to the program file (relative to the current
# working directory of the Python interpreter).
# Therefore, dirname() can yield an empty string,
# hence the need for os.path.abspath before os.chdir() is used:
prog_dir = os.path.abspath(os.path.dirname(__file__))
os.chdir(prog_dir) # Sets the current directory
您可以将当前工作目录设置为与此略有不同,具体取决于脚本所期望的内容(可能是脚本的父目录:os.path.join(prog_dir, os.pardir)
)。
这甚至不需要执行try
:由于脚本使用相对于当前工作目录的路径,因此应首先设置当前目录。