python文件闪退 ModuleNotFoundError:No module named ImportantError : DLL load failed: %1 不是有效的 Win32 应用程序

tech2025-02-02  15

python文件双击闪退

一般的解决办法是在这个程序的末尾加上input() 简单来说如果不能解决,要考虑电脑的环境是否有问题 你需要检查你的Windows目录下是否有py.exe这个文件,直接按Win键搜索也可以,这个文件是Python Lancher,程序应该 在(C:\Windows)下面 py.exe这个程序类似于记事本,他是默认打开python文件并且执行的程序,如果没有可能是安装的时候没有打上勾 for all users

确认py.exe已经存在,但是也闪退 这个需要确认一下你的电脑是否安装了多个python,因为这个py.exe文件只有一个,可能是不同的python版本造成,64位的程序不能运行在32位的程序,这个我的错误是 我本身安装的是python3.7 32bit的, 后来安装了64位python(vs上的默认是_x64),使得本身的32位的py.exe被vs的_x64位的覆盖了 python32位和64位有什么区别

结果是这样的 这里不是python版本的问题,我是重装的python版本和上一次的版本不同

应用场景: 比如我写了一个Qt的窗体程序,我想要把项目文件夹复制到其他地方,再双击py文件就可以直接运行它 ModuleNotFoundError: No module named ‘QtProgram’ 举例说明: 这是我的目录结构

其中所有的要运行代码放在了src里面,uiFile里面放的是ui文件那我想要直接运行单个程序时(在Windows10的资源管理器里面,为了保证代码的可读性,避免不了调用),可能会报错 特别是路径分开的各个文件夹之间的调用,其中src 和 uiFile 是项目其中的文件夹 像这个代码在idea或者pycharm里面运行是不会报错的,但是如果你把这个项目目录/文件夹复制到其他的地方,双击运行就会闪退 通过命令行/终端 运行发现 会收到如下这样的报错,并且我所有可能用的包里面都含有__init__.py文件

这里我通过研究发现,pycharm是在运行脚本之前做了一个处理,他将项目的目录添加到了环境变量中,所以运行该程序时会在控制台打印 通过尝试,我发现将项目的目录添加到path(python的环境变量)即可,所以为了方便,写了一个小方法add_path.py他的位置位于要运行的代码的同层目录,然后我再在要运行的程序的开头调用此方法,再使用 python xxx.py或者 py xxx.py就不会报错 该方法的代码(返回值为当前的文件(add_path.py)的绝对路径),后面又进行了修改,添加了flag作为标志位

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 3/9/2020 下午 6:20 """ import sys from add_path import root_path sys.path.append(root_path()) # 使用以上三个步骤将包的路径添加至环境变量 由于 root_path 该方法添加了flag, 所以直接调用即可 from add_path import root_path root_path(1) """ import os def root_path(flag=None): """配置临时Module环境变量/将module添加到sys.path""" p = os.path.abspath(__file__) if "\\" in p: p = p.replace('\\', '/') abs_path = p.replace('QtProgram/src/add_path.py', '') if flag: import sys sys.path.append(abs_path) return abs_path if __name__ == '__main__': print(root_path()) print(os.path.realpath(__file__))

调用方法,在你导入包之前调用即可,这里把上面两行注释取消掉,即可生效. 这里的QtProgramm是pyqt5这个文件夹下的一个pkg,根据需要将父级下的子集给替换掉 root_path一定要在你导入的包的前面 这样是为了方便学习,不用重复写同样的代码,(但是同时造成了不可避免的调用),同时可以随意运行 add_path.py应该在和要运行的文件的同层 单独执行add_path.py的运行结果

用法: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 3/9/2020 下午 4:22 from add_path import root_path root_path(1) if __name__ == '__main__': from QtProgram.src.QtConfig import * from QtProgram.uiFile.SignalsSlots import Ui_MainWindow application(Ui_MainWindow)

我的QtConfig.py文件

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 3/9/2020 下午 4:52 import sys from PyQt5.QtWidgets import QApplication, QMainWindow def application(_class): app = QApplication(sys.argv) win = QMainWindow() ui = _class() ui.setupUi(win) win.show() sys.exit(app.exec_())

尝试

from add_path import root_path # sys.path.append('C:\\Users\\abcabc\\Documents\\learningprocess\\python3\\lib\\pyqt5\\QtProgram\\') # 不可行 # 导入方式1 for i in [ # 'C:\\Users\\abcbac\\Documents\\learningprocess\\python3\\lib\\pyqt5', # 导入父级(最外层)绝对路径 ]: sys.path.append(i) # 2. 或者使用下面导入 root = root_path() sys.path.append(root)
最新回复(0)