当前位置:   article > 正文

Python-pyinstaller:No such file or directory 解决方案_no such file or directory 路径里多了个tmp

no such file or directory 路径里多了个tmp

在使用pyinstaller打包过程中,打包后的文件在本机可以正常执行,但是发给朋友后,会报No such file or directory的错误,耗费多时才解决,总结一下该问题的解决方案。

对我来说,感觉这是一个重点难点,通过多次调试,成功解决。

注意点:

1)pyinstaller会把main.py执行的时候能引用到的所有py文件(不包括其它任何文件)都会按照当前代码目录的组织方式打包到main.exe里面

2)pyinstaller不会打包除了.py文件之外的其他任何文件,如.yaml、.csv、readme、xlsx、jpg等等其它文件

3)如果要打包除了.py之外的其它文件,需要我们打包的时候加上--add-data把它们添加进去

4)使用了pyinstaller成功打包后,不再受限于本机环境。因为pyinstaller已经把依赖的python环境,依赖的第三方包,还有代码里面涉及到的资源都拷贝进到main.exe里面,也做了地址替换。

需要打包除.py之外的文件需要使用如下命令

        pyinstaller -Fmain.py \

        --add-data=${PARENT_DIR}/data/*.csv: data \

        --add-data=${PARENT_DIR}/config/*.yaml:config l--add-data=${PARENT_DIR}/ readme : .

冒号和分号的使用

Linux系统使用冒号,Windows系统使用分号

最后的点是根目录

说明

S{PARENT_DIR}表示项目目录,或者直接替换成具体路径就行。比如--add-data=~/project/data/*.csv:data \。~/project代表你的项目目录。

--add-data可以写多个,“\”表示换行,防止命令放在一行过长

--add-data里面冒号之前的路径用绝对路径(该路径是目前你想拷贝进exe里面的这些文件当前是放在你机器上的具体那个目录);且可以使用通配符“*",方便你一次拷贝多个文件,当然也可以具体到文件。冒号之后用的是相对路径(相对的是生成exe之后,执行的时候发现老是提示在/tmp/xxxx下面No such file or directory,相对的就是这个/tmp/xxxx/,而且这个xxxx可能每次都不一样,它就是一个exe运行时候的临时目录)。

首先要理解--add-data=$(PARENT_DIRy/data/*.csv:data这句话的意思,它指的是把项目路径下的/data里面的所有csv文件拷贝到/tmp/xxxx/data目录里面,但是/tmp/xxxx不用你写。

在运行pyinstaller时候写的这个--add-data的作用跟你直接pyinstaller -F main.py啥都不加,往最后编译完生成的main.spec文件里面的,Analysis->data数组添加(源地址,目的地址)这种元组对的作用是一样的。不过我感觉还是直接用--add-data比较方便。

如果使用了以上代码,还报错,则可以考虑代码中的路径是否正确

代码中不能用相对路径

要使用绝对路径

示例

命令如下:

pyinstaller --add-data=F:/a-wp/wp/TestCase/test/*.jpg;. -i love.ico -F test.py -n love

代码里的地址

image

 可以看到被注释掉的代码是错误的,后面改了新的写法

image

 

以上知识参考原文链接:pyinstaller 打包单文件终极解决方案( No such file or directory)_pyinstaller no such file or directory_tongle.Wang的博客-CSDN博客       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/590992
推荐阅读
相关标签
  

闽ICP备14008679号