用pyinstaller打包后运行报 no module named
项目如图,没有动态import,
pyinstaller是最新版本,打包
打包完成后运行报错
在使用 pyinstaller 打包 Python 程序时,确保你的程序中所有的模块都在打包范围之内。
如果你使用了自定义的模块,可以尝试使用 --hidden-import 选项来显式地指定模块的导入方式。例如,如果你的程序中使用了名为 my_module 的自定义模块,可以这样打包:
pyinstaller --hidden-import=my_module my_script.py
这个命令会在打包文件中隐式地包含 my_module 模块。
加上--hidden-import
pyinstaller -F XXX.py --hidden-import tools
基于new bing部分指引作答:
在您的问题中,您提到了使用PyInstaller进行打包后的运行报错,提示找不到模块。这可能是因为PyInstaller在打包过程中未正确处理依赖项导致的。
首先,请确保您的项目文件结构与您提供的图示相符,并且确保在项目中没有使用动态导入(import语句位于函数或条件语句内部)。如果确保了这些条件,可以尝试以下解决方案:
1、确认安装依赖项:在打包之前,确保您的开发环境中已正确安装了所有项目所需的依赖项。您可以使用pip命令来安装它们,例如:pip install tools。
2、使用--hidden-import参数手动指定模块:在使用PyInstaller进行打包时,可以使用--hidden-import参数手动指定需要导入的模块。根据您的错误消息,您可以尝试执行以下命令进行打包:pyinstaller --hidden-import=tools ui.py。这将确保在打包后正确导入tools模块。
3、调整导入语句:如果您的代码中存在类似于from tools import something的导入语句,请尝试将其修改为更具体的导入路径。例如,如果tools模块位于项目的子文件夹中,您可以改为from subfolder.tools import something。
4、检查编译选项:如果以上解决方案仍无效,您可以尝试检查您在使用PyInstaller时的编译选项。确保没有禁用或省略任何必需的模块或文件。
如果在使用pyinstaller打包后出现"no module named"错误,通常是由于需要手动指定模块的路径导致的。
您可以尝试将pyinstaller的命令中添加-u或--unhanded-imports参数来解决该问题。如下所示:
$ pyinstaller -u script.py
此外,还可以添加--path参数来指定需要的模块的路径,比如:
$ pyinstaller --path=/path/to/your/module script.py
这样就可以指定该路径下的模块运行时所需的依赖库。
如果以上方法无法解决问题,您可以尝试使用其他的打包工具如cx_Freeze或py2exe,来对您的Python程序进行打包,这些打包工具也许会更加适合您的需求。
做了一个基于CAN通信的上位机,用的是PyQT做的UI插件。pycharm上运行都是运行正常。
在利用Pyinstaller进行程序发布时还是出现了些小挫折。特记录下:
RecursionError: maximum recursion depth exceeded
这个按照网上的解决方案,即在pyinstaller生成的XXX.spec中添加
import sys
sys.setrecursionlimit(5000)
注意:再次执行pyinstaller命令时,使用xxx.spec,
而不是XXX.pypyinstaller --paths "C:\Users\matthew\Anaconda3\Lib\site-packages\PyQt5\Qt\bin";"E:\11_vepcoProject\11_python\Vepcontrol_UI\lib\windows\64bit" -F app_UUTterm.spec
pyqt库文件添加
同参照上面的命令: 需要添加绝对地址
但UI程序虽然可以打开,但是尝试连接CAN时,却出现闪退。反复调试故发现应该是dll没有找到。
添加CAN 驱动 dll。
添加CAN驱动dll,使用 --add-binary 同时dll使用绝对地址
pyinstaller --paths "C:\Users\matthew\Anaconda3\Lib\site-packages\PyQt5\Qt\bin" --add-binary="E:\11_vepcoProject\11_python\Vepcontrol_UI\lib\windows\64bit\Ginkgo_Driver.dll;." -Fw app_UUTter
m.spec
最后终于成功了。
[2]:PyInstaller各参数含义 https://blog.csdn.net/weixin_39000819/article/details/80942423
要在打包里指定一下命令
比如我得
pyinstaller --hidden-import common.models.fundOpenPriceYear2025 --hidden-import common.models.fundOpenPriceYear2024 --hidden-import common.models.fundOpenPriceYear2023 --hidden-import common.models.fundOpenPriceYear2022 --hidden-import common.models.fundOpenPriceYear2021 --hidden-import common.models.fundOpenPriceYear2020 --hidden-import common.models.fundOpenPriceYear2019 --hidden-import common.models.fundOpenPriceYear2018 --hidden-import common.models.fundOpenPriceYear2017 --hidden-import common.models.fundOpenPriceYear2016 --hidden-import common.models.fundOpenPriceYear2015 --hidden-import common.models.fundOpenPriceYear2014 --hidden-import common.models.fundOpenPriceYear2013 manager.py
1.检查一下包安装的路径
2.查看一下包的查找路径
3.随便测试一下
如果你使用 PyInstaller 对代码进行打包,但在运行时出现"no module named"错误,可能是由于 PyInstaller 无法正确识别和包含项目的依赖项所致。
注意:对于一些特殊的模块或依赖项,PyInstaller 可能无法自动识别和包含。在这种情况下,你可能需要进一步研究并尝试其他解决方案,例如手动导入或修改代码以避免依赖项问题
把每个依赖文件中的 from xxx.xx import xxx改为绝对路径即可。首先在依赖文件中新增下面3行代码
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(file)))
原先为from xx目录下.xxpy文件名 import xx类名,有了上面3行代码直接改为 import xx类名即可
打包时没有将该模块打包进去,可以尝试在打包命令中添加--hidden-import参数来手动指定需要打包的模块。例如:
pyinstaller --onefile --hidden-import=module_name your_script.py
其中,module_name为需要打包的模块名,your_script.py为你的脚本文件名。
没打包完全,所以找不到