Python代码在Ubuntu和MacOS上表现不同
我正在开发一个flask应用程序,并使用pycharm在我的MacBook上进行大部分开发 最近,我将应用程序部署到远程服务器并运行了一些测试。远程服务器的Ubuntu 16.04运行的是python 3.6(在我的MacBook上也运行相同版本的python) 现在,每次我在远程服务器上测试某个功能时,服务器的磁盘空间就用完了。这是由我为压缩一些文件而实现的某个函数造成的 这是密码Python代码在Ubuntu和MacOS上表现不同,python,python-3.x,Python,Python 3.x,我正在开发一个flask应用程序,并使用pycharm在我的MacBook上进行大部分开发 最近,我将应用程序部署到远程服务器并运行了一些测试。远程服务器的Ubuntu 16.04运行的是python 3.6(在我的MacBook上也运行相同版本的python) 现在,每次我在远程服务器上测试某个功能时,服务器的磁盘空间就用完了。这是由我为压缩一些文件而实现的某个函数造成的 这是密码 local_dir = 'some_path/' new_zip_file = os.path.join(loc
local_dir = 'some_path/'
new_zip_file = os.path.join(local_dir, "{}.zip".format('some_name'))
for root, dirs, files in os.walk(local_dir):
with zipfile.ZipFile(new_zip_file, 'w') as new_zip:
for file in files:
new_zip.write(os.path.join(root, file))
在MacBook上,上述代码块按预期工作。它进入指定的文件夹,找到文件,然后将它们压缩到一个新文件中。zip文件是在找到zip文件内容的同一文件夹中创建的
在Ubuntu上,它进入递归,导致zip文件爆炸
现在我知道如何在ubuntu上解决这个问题,但我的问题是,为什么在两个不同的操作系统上行为会发生变化 哪一行递归<代码>用于文件中的文件:?如果您创建一个只包含最小的
os.walk
,它也会这样做吗?无论如何,这是错误的-如果local\u dir
包含任何子目录,其内容的.zip将覆盖目录本身中的.zip。至于递归问题,这可能是由于已经存在某个_name.zip,因此被包括在文件列表中-检查此问题,在这种情况下跳过.write()
。我找出了问题出在哪里。虽然我确实在ubuntu中升级了python以匹配我的开发环境,但虚拟环境是在我升级python之前创建的,因此它有python3.5.2的旧版本,而开发环境有python3.6.6。根据报告,zipfile模块有一些变化。我将Ubuntu中的虚拟环境迁移到python3.6.6,代码开始按预期运行。需要用大写字母书写,版本很重要。