Teggi 发表于 2020-6-7 21:13:01

zipfile找不到目录

本帖最后由 Teggi 于 2020-6-7 21:27 编辑

def writeAllFileToZip(absDir,zipFile):
    for f in os.listdir(absDir):
      absFile=os.path.join(absDir,f)
      if os.path.isdir(absFile):
            relFile=absFile
            zipFile.write(relFile)
            writeAllFileToZip(absFile,zipFile)
      else:
            relFile=absFile
            zipFile.write(relFile)
    return

zipFilePath=os.path.join(sys.path,"result_b.zip") #把叫RA的文件夹打包为result_b.zip
zipFile=zipfile.ZipFile(zipFilePath,"w",zipfile.ZIP_STORED)
absDir=os.path.join(sys.path,"RA")
cwd = os.getcwd()
os.chdir(os.path.dirname(absDir))
writeAllFileToZip(absDir,zipFile)
os.chdir(cwd)
print("压缩成功")

在自己电脑上运行正常
但是每次打包成EXE,放到其他电脑上运行就会在zipFile=zipfile.ZipFile(zipFilePath,"w",zipfile.ZIP_STORED) 这一句报错:

File "zipfile.py", line 1251, in__init__
FileNotFoundError: No such file or directory: 'C:\\Users\\Chengyin\\AppData\\Local\\Temp\\_MEI191922\\base_library.zip\\result_b.zip'
请问有什么解决办法能让他在其他电脑上也能顺利运行{:10_266:}

txxcat 发表于 2020-6-7 21:13:02

这个要涉及到打包后的sys.path的值多少了,写了一段代码测试:
import os,sys
print(sys.path)
print(os.getcwd())
input('查看目录')
直接运行后结果很正常,都是当前工作目录:

然后打包后运行,结果:

很明显,sys.path指向了系统临时目录下的_MEI191802\base_library.zip

然后资源管理器看看,呃,是一个文件,不是目录,所以代码整合的路径在打包后运行时是错误的:

所以,建议用os.getcwd()来取代sys.path,再打包运行就不会报错了。

Twilight6 发表于 2020-6-7 21:16:22

在别的电脑上运行exe时候附带带上 result_a.zip 这个文件给别的电脑 放在同目录下试试

Teggi 发表于 2020-6-7 21:17:13

Twilight6 发表于 2020-6-7 21:16
传文件时候带上 result_a.zip 这个文件给别的电脑 放在同目录下试试

都带着,所有文件都是全的

Twilight6 发表于 2020-6-7 21:20:21

本帖最后由 Twilight6 于 2020-6-7 21:24 编辑

Teggi 发表于 2020-6-7 21:17
都带着,所有文件都是全的

把 zip 文件放在报错的这个绝对路径下 试试

C:\Users\Chengyin\AppData\Local\Temp\_MEI191922\base_library.zip

Teggi 发表于 2020-6-7 21:29:04

Twilight6 发表于 2020-6-7 21:20
把 zip 文件放在报错的这个绝对路径下 试试

但是这个zip是我打包的目标文件,我是要把一个叫RA的文件夹打包为result_b.zip文件,一开始是没有这个zip文件的

Twilight6 发表于 2020-6-7 21:30:45

Teggi 发表于 2020-6-7 21:29
但是这个zip是我打包的目标文件,我是要把一个叫RA的文件夹打包为result_b.zip文件,一开始是没有这个zip ...

可报错原因就是找不到你的result_a.zip文件

有谁懂 发表于 2020-6-7 21:31:03

个人感觉写代码的时候都用相对路径,打包成exe的时候,把所有依赖文件都放在exe目录下
这样exe在别人那里也可以使用
如果代码里面都是绝对路径,在别人电脑上可能会出问题吧
我也才学 不知道这么做好不好

Twilight6 发表于 2020-6-7 21:35:37

Teggi 发表于 2020-6-7 21:29
但是这个zip是我打包的目标文件,我是要把一个叫RA的文件夹打包为result_b.zip文件,一开始是没有这个zip ...

你检查下别人报错时候路径是不是报一样的?实在不行 按照哪个路径来创建文件夹如何在选择打包文件试试?

在你电脑正常说明找的到你电脑的文件 而放他人电脑不行说明他人电脑路径不对把,按照报错的路径试着模拟创建文件夹下试试

Teggi 发表于 2020-6-7 21:37:15

Twilight6 发表于 2020-6-7 21:35
你检查下别人报错时候路径是不是报一样的?实在不行 按照哪个路径来创建文件夹如何在选择打包文件试试 ...

那我试试

hrp 发表于 2020-6-7 21:41:17

跟踪检查一下os.getcwd()和sys.path吧,可以在代码中print出来,让其他电脑给你反馈一下print出来的路径是什么

Teggi 发表于 2020-6-7 22:48:36

txxcat 发表于 2020-6-7 22:46
这个要涉及到打包后的sys.path的值多少了,写了一段代码测试:

直接运行后结果很正常,都是当前工作 ...

{:9_228:}明白啦!感谢感谢{:9_221:}

dianshihaoli 发表于 2020-6-7 22:54:04

{:5_103:}
页: [1]
查看完整版本: zipfile找不到目录