python import须知
在python中,常需要\(import\)导入第三方库。而对于一些野生的库,\(import\)报错是必不可少的(逃)。
下面,我会例举几项常见的报错。注意对症下药而不是对语句下药。
ModuleNotFuoud
指的是找不到对应的库(模块)。python查找库的时候会从sys.path
里面找,找不到的意思就是这个库不在sys.path
的路径下面。如图
一种临时的解决办法是在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
中添加该路径,一劳永逸。
实际上,我们可以从sys.path.append
可以看到,第一种方法是把新路径加到sys.path
的末尾,第二种方法是加在sys.path
的开头处左右。两者并无太大区别。
ImportError
指的是,导入库的时候发生了某种错误导致了导入失败,如图
指的是dll加载失败。这是一个常见的错误,通常是发生在该库还依赖一些第三方dll,而我们无法正常的导入其所依赖的那些dll从而导致这个库导入失败。解决方法如下:
-
查看该库依赖哪些dll?
window下,我们可以利用dumpbin /dependents your_library_name
来查看这个库存在哪些依赖。(关于'dumpbin' 不是内部或外部命令,也不是可运行的程序
查看本文Appendix),例如我这里psdr_cuda
依赖如下
-
查看这些dll所在路径是否位于特殊目录中?与c++链接dll一致,dll需要位于工作目录或者
PATH
环境变量下的路径。
对于PATH
环境变量,当程序链接dll的时候,会从其下所有路径去寻找对应dll。对应在python中就是os.environ['path']
,例如我这里我的enoki-autodiff.dll
和enoki-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控制台里面就可以了
杂记
使用conda管理多个python环境时,使用pip install
是直接在当前python环境下按照,所以在pip install之前你需要conda activate xxx
切换当前python环境