pyinstaller 如何 从打包资源中导入自己封装的py文件 if getattr(sys, 'frozen', False):
时间: 2023-12-20 13:04:41 浏览: 149
利用pyinstaller将py文件打包为exe的方法
在 PyInstaller 打包后的程序中,所有的 Python 模块都被打包成一个单独的二进制文件,所以不能像在开发时那样直接通过 `import` 语句导入自己封装的 py 文件。需要使用 PyInstaller 提供的特殊函数 `MEIPASS` 来获取打包后的资源路径,然后使用 `execfile` 函数来执行 py 文件。
具体实现步骤如下:
1. 在打包前,将需要导入的 py 文件放到一个指定的文件夹下,例如 `my_module` 文件夹。
2. 将这个文件夹添加到 PyInstaller 的打包资源中,在命令行中使用 `-p` 参数指定,例如:`pyinstaller -p my_module my_program.py`。
3. 在程序中使用 `MEIPASS` 函数获取打包后的资源路径,然后使用 `execfile` 函数执行 py 文件。
以下是示例代码:
```python
import sys
import os
if getattr(sys, 'frozen', False):
# 打包后的程序中
resource_path = sys._MEIPASS # 获取打包后的资源路径
my_module_path = os.path.join(resource_path, 'my_module')
else:
# 开发时的程序中
my_module_path = 'my_module'
# 加载需要导入的 py 文件
my_module_file = os.path.join(my_module_path, 'my_module.py')
with open(my_module_file, 'r') as f:
code = f.read()
# 执行 py 文件
exec(code)
# 可以直接调用 my_module 中的函数
my_module.my_function()
```
注意,此方法只适用于导入单个 py 文件。如果需要导入多个 py 文件,可以将它们打包成一个 zip 文件,然后使用 `zipimporter` 模块导入。
阅读全文