求助:导入high.pyd时出现ImportError,找不到util模块
解决ImportError: No Module named util的问题
嘿,我碰到过类似的Cython模块依赖导入问题,这是因为high.pyd编译时记录的util模块查找路径和运行时的实际路径不匹配导致的。下面给你几个可行的解决方案:
方案1:在main_file.py中添加导入路径
在main_file.py的最开头,把example1目录的绝对路径添加到Python的系统搜索路径里,这样high.pyd就能找到同目录下的util.pyd了。
代码示例:
import sys from pathlib import Path # 计算example1目录的绝对路径(假设main_file.py在example2,example1和example2同级) example1_dir = Path(__file__).parent.parent / "example1" sys.path.append(str(example1_dir)) # 现在可以正常导入两个模块了 from util import YourUtilClass from high import YourHighClass
方案2:重新编译high.pyd时指定依赖路径(推荐)
如果能重新编译high.pyx文件,这是最彻底的解决办法。你可以在编译时告诉Cython去哪里找util模块,或者使用相对导入:
方法A:修改setup.py的包含路径
在编译high.pyx的setup.py里,添加include_path参数指向example1目录:
from setuptools import setup from Cython.Build import cythonize setup( ext_modules=cythonize( "high.pyx", include_path=["../example1"], # 根据你的编译位置调整路径 compiler_directives={"language_level": "3"} ) )
方法B:在high.pyx中使用相对导入
直接在high.pyx里用相对路径导入util:
# 注意前面的点,表示从当前目录导入util from .util import YourUtilClass
这样编译出来的high.pyd会优先在同级目录查找util,运行时就不会出错了。
方案3:临时应急——复制util.pyd到全局站点包
如果赶时间,可以把example1/util.pyd复制到你的Python环境的site-packages目录下。这样Python全局都能找到util模块,high.pyd自然也能导入它。不过这个方法不推荐长期使用,会污染全局环境,而且如果多个项目依赖不同版本的util会出问题。
内容的提问来源于stack exchange,提问作者Lohitha Chintham
相关产品推荐
相关产品推荐

