Docker构建镜像时用pyarmor混淆Python代码提示文件不存在如何解决
问题解决指导
错误原因梳理
- Dockerfile中每个
RUN指令为独立Shell会话,单独执行cd命令无法改变后续指令的工作目录,CMD执行时无法定位到混淆后的代码文件。 - 未明确指定工作目录的情况下,文件路径匹配存在不确定性,你将
hello-world.py拷贝到根目录/下,若执行pyarmor命令时的工作目录不是根目录,就会出现找不到文件的报错。 - 依赖文件名称拼写存在问题,Dockerfile中写的
requirments.txt不符合常规正确拼写requirements.txt,如果本地依赖文件是正确拼写,COPY和安装依赖步骤都会失效。 - pyarmor执行后生成的混淆代码存放在
dist目录下,你直接在CMD中执行python hello-world.py会找不到已被删除的源文件,无法定位到dist目录下的混淆后文件。
修正后的Dockerfile配置
FROM ubuntu:bionic ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y python3-pip python3-dev \ && cd /usr/local/bin \ && ln -s /usr/bin/python3 python \ && pip3 install --upgrade pip # 统一指定工作目录,避免路径混乱 WORKDIR /app COPY hello-world.py . # 注意和本地依赖文件名保持一致即可,若本地确实命名为requirments.txt可不用修改拼写 COPY requirements.txt . # 安装依赖,需确保requirements.txt中已添加pyarmor依赖 RUN pip install -r requirements.txt RUN pyarmor obfuscate hello-world.py RUN rm -rf hello-world.py # 直接指定工作目录到dist,CMD执行时自动在该目录下查找文件 WORKDIR /app/dist CMD ["python", "hello-world.py"]
内容的提问来源于stack exchange,提问作者ram ippala
相关产品推荐
相关产品推荐

