chengzhi61 发表于 2023-10-19 19:07:24

Mac上pyinstaller打包问题

本人用python的pandas读取excel,路径写成这个样子path = './待清洗.xlsx'
df = pd.read_excel(path, sheet_name=0)

本意是想读取程序所在的文件夹内的excel表格
我通过pycharm可以运行,在win上通过pyinstaller打包好也可以运行,但在Mac上通过pyinstaller打包之后就提示以下内容:
Traceback (most recent call last):
File "我的程序.py", line 15, in <module>
File "pandas/io/excel/_base.py", line 504, in read_excel
File "pandas/io/excel/_base.py", line 1563, in __init__
File "pandas/io/excel/_base.py", line 1419, in inspect_excel_format
File "pandas/io/common.py", line 872, in get_handle
FileNotFoundError: No such file or directory: './待清洗.xlsx'
Failed to execute script '我的程序' due to unhandled exception!

新手求问是什么问题,我该如何解决,谢谢各位

isdkz 发表于 2023-10-19 19:07:52

这个问题是由于在Mac上使用pyinstaller打包后,程序无法找到指定的Excel文件而导致的错误。这是因为pyinstaller在打包时无法正确处理相对路径的问题。

为了解决这个问题,你可以使用 sys 模块来获取程序所在的文件夹路径,并将路径与Excel文件名拼接起来,以确保程序可以正确找到Excel文件。

下面是修改后的代码示例:

import sys
import pandas as pd

# 获取程序所在文件夹的路径
path = sys.path + '/待清洗.xlsx'
df = pd.read_excel(path, sheet_name=0)


通过使用 sys.path ,我们可以获取到程序所在文件夹的路径,然后将其与Excel文件名拼接起来,确保程序可以正确找到Excel文件。

希望这个解决方案能够帮助到你!如果还有其他问题,请随时提问。

Mike_python小 发表于 2023-10-19 19:08:47

问题分析:

根据你的描述,你在Mac上使用pyinstaller打包了一个程序,该程序使用pandas读取Excel文件。在打包后的程序中,你遇到了文件路径的问题。通过pycharm运行和在Windows上使用pyinstaller打包后的程序可以正常运行,但在Mac上运行打包后的程序时出现了文件找不到的错误。

回答:

这个问题可能是由于文件路径的不一致导致的。在不同的操作系统中,文件路径的表示方法可能有所不同。

对于解决此问题,有以下几种方法:

1. 使用绝对路径:可以尝试使用文件的绝对路径来确保程序能够找到文件。你可以通过打开终端,在终端中将文件拖到终端窗口中,即可获取文件的绝对路径。然后将程序中的路径写为绝对路径,例如path = '/Users/your_username/待清洗.xlsx',将 your_username 替换为你自己的用户名。

2. 使用相对路径:如果你希望程序能够读取程序所在文件夹内的Excel表格,可以使用相对路径。相对路径是相对于可执行程序所在的文件夹来指定文件路径。可以尝试修改路径为相对路径,例如path = './待清洗.xlsx'。

3. 检查文件是否被正确打包:确保 Excel 文件在打包过程中被正确地包含在可执行文件中。你可以检查打包后的程序的目录结构,确认 Excel 文件是否被正确地复制到可执行文件所在的目录。

请尝试上述方法之一,看是否能够解决问题。希望能帮到你!如有其他问题,请随时追问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

chengzhi61 发表于 2023-10-19 19:26:59

isdkz 发表于 2023-10-19 19:07
这个问题是由于在Mac上使用pyinstaller打包后,程序无法找到指定的Excel文件而导致的错误。这是因为pyinsta ...

您好,我理解了sys.path,从原理上来说我也觉得这个方法可行,但我尝试之后,还是报错,可否再帮帮忙
Traceback (most recent call last):
File "我的程序.py", line 16, in <module>
File "pandas/io/excel/_base.py", line 504, in read_excel
File "pandas/io/excel/_base.py", line 1563, in __init__
File "pandas/io/excel/_base.py", line 1419, in inspect_excel_format
File "pandas/io/common.py", line 872, in get_handle
NotADirectoryError: Not a directory: '/var/folders/7q/_mf3hd1d02ndckrwpmmc5zbr0000gn/T/_MEI4WhtHn/base_library.zip/待清洗.xlsx'
Failed to execute script '我的程序' due to unhandled exception!

chengzhi61 发表于 2023-10-19 19:28:18

Mike_python小 发表于 2023-10-19 19:08
问题分析:

根据你的描述,你在Mac上使用pyinstaller打包了一个程序,该程序使用pandas读取Excel文件。在 ...

您好,我的代码里确实是使用您说的2中的方法,写的相对路径,但就是打包之后,看起来这个相对路径不能被识别

chengzhi61 发表于 2023-10-19 19:47:15

isdkz 发表于 2023-10-19 19:07
这个问题是由于在Mac上使用pyinstaller打包后,程序无法找到指定的Excel文件而导致的错误。这是因为pyinsta ...

我在pycharm中,sys.path还可以返回正常的路径,但是打包后,这个语句返回的路径看起来就像乱码一样,这应该是引起报错的原因,但是我不明白为什么,请问这个该怎么修改呢

isdkz 发表于 2023-10-19 20:17:32

chengzhi61 发表于 2023-10-19 19:47
我在pycharm中,sys.path还可以返回正常的路径,但是打包后,这个语句返回的路径看起来就像乱码一样, ...

换成下面的代码看看:
import os
path = os.path.join(os.path.dirname(__file__), '待清洗.xlsx')
df = pd.read_excel(path, sheet_name=0)

chengzhi61 发表于 2023-10-19 20:47:17

isdkz 发表于 2023-10-19 20:17
换成下面的代码看看:

啊谢谢,我自己找到答案了,这个方法需要先识别运行的是脚本,还是打包好的app,然后用sys.excutable就可以返回出来正确的路径import os
import sys


# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
    path = os.path.dirname(sys.executable)
elif __file__:
    path = os.path.dirname(__file__)
页: [1]
查看完整版本: Mac上pyinstaller打包问题