繁体   English   中英

python pyinstaller 创建单个文件导入目录

[英]python pyinstaller create single file import directory

我已经使用 pyinstaller 使用单个 .py 文件为 Windows 创建单个 .exe 并且它工作正常。 现在我变得更复杂了,并创建了多个 .py 文件存储在我的 main.py 下的文件夹中。 我已经通读了 pyinstaller 指南,但似乎对我来说不起作用。

我在windows中的文件夹结构如下,我只是用一个简单的例子来说明:

app_root\main.py
app_root\__init__.py
        \library\__init__.py
        \library\app_ext1.py
        \library\app_ext2.py
        \library\test\__init__.py
        \library\test\app3.py

在 main.py 我从导入代码

from library.app_ext1 import get_info
from library.app_ext2 import get_data
from library.test.app3 import get_test

所以我使用我的 .spec 文件运行 pyinstaller 到我的 main.py。 在 .spec 文件中我有

hiddenimports=['library']

pyinstaller 没有完成任何错误并创建我的单个 .exe,但是当我运行我的单个 .exe 时,我收到以下错误

C:\Users\user1\Desktop\1_file\dist>main.exe
Traceback (most recent call last):
  File "app_root\main.py", line 2, in <module>
ImportError: No module named 'library'
Failed to execute script main

我只使用一个 .py 文件编写了一个测试脚本,它正在使用 openpyxl(一个 python excel 库)做一些简单的工作,所以在我的测试 .py 文件中我有“导入 openpyxl”,所以在我的规范文件中我使用

hiddenimports=['openpyxl']

效果很好,但 openpyxl 是使用 pip 安装的 python lib,我想我没有完全理解如何导入我自己创建并存储在我的主 .py 脚本文件下的文件夹结构中的模块/脚本我在我的 .py 脚本文件之间进行引用,如我上面的例子。

如何让 pyinstaller 识别我正在导入的 .py 脚本?

好的,不知道为什么,但我刚刚在 Windows 中创建了一个新文件夹,使用与以前相同的文件夹结构复制了我所有的 .py 文件,然后它就可以工作了。 唯一缺少的是所有 Pycharm 文件夹,如 .git、.idea 和pycache

我确实在故障排除中注意到,如果我将库重命名为“test”之类的其他内容并更新我的导入行,当我执行构建的 .exe 时,它​​仍然会引用模块“library”。

我知道我做的所有这些都是正确的,但似乎 py 魅力放在那里的其他文件夹之一中可能有一些东西。

所以我每次都将我的所有文件复制到新文件夹并删除我看到的任何文件夹/文件,而不是所需的 .py。

在我的情况下,我将from library.app_ext1 import get_info替换为from your_newly_created_folder_name.library.app_ext1并且它有效:D

我注意到必须使用新创建的文件夹名称更改app_root名称。 刚刚创建了一个新文件夹,复制所有 .py 文件并保留文件夹结构。 我希望你不会再像我一样在这上面浪费时间了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM