将工作方向设置为 Python (pyinstaller) 中脚本的方向

Setting working direction to direction of the script in Python (pyinstaller)

我有一个非常简单的脚本,它从一些 .csv 或 .db 文件中获取数据,执行操作并将输出保存在类似的文件中。我在 Spyder 中使用参数“文件目录中的 运行”,因此当我 运行 文件时,我的 wd 会自动设置为文件目录。这样我就可以将所有文件放在一个文件夹中并且不会弄乱路径(例如始终使用 open("data.csv"))。我的文件存储如下:

/Users/username/docs/script.py
/Users/username/docs/data.cv
/Users/username/docs/database.db

我已经尝试使用 pyinstaller 给那些同事,你也可以轻松地编写脚本,但是任何时候他们 运行 它都会将工作目录设置为 /Users/username/ 并且所有相对路径都被破坏了。

我怎样才能保留这个问题,以便脚本(pyinstaller shell 脚本)将文件夹及其位置作为工作目录,就像 Spyder 所做的那样?

您可以使用os模块中的getcwd()函数获取当前工作目录的位置。然后像这样打开文件。

open(os.getcwd()+'/data.csv')

您不应使用普通 open('data.csv'),而应使用如下代码片段:

import os
import sys

if getattr(sys, 'frozen', False):
    base_dir = sys._MEIPASS
else:
    base_dir = os.path.abspath(os.path.dirname(__file__))


file = open(os.path.join(base_dir, 'data.csv'))

然后,在构建时将数据文件包含在 --add-data=data.csv;. 中。当 Windows 上 不是 时,请使用冒号 (:) 而不是分号 (;)。如果您使用 Windows 并使用 PowerShell,则使用反引号 (`) 转义分号。