使用带有--py文件的.zip文件(使用zipfile包在python中创建)导入模块时出现问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

使用带有--py文件的.zip文件(使用zipfile包在python中创建)导入模块时出现问题

2019-04-22 15:52:46 3642 1

我试图将我的应用程序存档在我的测试文件中以激发EMR集群上的提交,如下所示:

模块的文件夹结构:

app
--- module1
------ test.py
------ test2.py
--- module2
------ file1.py
------ file2.py
我正在通过测试调用Zip函数

import zipfile
import os

def zip_deps():

# make zip

module1_path = '../module1'
module2_path = '../module2'
try:
    with zipfile.ZipFile('deps.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
        info = zipfile.ZipInfo(module1_path +'/')
        zipf.writestr(info, '')
        for root, dirs, files in os.walk(module1_path):
            for d in dirs:
                info = zipfile.ZipInfo(os.path.join(root, d)+'/')
                zipf.writestr(info, '')
            for file in files:
                zipf.write(os.path.join(root, file),os.path.relpath(os.path.join(root, file)))

        info = zipfile.ZipInfo(module2_path +'/')
        zipf.writestr(info, '')
        for root, dirs, files in os.walk(module2_path):
            for d in dirs:
                info = zipfile.ZipInfo(os.path.join(root, d)+'/')
                zipf.writestr(info, '')
            for file in files:
                zipf.write(os.path.join(root, file),os.path.relpath(os.path.join(root, file)))
except:
    print('Unexpected error occurred while creating file deps.zip')
zipf.close()

deps.zip是正确创建的,据我所知,它会压缩我想要的所有文件,每个模块文件夹都在zip的基础级别。事实上,使用:创建的确切拉链 zip -r deps.zip module1 module2 是相同的结构,当我提交它时,这是有效的

spark-submit --py-files deps.zip driver.py
EMR出错:

Traceback (most recent call last):
File "driver.py", line 6, in

from module1.test import test_function

ModuleNotFoundError: No module named 'module1'
FWIW我也尝试使用以下命令使用子进程进行压缩,并且在EMR中我在spark中得到了相同的错误

os.system("zip -r9 deps.zip ../module1")
os.system("zip -r9 deps.zip ../module2")

取消 提交回答
全部回答(1)
  • 小六码奴
    2019-07-17 23:33:58

    Zipfile使用相对目录保存完整文件名,例如:

    ../module1/test.py
    spark除了顶层的文件夹外没有相对路径,如:

    module1/test.py
    我只需要改变我的写作就像这样:

    with zipfile.ZipFile('deps.zip','w') as zipf:

        for file in file_paths:
            zipf.write(file,os.path.relpath(file,'..'))

    如果您提取原始zip文件,您将永远不会看到../前面的名称。

    0 0
相关问答

5

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 129573浏览量 回答数 5

10

回答

【精品问答合集】Hbase热门问答

hbase小能手 2019-05-29 14:37:26 123158浏览量 回答数 10

37

回答

SaaS模式云数据仓库MaxCompute 百问百答合集(持续更新20220424)

亢海鹏 2020-05-29 15:10:00 83423浏览量 回答数 37

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148561浏览量 回答数 22

41

回答

OSS FTP工具发布啦

oss-dev 2015-12-23 16:58:56 66880浏览量 回答数 41

5

回答

java.lang.UnsupportedOperationException: This is supposed to be overridden by subclasses.

迷茫君 2019-07-16 09:26:11 120406浏览量 回答数 5

43

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 142932浏览量 回答数 43

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 309432浏览量 回答数 251

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 483543浏览量 回答数 24

30

回答

基础语言百问-Python

薯条酱 2017-05-17 18:01:13 66181浏览量 回答数 30
+关注
8
文章
487
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载