ModuleNotFoundError

问题遇到的现象和发生背景

在github上clone了fsgan的代码,按照提示创建conda虚拟环境并且配置环境变量。
fsgan的仓库被clone在了D:\Desktop,所以环境变量我设置为D:\Desktop
我先是运行swap.py,按照提示,运行以下command:(一点没动,不用修改的示例)


python fsgan/inference/swap.py docs/examples/shinzo_abe.mp4 -t docs/examples/conan_obrien.mp4 -o . --finetune --finetune_save --seg_remove_mouth

结果缺抛出这样的错误:ModuleNotFoundError: No module named 'fsgan.preprocess'

img


之后,我又运行了reenact.py,运行如下command:

python fsgan\inference\reenact.py D:\Desktop\000012.jpg -t D:\Desktop\fsgan\docs\examples\conan_obrien.mp4 -o D:\Desktop

然而,还是同样的错误,ModuleNotFoundError: No module named 'fsgan.preprocess'

img

我的解答思路和尝试过的方法

fsgan.preprocess 是存在的。因为,我在reenact.py 和swap.py 的同一目录下创建了一个mytest.py的测试文件,将出错的导入复制进去,并且在导入的模块的同一路径下创建了 myimport.py文件。直接run,mytest.py是可以运行的,并打印出来模块所在的路径。

img


但是,如果使用命令行来运行,mytest.py会报出同样的错误。

img

我想要达到的结果

可以正常运行swap.py和reenact.py

我来告诉你,这个迷一样的问题,你这目录下面有两个fsgan,一个根目录,一个下级目录,这种导入方式很容易出问题,因为这种大型项目的导包就是一个迷,别人的原作者电脑上肯定是能跑通的,你拿下来不一定就能跑通
就将下级目录的fsgan添加到sys.path试试,即在一个文件from fsgan...这行导包语句前加上

import os,sys
sys.path.append(os.path.dirname(os.getcwd()))

以我的经验来看,如果这两行代码都解决不了,你做好最糟糕的打算吧,估计不行了…

ModuleNotFoundError: No module named 'fsgan.preprocess'
ModuleNotFoundError:没有名为“fsgan.process”的模块
常见的排查下思路:
1、module包没安装
2、忘了import
3、没有__init__.py文件
4、package包的版本不对
5、自定义的包名与安装的包名相同,导致import包的时候导错了包
6、没设置PYTHONPATH或者
7、自建的module包所在路径不在PYTHONPATH下
8、不恰当的使用了相对导入

参考这个看看
https://blog.csdn.net/qq_15028721/article/details/109211677

在你克隆的仓库根目录下加一个__init__.py就可以哈

大佬,你的方法确实有效,但是没有完全解决,他抛出了新的问题。

img


AssertionError: Couldn't find face reenactment model in path: ../weights/nfv_msrunet_256_1_2_reenactment_v2.1.pth
我之前遇到过这个问题,问了作者后发现是包下载失败,所以导致只有个包名,里面没内容。后来我按照连接,直接下载下来了,就没有报错了。所以这个我感觉应该还是路径问题。

img

前面说的都不对,那么就只有一种情况:
你运行的环境和你安装的环境是不一致的,

只要你搞成一样即可解决。