当前运行脚本从自己写的包my_package 中导入了模块A,但是模块A所依赖的模块B无法自动导入,此时我们要需要在路径文件 my_package\ __init__.py 中,写入以下代码:

import sys # 即添加包名的搜索路径
sys.path.append("my_package")

原因解析:

        当前脚本从包中导入模块A时,仅导入了模块A的路径,并没有模块B的路径。python搜索路径找不到B的路径。自然,A的依赖模块B无法导入。类似于pyinstaller打包时的 --hiden-import 

        此时需要在包内的__init__.py文件内添加模块B的路径(在导入包时,__init__.py会自动运行),由于有包的路径,python解释器就可以搜索包下的模块,自然模块B也能被导入了。

        以上属于个人的猜测理解,有误之处请予指正。

问题举例:

        在当前脚本 exam1-1.py 从自己写的包中导入模块 cipher_algprithm.affine_cipher.py (如图1),并从中导入 AffineCipher() 类。其中 affine_cipher.py 需要导入 util_math.py

        但是运行 exam1-1.py 缺显示 No module named 'util_math',即当前运行脚本仅从包中导入了affine_cipher.py,但是无法自动导入 affine_cipher.py 所依赖的模块 util_math.py (如图2,图3)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐