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!
新手求问是什么问题,我该如何解决,谢谢各位 这个问题是由于在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文件。
希望这个解决方案能够帮助到你!如果还有其他问题,请随时提问。 问题分析:
根据你的描述,你在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:} 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!
Mike_python小 发表于 2023-10-19 19:08
问题分析:
根据你的描述,你在Mac上使用pyinstaller打包了一个程序,该程序使用pandas读取Excel文件。在 ...
您好,我的代码里确实是使用您说的2中的方法,写的相对路径,但就是打包之后,看起来这个相对路径不能被识别 isdkz 发表于 2023-10-19 19:07
这个问题是由于在Mac上使用pyinstaller打包后,程序无法找到指定的Excel文件而导致的错误。这是因为pyinsta ...
我在pycharm中,sys.path还可以返回正常的路径,但是打包后,这个语句返回的路径看起来就像乱码一样,这应该是引起报错的原因,但是我不明白为什么,请问这个该怎么修改呢 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) 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]