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

时间:2017-05-11 01:43:29

标签: python pyinstaller

我使用pyinstaller使用单个.py文件为Windows创建单个.exe并且它工作正常。现在我变得有点复杂,并创建了多个存储在main.py下面的文件夹中的.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文件中我有“import openpyxl”,所以在我的spec文件中使用

hiddenimports=['openpyxl']

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

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

2 个答案:

答案 0 :(得分:0)

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

我在故障排除中注意到,如果我将库重命名为其他类似的东西,例如&#34; test&#34;并更新了我的导入行,它仍将引用模块&#34;库&#34;当我执行构建的.exe时。

我知道我正在正确地做这一切,但似乎在其他一个文件夹中有一些py charm放在那里。

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

答案 1 :(得分:0)

在我的情况下,我将from library.app_ext1 import get_info替换为from your_newly_created_folder_name.library.app_ext1并成功:D

我注意到app_root的名称必须更改为新创建的文件夹名称。刚创建了一个新文件夹,复制所有.py文件并保留文件夹结构。希望您再也不会有人像我一样浪费他的时间