Python脚本代码运行正常,但是使用pyinstaller打包成执行文件后运行提示缺少模块?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python脚本代码运行正常,但是使用pyinstaller打包成执行文件后运行提示缺少模块?相关的知识,希望对你有一定的参考价值。

下面是执行程序运行时提示的报错:
Traceback (most recent call last):
File"条开形码贴纸生成-py”,1ine3,in<module>
File "PyInstaller\loader\pyimod03_importers.py",line 531,in exec_nodule
File "reportlab\graphics\barcode\_init__.py",line 76,in (module>
File "reportlab\graphics\barcode\_init_.py",line 42,in reset
File "PyInstaller\loader\pyimod03_importers.py",line 531.in exec_nodule
File "reportlabgraphics\barcode\widgets.py",line 166,in <module>
File "reportlab\graphics\barcode\widgets.py",line 95,in BCW
File "<string>",line 1,in <module>
ModuleNotFoundError:No module naned 'reportlab.graphics.barcode.code128'
[1156]Fai1 ed to execute script条形码贴纸生成

我自己发现问题是因为下面这句代码:
from reportlab.graphics.barcode import code128
可是直接调试代码是可以正常运行的,也确实能生成我需要的条码。

然后我直接把的.py文件放到code128.py目录,修改代码:
import code128.py
执行脚本也是可以正常运行,但是使用pyinstaller打包确打包失败,提示(太多提示了,就贴上最后一个):
AttributeError: 'tuple' object has no attribute 'rpartition'
然后我找了所有代码,都没有出现.rpartition,救命- -!

参考技术A 个人建议在 windows10 环境下安装 python3.8 打包
每次打包之前先使用 pip install -U pyinstaller 升级 pyinstaller

使用已安装的 Python 包但不在源代码中时导入工作

【中文标题】使用已安装的 Python 包但不在源代码中时导入工作【英文标题】:Imports work when using installed Python package but not in source code 【发布时间】:2022-01-02 08:36:36 【问题描述】:

我正试图解决这个 ImportError 问题。我创建了一个 Python 脚本,将其打包并上传到 PyPi。当我导入该包并运行它时,一切正常。但是,当我尝试运行我的 Python 脚本的源代码时,我收到了这个错误:ImportError: attempted relative import with no known parent package

proj
|---src
|    |---package_name
|    |    |---__init__.py
|    |    |---car.py
|    |    |---func.py

在 class.py 中,我从 func.py 导入函数,如下所示:from .func import *。当我尝试运行python3 class.py 时,这会导致错误。我无法理解的是,为什么当我从 Pypi 安装包、将其导入另一个 Python 文件并在那里使用该类时,这不会导致任何问题。

【问题讨论】:

尝试使用这个:from func import * 我遇到了同样的 ModuleError。你认为这可能是因为我只将包上传到 test.pypi 而不是 pypi 吗?我在某处读到模块导入的处理方式不同,具体取决于它们是否在 pypi 上,但我不知道它如何与同一包中的不同模块一起工作。 【参考方案1】:

好吧,python 不会说谎,没有已知的父包 - 你必须告诉 python 你试图运行的脚本是包的一部分。尝试cdpackage_name 目录的 然后发出:

python3 -m package_name.car # note no py and the -m 'module' switch

除此之外:您是否命名了您的模块类?这可能会导致令人讨厌的意外 - 从不将 python 保留关键字用于模块/包/变量名称(编辑:在当前 OP 中已更正)

【讨论】:

哦,这是我使用的一个坏例子。我没有把它命名为类,我只是改变了我的例子。我的文件都在一个包中,我成功地上传了它。我尝试了您在我的 package_name 目录中发布的命令,我得到: ImportError:尝试使用没有已知父包的相对导入。我读到如果我只是将它作为脚本运行,我并没有真正将它用作一个包。您发布的命令是告诉 python 我正在尝试运行属于包的一部分的脚本吗? 另外,如果其中一个类与包名同名会有问题吗? 您发布的命令是告诉 python 我正在尝试运行作为包的一部分的脚本吗? -> 是的 糟糕,我的意思是 cd 到父包的 parent - 请参阅编辑@FromTheEast 另外,如果其中一个类与包名同名,会有问题吗? –> 不,但可能不是很好的风格 - 不像 java python 模块不是一对一的公共类

以上是关于Python脚本代码运行正常,但是使用pyinstaller打包成执行文件后运行提示缺少模块?的主要内容,如果未能解决你的问题,请参考以下文章

将 python 脚本作为命令行变量运行

Python 脚本在定期运行时工作正常,但在使用 PyInstaller 编译时不能正常运行

pyinstaller问题和问题

从 AJAX 或 JQuery 运行 Python 脚本

在 python 脚本中使用 ssh 代理

azkaban怎么在job里面直接调用python脚本啊,我调用shell脚本正常运行,调用python脚本没有运行