py3.6使用pyinstaller打包执行时报错FileNotFoundError:No such file or directory

参考链接:
1、https://blog.csdn.net/pipisorry/article/details/50620495
2、https://pythonhosted.org/PyInstaller/spec-files.html#adding-data-files

在py3.6使用pyinstaller打包时很顺利,但是在执行exe文件时报错:

FileNotFoundError: [Errno 2] No such file or directory: 'logging.json'
[5648] Failed to execute script agent

因为出错的这个文件恰恰不是py文件,也不是其他,而是配置文件,一开始并没有想到这是数据文件,但我觉得肯定是因为这个文件类型不同的原因。

解决办法有两个:
1、最简单的就是将跟.json相关的文件放到dist目录下(生成的exe在dist目录下,并且要使用exe时,要挪动一整个dist目录),执行就OK了。

2、打开.spec文件,里面 有一个

a = Analysis(['your_py.py'],
             pathex=['your_py_path'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

其中第四行有一个datas的列表,只需要把相对文件名添加进去即可。

数据文件列表是元组列表。每个元组都有两个值,两个值都必须是字符串:

第一个字符串指定现在在此系统中的文件。
第二个指定在运行时包含文件的文件夹的名称。即运行时要读取的数据文件的真实目录(没打包前的目录,可以是spec文件的相对目录,也可以是绝对路径)

如:

datas = [('a/dist/logging.json', ‘dist/logging.json’)]

这一步和py2exe的有点类似,py2exe生成exe需要单独写一个setup.py,其中有一个setup里有个data_files,也是指定数据文件用的。

setup(
    name='agent',
    console=['agent.py'],
    data_files=[('', ['settings.json', 'logging.json'])]
    )

在这个过程中发现,在某种程度上,确实不影响使用,但是如果你想要设置为开机自启动或自定义安装目录时失败的话,可能是由于你代码里的该路径在打包后被写死 。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用pyinstaller将Python代码打包成可执行文件,有会出现找不到文件或目录的错误。这通常是由于pyinstaller没有正确打包所需的文件或目录导致的。解决此问题的方法如下: 1.确保你的代码中使用的所有文件和目录都包含在打包列表中。可以使用以下命令将文件或目录添加到打包列表中: ```python a = Analysis(['your_script.py'], pathex=['/path/to/your/script'], binaries=[], datas=[('/path/to/your/file', '.')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) ``` 其中,`datas`参数用于将文件或目录添加到打包列表中。例如,如果你的代码需要使用`/path/to/your/file`文件,则可以将其添加到打包列表中。 2.如果你的代码使用了第三方库,则需要确保该库已正确安装并包含在打包列表中。可以使用以下命令将第三方库添加到打包列表中: ```python hiddenimports=['your_package'] ``` 其中,`hiddenimports`参数用于将第三方库添加到打包列表中。例如,如果你的代码使用了`your_package`库,则可以将其添加到打包列表中。 3.如果你的代码使用了相对路径,则需要确保相对路径是正确的。可以使用以下命令将相对路径添加到打包列表中: ```python a = Analysis(['your_script.py'], pathex=['/path/to/your/script'], binaries=[], datas=[('relative/path/to/your/file', '.')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) ``` 其中,`datas`参数用于将相对路径添加到打包列表中。例如,如果你的代码需要使用`relative/path/to/your/file`文件,则可以将其添加到打包列表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值