【问题标题】:Pyinstaller Wildcard ImportPyinstaller 通配符导入
【发布时间】:2019-03-06 05:08:05
【问题描述】:

我有这段代码

from module1 import *

feature1() # from module1

我得到一个NameError 异常

NameError: global name 'feature1' is not defined

它在python main.py 中完美运行,但是当我使用pyinstaller 编译时,我的可执行文件会抛出NameError 异常。我将如何解决这个问题?

【问题讨论】:

    标签: python python-3.x pyinstaller


    【解决方案1】:
    1. 确保 module1 存在并已定义

    2. 确保 module1 中存在 feature1

    3. 确保 feature1 是一个函数,而不是其他任何东西(如类型或对象)

    4. 如果您使用虚拟环境,请确保该软件包已安装在那里并且

    4a。确保从虚拟环境运行脚本

    【讨论】:

    • 所有功能和模块都存在并正确输入。它也适用于virtualenv,但不适用于pyinstaller
    • @AidanH 你检查过这个话题*.com/questions/15114695/pyinstaller-import-error 吗?
    • 我已经检查过了,我可以导入module1,但我无法访问其中的功能。
    • @AidanH 你使用哪个版本的 Python?
    • @AidanH 我看到许多人在使用 Python 3.7 时遇到了困难,并且许多人发现使用 3.5 更成功。也许你会试试这个版本?
    【解决方案2】:

    你真的不应该使用import *,它让找出对象的来源变得更加困难——任何许多 linter 都无法正常工作。

    尝试做:

    from module1 import *
    dir()
    

    这将告诉您已导入和可以使用的内容。如果feature1 不存在,那么您有自己的解释 - 如果存在,您将面临更复杂的旅程。

    【讨论】:

    • feature1 确实在 Python 中显示,但我不相信它被导入到我的 pyinstaller 可执行文件中。
    【解决方案3】:

    使用 pyinstaller 编译脚本时,使用命令pyinstaller -p /Path/To/Your/Module1/Folder main.py

    这会将包含您的脚本的目录添加到 PATH 变量中,并将您的 module1.py 添加到已编译的 exe 中。

    【讨论】: