我的计算机在 Windows 服务器上的代理后面运行 Windows(使用活动目录),我无法弄清楚如何使用 pip
(在 python3 中)通过它。我尝试过使用 --proxy
,但它仍然只是超时。我也尝试过设置较长的超时时间(60 秒),但这并没有什么区别。我的代理设置是正确的,我将它们与我在 TortoiseHG 中成功使用的设置进行了比较以确保。
是否有任何其他人知道我可以尝试的技巧,或者在 Windows 代理方面 pip
中是否存在一些限制?
更新:我的失败尝试涉及搜索 pypi。我刚刚尝试实际安装一些东西并且它有效。搜索仍然失败。这是否表明 pip
中存在错误,或者它们的工作方式不同?
我尝试了 2 个选项,它们都适用于我公司的 NTLM 身份验证代理。选项 1 是使用 --proxy http://user:pass@proxyAddress:proxyPort
如果您仍然遇到问题,我建议您安装代理身份验证服务(我使用 CNTLM)并将 pip 指向它,例如 --proxy http://localhost:3128
我花了几个小时才弄清楚这一点,但我终于用 CNTLM 让它工作,然后只用一个 pip 配置文件让它工作。这是我如何使用 pip 配置文件...
解决方案:
1. 在 Windows 中导航到您的用户配置文件目录(例如 C:\Users\Sync)并创建一个名为“pip”的文件夹
2. 在此目录(例如 C:\Users\Sync\pip\pip.ini)中创建一个名为“pip.ini”的文件,并在其中输入以下内容:
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org
proxy = http://[domain name]%5C[username]:[password]@[proxy address]:[proxy port]
将[域名]、[用户名]、[密码]、[代理地址]和[代理端口]替换为您自己的信息。
请注意,如果您的 [域名]、[username] 或 [password] 包含特殊字符,您必须 percent-encode | encode 他们。
3.此时我能够运行“pip install”而没有任何问题。
希望这也适用于其他人!
PS:这可能会带来安全问题,因为您的密码以纯文本形式存储。如果这是一个问题,请考虑使用 this article 设置 CNTLM(允许使用散列密码而不是纯文本)。然后在上面提到的“pip.ini”文件中设置proxy = 127.0.0.1:3128
。
PIP_CONFIG_FILE
环境变量设置为指向 pip.ini 文件
这就是我的设置方式:
以管理员身份打开命令提示符(CMD)。导出代理设置: set http_proxy=http://username:password@proxyAddress:port set https_proxy=https://username:password@proxyAddress:port 安装你要安装的包: pip install PackageName
例如:
https://i.stack.imgur.com/saJuM.png
--proxy
参数根本没有它,但标准 env var 方法第一次起作用。作为记录,我们还设置了 no_proxy
以避免其他内部请求尝试通过代理发出。
cygwin
或 cmder
之类的模拟器控制台工具,然后以 linux 方式执行:export http_proxy=<proxy>
和 export https_proxy=<proxy>
,然后执行 pip install <package>
--proxy
命令行标志从来没有。视窗 10。
我在 Windows 7 上遇到了同样的问题。我设法通过创建一个里面有一个“pip.ini”文件的“pip”文件夹来让它工作。我把这个文件夹放在“C:\Users\{my.username}\AppData\Roaming”中,因为根据 Python 文档:
在 Windows 上,配置文件是 %APPDATA%\pip\pip.ini
在 pip.ini 文件中,我只有:
[global]
proxy = [proxy address]:[proxy port]
所以没有用户名:密码。它工作得很好。
我遇到了类似的问题,发现我的公司使用 NTLM 代理身份验证。如果您在 pip.log 中看到此错误,则可能是问题所在:
无法获取 URL http://pypi.python.org/simple/pyreadline:HTTP 错误 407:需要代理身份验证(ISA 服务器需要授权才能完成请求。访问 Web 代理过滤器被拒绝。)
NTLMaps 可用于通过成为中间代理与 NTLM 代理服务器交互。
下载 NTLMAP,更新包含的 server.cfg,运行 main.py 文件,然后将 pip 的代理设置指向 127.0.0.1:。
我还需要将 server.cfg
文件中的这些默认值更改为:
LM_PART:1
NT_PART:1
# Highly experimental option. See research.txt for details.
# LM - 06820000
# NT - 05820000
# LM + NT -
NTLM_FLAGS: 07820000
http://ntlmaps.sourceforge.net/
windows10 及以上解决方案上的相同问题对我不起作用。
使用像 cygwin
这样的模拟器控制台工具,然后使用默认的 linux 方式进行操作:
export http_proxy=<proxy>
export https_proxy=<proxy>
pip install <package>
一切正常。
我在远程 Windows 环境中遇到了同样的问题。我尝试了在这里或其他类似帖子中找到的许多解决方案,但没有任何效果。最后,解决方案非常简单。我必须用 cmd 设置 NO_PROXY
:
set NO_PROXY="<domain>\<username>:<password>@<host>:<port>"
pip install <packagename>
您必须使用双引号并将 NO_PROXY
设置为大写。您还可以将 NO_PROXY
添加为环境变量,而不是每次使用控制台时都设置它。
如果此处发布的任何其他解决方案有效,我希望这会有所帮助。
您也可能会遇到来自代理的证书问题。这里有很多关于如何检索代理证书的答案。
在 Windows 主机上,要允许 pip 清除您的代理,您可能需要设置一个环境变量,例如:
PIP_CERT=C:\path\to\certificate\file\in\pem\form\myproxycert.pem
您还可以将 --cert
参数用于 PIP
以获得相同的结果。
安装cntlm:Cntlm: Fast NTLM Authentication Proxy in C
配置cntlm.ini:
用户名 ob66759 域 NAM 密码 secret Proxy proxy1.net:8080 Proxy proxy2.net:8080 NoProxy localhost, 127.0.0.*, 10.*, 192.168.* Listen 3128 Allow 127.0.0.1 #your IP Allow 10.106.18.138
启动它:
cntlm -v -c cntlm.ini
现在在 cmd.exe 中:
pip install --upgrade pip --proxy 127.0.0.1:3128
Collecting pip
Downloading https://files.pythonhosted.
44c8a6e917c1820365cbebcb6a8974d1cd045ab4/
100% |███████████████████████████████
Installing collected packages: pip
Found existing installation: pip 9.0.1
Uninstalling pip-9.0.1:
Successfully uninstalled pip-9.0.1
Successfully installed pip-10.0.1
作品!
您还可以隐藏密码:https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/
尝试在域和用户之间编码反斜杠
pip --proxy https://domain%5Cuser:password@proxy:port install -r requirements.txt
对我来说,问题在于 conda 环境中。很可能它使用了 conda 环境中的 pip 命令(“其中 pip”指向 conda 环境)。通过 --proxy 设置代理设置或设置 http_proxy 没有帮助。
相反,只需打开一个新的 CMD 并在那里执行“pip install”,就会有所帮助。