读取文件的python代码打包成镜像运行

本文档详细介绍了如何在Ubuntu环境中使用Docker构建Python应用镜像,创建容器,并通过容器进行文件传输及执行Python脚本。具体步骤包括编写Dockerfile,制作镜像,启动容器,传输本地文件到容器内,最后在容器中运行Python脚本并展示运行结果。

环境:Ubuntu16.04

新建文件夹dockertest2,在里面新建pythontest.py Dockerfile文件

pythontest.py

import os

def main():

    with open(r'VID.txt', encoding="utf-8") as file:
        # file 文件类型的对象
        print(type(file))
        print(file)

        # 读文本的全文并打印出来
        print(file.read())

        # 这个时候再读的话,返回EOF
        print(file.read())


if __name__ == '__main__':
    main()

Dockerfile

# 基于的基础镜像
FROM python:3.6
# # 代码添加到code文件夹
COPY pythontest.py /code/
# # 设置code文件夹是工作目录
WORKDIR /code
CMD ["python3", "pythontest.py"]

在dockertest2目录下制作镜像

sudo docker build -t pythontest .

制作成功

创建容器pythontest_new,里面包含镜像

sudo docker run --name pythontest_new -d -it pythontest /bin/bash

传输文件到容器

新建文件VID.txt,内容随意
另开终端,将文件传输入容器
sudo docker cp /home/test/文档/dockertest/VID.txt fe2e562c1a23:/code

docker cp 本地文件路径 容器ID:/code

进去容器查看传入结果

sudo docker exec -it fe2e562c1a23 /bin/bash
root@fe2e562c1a23:/code# ls
VID.txt  pythontest.py

退出容器

root@fe2e562c1a23:/code# exit
exit

进入容器,运行程序

sudo docker exec -it pythontest_new python3 pythontest.py

结果

<think>我们参考用户的问题和提供的引用资料,用户希望将多个Python文件打包可执行的exe文件。 根据引用资料,我们可以使用PyInstaller工具来实现。以下是步骤: 1. 安装PyInstaller:可以使用清华镜像快速安装。 2. 创建spec文件:使用`pyi-makespec`命令来生spec文件,指定入口文件和参数(如`--onefile`表示打包一个exe文件,`--windowed`表示窗口程序,不显示控制台)。 3. 修改spec文件(如果需要):如果有多个py文件或者数据文件,可以在spec文件中添加。 4. 使用PyInstaller根据spec文件进行打包。 注意:根据引用[2],在conda环境下打包可能会包含很多不必要的库,导致打包文件过大,建议使用纯净的python环境。 具体步骤: 步骤1:安装PyInstaller ```cmd pip install Pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 步骤2:生spec文件 假设我们有两个py文件:main.py(主入口)和module.py(依赖模块),我们可以使用以下命令: ```cmd pyi-makespec --onefile --windowed --name=myapp main.py module.py ``` 这里`--name`指定生的exe名称,`--onefile`表示打包一个exe,`--windowed`表示窗口程序(如果是命令行程序则不需要这个参数)。注意,如果还有其他py文件,可以继续在后面添加。 步骤3:如果需要添加数据文件(如图片、配置文件等),可以编辑生的spec文件。在`Analysis`部分,可以添加`datas`参数。例如: ```python a = Analysis(['main.py', 'module.py'], pathex=[], binaries=[], datas=[('images/*.png', 'images')], # 将当前目录下的images文件夹中的所有png文件打包到exe内的images文件夹中 hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) ``` 步骤4:使用spec文件进行打包 ```cmd pyinstaller myapp.spec ``` 打包后,exe文件会出现在`dist`文件夹中。 注意:如果打包单个文件(--onefile),则运行时会将所有文件解压到临时目录,然后执行。如果程序需要读取资源文件,则需要注意路径问题。 另外,引用[3]和[4]也提到了类似的方法。 为了避免在conda环境下打包过大,建议使用纯净的Python环境(如从python.org下载的官方Python解释器)创建一个虚拟环境。 下面我们给出一个具体的例子: 假设我们有三个文件: - main.py:主程序 - utils.py:工具函数 - data/config.ini:配置文件 我们想要打包一个exe文件且包含配置文件。 步骤: 1. 创建spec文件: ```cmd pyi-makespec --onefile --name=myapp main.py utils.py --add-data "data/config.ini;data" ``` 注意:`--add-data`的格式为`源路径;目标路径`(Windows下用分号分隔,Linux/macOS下用冒号)。这里表示将当前目录下的data/config.ini文件打包到exe内部的数据目录的data文件夹下(在运行时,该文件会被解压到临时目录的data文件夹中)。 2. 或者,如果文件较多,也可以直接生spec文件后手动修改。使用上述命令后,会生myapp.spec文件,然后我们可以手动修改datas部分。 3. 然后执行: ```cmd pyinstaller myapp.spec ``` 在代码中访问配置文件时,需要考虑到程序被打包后资源文件的路径问题。可以使用以下方法获取正确的路径: ```python import sys import os # 判断是否是打包环境 if getattr(sys, 'frozen', False): # 如果是打包后的exe,则使用临时目录的路径 base_path = sys._MEIPASS else: base_path = os.path.abspath(".") # 配置文件的路径 config_path = os.path.join(base_path, "data", "config.ini") ``` 注意:在打包时,通过`--add-data`指定的文件会被复制到临时目录的相应路径下,而`sys._MEIPASS`就是临时目录的路径。 最后,生的问题可以围绕打包过程中可能遇到的问题,如路径问题、打包文件过大、如何添加资源文件等。 下面我们按照要求生相关问题。</think>### 如何将多个Python文件打包EXE文件 使用PyInstaller工具可将多个Python文件打包单个EXE文件,以下是详细步骤: #### 1. 安装PyInstaller ```cmd pip install Pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 2. 创建spec配置文件 ```cmd pyi-makespec --onefile --name=myapp main.py module1.py module2.py ``` - `--onefile`:生单个EXE文件 - `--name`:指定输出文件名 - 末尾列出所有需要打包的.py文件(主文件在前) #### 3. 修改spec文件(可选) 若需添加数据文件(如图片/配置文件),在`Analysis`部分添加: ```python a = Analysis( ... datas=[('assets/*.png', 'assets')], # 添加资源文件 ... ) ``` #### 4. 执行打包命令 ```cmd pyinstaller myapp.spec ``` 生的EXE位于`dist/`目录 #### 5. 路径问题处理(代码中需添加) ```python import sys import os if getattr(sys, 'frozen', False): base_path = sys._MEIPASS # 打包后临时解压路径 else: base_path = os.path.dirname(__file__) config_path = os.path.join(base_path, 'config.ini') ``` > **重要提示**:建议使用纯净Python环境打包,避免conda环境导致文件过大[^2]。230MB+的包在纯净环境通常可压缩到20-50MB。 ### 常见问题解决 1. **文件过大**: - 使用`--exclude-module`排除无用库 - 添加虚拟环境:`python -m venv clean_env` 2. **资源文件丢失**: - 确保spec文件中正确配置`datas` - 代码中使用`sys._MEIPASS`获取路径 3. **杀毒软件误报**: - 添加数字签名 - 使用`--uac-admin`申请管理员权限 > 通过spec文件可保存配置,后续修改代码后只需重新运行`pyinstaller myapp.spec`即可更新[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值