Python Mac OS X在应用程序时无法加载外部XML文件

时间:2016-11-11 08:48:03

标签: python macos pyinstaller

我有一个加载文件 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()

我怎样才能使文件始终从应用程序的位置加载?

1 个答案:

答案 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:由于脚本使用相对于当前工作目录的路径,因此应首先设置当前目录。