python import须知

在python中,常需要\(import\)导入第三方库。而对于一些野生的库,\(import\)报错是必不可少的(逃)。
下面,我会例举几项常见的报错。注意对症下药而不是对语句下药。

ModuleNotFuoud

指的是不到对应的库(模块)。python查找库的时候会从sys.path里面找,找不到的意思就是这个库不在sys.path的路径下面。如图
ModuleNotFound

一种临时的解决办法是在import前把该库所对应的路径加进来,例如我这个库位于C:\Users\hgx\Downloads\psdr-cuda-release\psdr-cuda-release\build\lib\Release下,我只需要这样就可以了

import sys

sys.path.append(R"C:\Users\hgx\Downloads\psdr-cuda-release\psdr-cuda-release\build\lib\Release")

import psdr_cuda

另外一种解决办法是在环境变量PATHONPATH中添加该路径,一劳永逸。
add_path

实际上,我们可以从sys.path.append可以看到,第一种方法是把新路径加到sys.path的末尾,第二种方法是加在sys.path的开头处左右。两者并无太大区别。

ImportError

指的是,导入库的时候发生了某种错误导致了导入失败,如图import_error

指的是dll加载失败。这是一个常见的错误,通常是发生在该库还依赖一些第三方dll,而我们无法正常的导入其所依赖的那些dll从而导致这个库导入失败。解决方法如下:

  1. 查看该库依赖哪些dll?
    window下,我们可以利用dumpbin /dependents your_library_name来查看这个库存在哪些依赖。(关于'dumpbin' 不是内部或外部命令,也不是可运行的程序查看本文Appendix),例如我这里psdr_cuda依赖如下
    psdr_dependents

  2. 查看这些dll所在路径是否位于特殊目录中?与c++链接dll一致,dll需要位于工作目录或者PATH环境变量下的路径
    对于PATH环境变量,当程序链接dll的时候,会从其下所有路径去寻找对应dll。对应在python中就是os.environ['path'],例如我这里我的enoki-autodiff.dllenoki-cuda.dll位于C:\Users\hgx\Downloads\psdr-cuda-release\psdr-cuda-release\ext_win64\enoki\lib下,

    import os
    
    os.environ['path']+=R";C:\Users\hgx\Downloads\psdr-cuda-release\psdr-cuda-release\ext_win64\enoki\lib"
    
    import psdr_cuda
    

Appendix

'dumpbin' 不是内部或外部命令,也不是可运行的程序

打开软件everything,搜索VCVARS32,然后把这个VCVARS32.bat文件拖入cmd控制台里面就可以了
dumpbin


杂记

使用conda管理多个python环境时,使用pip install是直接在当前python环境下按照,所以在pip install之前你需要conda activate xxx切换当前python环境

posted @ 2022-09-15 16:10  wk立华奏  阅读(198)  评论(0编辑  收藏  举报