关于Python安装的第三方包无法在Pycharm中引用的问题

0 引言

引起Python中安装的第三方包在Pycharm中引用失败的原因有多种,下面把几种典型的问题归纳一下:1、pip安装失败,2、安装成功,但Pycharm的解释器中没有刚安装的包,3、Pycharm解释器中出现刚安装的包,却无法引用。

1 pip安装失败

pip安装失败也有多种情况:1、由于网络问题导致安装失败;2、如果安装了Anaconda环境,在conda命令中安装,也可能有问题。:

1.1 由于网络问题导致安装失败

  1. 到相应的网站上下载对应的whl文件, 包名中对应的cp+数字代表支持的格式包名中对应的cp+数字代表支持的格式
  2. 然后将下载的whl文件移动到本地python的script目录下,此时需要选择你project所在的目录,如果是虚拟目录就需要进入虚拟目录的script目录下。(本机用的虚拟目录network:D:\Anaconda3\envs\network\Scripts)
  3. 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: failed

PackagesNotFoundError: The following packages are not available from
current cha nnels:

  • dnspython3

Current channels:

To search for alternate channels that may provide the conda package
you’re looking for, navigate to

https://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,这样能有效避免导入第三方包而导致名字冲突的问题。


  1. https://blog.csdn.net/kouyi5627/article/details/80531442
    end。 ↩︎

猜你喜欢

转载自blog.csdn.net/wenzhihua/article/details/84063365