pip:pip时拒绝访问

1、背景

在公司的内网电脑上,使用pip install报错拒绝访问。

根据网上查到的经验,要么是以管理员方式运行cmd,要么是在pip指令后加target参数修改安装路径,但是这两种方式都无法起效果。

在cmd中输入where pip

where pip

d:\用户\xxx\Desktop\pypro\pip.exe

可以看到pip指令实际上是访问可执行文件pip.exe,但是这里拒绝访问,说明我们没有访问该文件的权限(因为如果是pip不存在,报错内容应该是'pip' 不是内部或外部命令,也不是可运行的程序)。

后来经过分析,我发现应该是公司电脑上所有的pip都无法访问(猜想是pip需要用超级管理员的权限),所以只能用别的方法。

2、解决

1)python -m pip install six.whl

在cmd中,使用python -m pip install six.whl指令代替pip指令来安装离线包six,可以把包安装在python同级目录下的lib\site-package目录下。(python -m代表以module的方式执行命令,前提是后边的module确是python的一个包)。

究其原因,是因为python -m pip 是以python调用pip这个模块的方式来执行pip命令的(也就是说pip其实也是python的一个module),此时你如果用python -m pip -V,可以不仅看到pip的版本,也可以看到这个pip module的路径:

而在用where pip指令看pip的路径时,会发现是另一个(可执行文件):

 

用python -m pip install xxx.whl安装的包,都会被安装到这里的pip上级目录中,在这里就是D:\Python\Python3\lib\site-package中。此时你去这个目录中,是可以看到刚刚安装的包的。

2)import six

进入Python,使用import six导入刚刚装好的包,如果导入成功,说明安装完成(下文就不用再看了)。

 

如果导入失败,说明还要修改python的import路径。

3)修改python的import路径

进入python输入指令:

import sys
sys.path

 可以看到一系列的路径,这里是import的module搜索路径。

在第1步中的安装路径,如果没有在这里,也是无法正常访问安装的包的,所以需要把之前的包安装路径加入sys.path中。

临时生效

使用指令sys.path.append('路径')可以把路径加到sys.path中,本例中就是:

sys.path.append('D:\Python\Python3\lib\site-package')

此时再用sys.path,可以发现该路径已在其中。

此时就能用import把之前下载的离线包导入进来了。

 但是这种方式加入的包会在python重启后失效,也就是我们需要每次都加。

永久生效

创建一个PYTHONPATH环境变量,把之前的那个路径填进来即可。

此时sys.path中就永久加入了这个路径。

posted @ 2024-03-04 11:02  ShineLe  阅读(106)  评论(0编辑  收藏  举报