网站搜索防止攻击,中国建筑设计咨询有限公司,太原的网站搭建公司,做网站兴趣爱好在网上找了很久都没弄明白#xff0c;最后还是自己思考解决了。
起因#xff1a;
用 Qt Designer 添加资源文件作为背景图#xff0c;编译
\resource\static\qrc pyuic5 -o .\xx.py .\xx.ui发现在 xx.py 文件末尾中多了一个语句#xff1a;
import rcc_rc然后运行就…在网上找了很久都没弄明白最后还是自己思考解决了。
起因
用 Qt Designer 添加资源文件作为背景图编译
\resource\static\qrc pyuic5 -o .\xx.py .\xx.ui发现在 xx.py 文件末尾中多了一个语句
import rcc_rc然后运行就报错了。 ModuleNotFoundError: No module named ‘rcc_rc‘ 首先目录结构先看一下项目根目录下 xx.py 和 rcc_rc 都在 qrc 目录下。明明就在同级目录中为何 import 会不行呢 原因解析
众所周知C语言源文件中经常用 include “xxx.h” 的语句用来包含导入 xxx.h 文件。默认会先从当前目录查找 xxx.h没有找到再去环境变量 Path 的路径下去查找。
但是当初就没想过为什么会默认从当前目录查找因为双引号是谁识别的双引号是编译器。识别我们代码的外部环境决定的。 如果它不识别双引号我们自然就得写成绝对路径。
同理。
import rcc_rc 之所以会报错也是因为外部环境不识别所以我们只能写成绝对路径:
import resource.qrc.rcc_rc但是这个文件是自动生成这么改只是治标不治本。
resource 之上就是项目的根目录。 也就说根目录是被识别的但是我的 qrc 目录却没有。
所以我只要让 qrc 也能够别“编译器”识别就行了。
解决办法
1.将 qrc 目录设置为 Sources Root代码根目录之一。 当然如果你愿意的话也可以将项目里的目录都同样设置一遍过去。所有的文件都不需要再写什么 from xxx import yyy 了直接 import yyy 。 但这样做并不好。如果两个文件夹里有同名文件就撞衫了。这可能也是pycharm 默认不把所有目录设置为根目录的原因吧。 2.选择项目的配置Edit configurations… 给 Add source roots to PYTHONPATH 打勾添加代码根目录到python环境变量。 这样以后你的 xx.ui生成的 xx.py 文件末尾依然是 import rcc_rc 但不再会报错了。
因为 rcc_qrc 所在的目录 qrc 已经被你设置为了 根目录。在 xx.py 中 import 的时候会自动在根目录包含 qrc 目录下查找 rcc_rc 这下肯定就可以找到了。
同理所有找不到模块的问题要么是路径不对大部分是要么是根目录不对。
如果 qrc 下有多层目录那么多设置几个目录就行只要让 import 时这个 正好在你设置的根目录下就没有找不到的道理。
影响
谨慎的朋友可能会想这样做对最终的 EXE 软件是否有影响不会的。
import 语句的本质 import xxx 会查找包模块所在路径然后加载包加载完后该包内所有的顶层代码都会执行一次包括里面的函数类变量等。 而我们卡在第一步查找路径。最终结果都是一样的都是导入 rcc_rc 包。所以怎么写这个路径并不重要能够找到包就行了。
如果还是遇到问题可以评论区留言。