关于Python安装的第三方包无法在Pycharm中引用的问题
0 引言
引起Python中安装的第三方包在Pycharm中引用失败的原因有多种,下面把几种典型的问题归纳一下:1、pip安装失败,2、安装成功,但Pycharm的解释器中没有刚安装的包,3、Pycharm解释器中出现刚安装的包,却无法引用。
1 pip安装失败
pip安装失败也有多种情况:1、由于网络问题导致安装失败;2、如果安装了Anaconda环境,在conda命令中安装,也可能有问题。:
1.1 由于网络问题导致安装失败
- 到相应的网站上下载对应的whl文件, 包名中对应的cp+数字代表支持的格式包名中对应的cp+数字代表支持的格式
- 然后将下载的whl文件移动到本地python的script目录下,此时需要选择你project所在的目录,如果是虚拟目录就需要进入虚拟目录的script目录下。(本机用的虚拟目录network:D:\Anaconda3\envs\network\Scripts)
- pip intall “文件路径”
1.2 在Anaconda中安装失败
如果是用conda install -n network dnspython3(注:后面两个参数以自己为准,network是我的项目所在的虚拟目录,dnspython3是要安装的包的名字)安装,如果Anaconda相关网站没有这个包,那么就会报出找不到的错误。
如下:
F:\资料\上课\网络编程\软件工具\memcached_en32or64\x64>conda install -n network d
nspython3 Solving environment: failedPackagesNotFoundError: The following packages are not available from
current cha nnels:
- dnspython3
Current channels:
- https://repo.anaconda.com/pkgs/main/win-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/free/win-64
- https://repo.anaconda.com/pkgs/free/noarch
- https://repo.anaconda.com/pkgs/r/win-64
- https://repo.anaconda.com/pkgs/r/noarch
- https://repo.anaconda.com/pkgs/pro/win-64
- https://repo.anaconda.com/pkgs/pro/noarch
- https://repo.anaconda.com/pkgs/msys2/win-64
- https://repo.anaconda.com/pkgs/msys2/noarch
To search for alternate channels that may provide the conda package
you’re looking for, navigate tohttps://anaconda.org
and use the search bar at the top of the page.
这时候,就需要进入虚拟环境network,用pip命令安装。如下:
F:\资料\上课\网络编程\软件工具>activate network
(network) F:\资料\上课\网络编程\软件工具>pip install dnspython3
安装成功后,会显示:
Successfully built dnspython3 Installing collected packages:
dnspython, dnspython3 Successfully installed dnspython-1.15.0
dnspython3-1.15.0
2 安装成功,但Pycharm的解释器中没有刚安装的包
如何确定包是否安装成功呢?
第三方的包,一般都安装在**\Lib\site-packages目录下,如果你在此目录中能找到你刚刚安装的包名,那么代表此包已经安装成功。
如果确定包已经安装成功,而Pycharm中使用的时候提示:
AttributeError: module ‘dns’ has no attribute ‘resolver’
或
ModuleNotFoundError: No module named ‘dns.resolver’
类似的错误,说明Pycharm当前project所在的解释器中没有此包,那么需要检查你的project 的解释器是否正确。如果你使用了虚拟目录,而你pip安装的时候是安装在你的系统默认的环境里面,那么就会导致此问题产生。
如果pip时候安装在系统默认环境里面,也就是所谓的公共环境里面,那么就点击file->setting,再按下图操作,点击图中右边的加号,去添加搜索刚安装的包即可。
在此,因为Python项目所依赖的包的版本问题,所有作者强烈建议大家使用虚拟目录来项目,而且所有的安装也仅仅在当前虚拟目录中进行,最好不到默认环境中安装。
当然,还有其他的一些解决方法,可以参考此文:Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法1,作者在这种情况中,给出了三种解决办法,选择其中任意一种即可。
3 Pycharm解释器中出现刚安装的包,却无法引用
如果在Pycharm的当前project所在的解释器里面,已经出现了刚安装的包,却还是无法引用,那么问题可能是:
你当前项目已经一个模块或者目录,与安装包的模块名字相同,引起冲突所致。
比如作者需要安装包dnspython3,且已经安装成功,如下:
而且,确定在project的解释器中已经出现(说明Pycharm已经加载了此包),如下:
这时候import dns还是会提示没有此模块,原因是我的项目中已经有一个dns的目录了,所以import的时候,会优先导入自己项目中的dns,如下:
此时,修改自己的dns目录名字,即可解决冲突问题。如下图:
至此,建议大家在开发项目时,在自己的目录名字上最好加上项目前缀,如dns改成 net_dns,这样能有效避免导入第三方包而导致名字冲突的问题。