ChatGPT解决这个技术问题 Extra ChatGPT

如何在身份验证代理后面的 Windows 上使用 pip

我的计算机在 Windows 服务器上的代理后面运行 Windows(使用活动目录),我无法弄清楚如何使用 pip(在 python3 中)通过它。我尝试过使用 --proxy,但它仍然只是超时。我也尝试过设置较长的超时时间(60 秒),但这并没有什么区别。我的代理设置是正确的,我将它们与我在 TortoiseHG 中成功使用的设置进行了比较以确保。

是否有任何其他人知道我可以尝试的技巧,或者在 Windows 代理方面 pip 中是否存在一些限制?

更新:我的失败尝试涉及搜索 pypi。我刚刚尝试实际安装一些东西并且它有效。搜索仍然失败。这是否表明 pip 中存在错误,或者它们的工作方式不同?


R
Russell

我尝试了 2 个选项,它们都适用于我公司的 NTLM 身份验证代理。选项 1 是使用 --proxy http://user:pass@proxyAddress:proxyPort

如果您仍然遇到问题,我建议您安装代理身份验证服务(我使用 CNTLM)并将 pip 指向它,例如 --proxy http://localhost:3128


CNTLM 工具得到积极维护,并且似乎工作得很好。
不管我做的所有尝试,我都无法让它发挥作用
如果您的密码或用户名中有特殊字符,只需在特殊字符前使用 \ 将其转义。它工作正常。
我是否正确理解您正在告诉 pip 将请求发送到代理,通过 http 连接使用给定的用户和密码进行身份验证?这意味着您的密码将不加密地发送到代理服务器,对吧!?对我来说似乎是一个很大的安全风险,还是我遗漏了什么?
它适用于我的 Microsoft Forefront 防火墙
C
Community

我花了几个小时才弄清楚这一点,但我终于用 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.ini 位置的更多信息,请参阅 here。您可以将 PIP_CONFIG_FILE 环境变量设置为指向 pip.ini 文件
爱它!!!!如此干净——请记住,大多数代理都会让您手动输入密码。切勿以明文形式留下您的密码!
这里可以添加另一个非常重要的全局设置是镜像站点,例如添加“index-url = pypi.tuna.tsinghua.edu.cn/simple”会大大提高中国大陆的pip下载速度。而Linux下对应的文件是~/.pip/pip.conf
什么是[域名]?
@AlexB,[域名]指的是你的windows域名
H
Heinrich Cloete

这就是我的设置方式:

以管理员身份打开命令提示符(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


这绝对是首先要尝试的。 Python 是跨平台的,这相当于我们通常在 Linux 上所做的。在 Windows 上(在同一代理之后)出现问题,其中 --proxy 参数根本没有它,但标准 env var 方法第一次起作用。作为记录,我们还设置了 no_proxy 以避免其他内部请求尝试通过代理发出。
在win10上对我不起作用。使用 cygwincmder 之类的模拟器控制台工具,然后以 linux 方式执行:export http_proxy=<proxy>export https_proxy=<proxy>,然后执行 pip install <package>
这对我有用,但 --proxy 命令行标志从来没有。视窗 10。
s
stann1

我在 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]

所以没有用户名:密码。它工作得很好。


就我而言,这仅在我将用户名和密码以明文形式放入此文件时才有效...:/为什么 CMD 中的其他所有内容都像“ping XYZ”一样工作。为什么 pip 不使用 IE 设置?
m
monkut

我遇到了类似的问题,发现我的公司使用 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/


b
bucky

windows10 及以上解决方案上的相同问题对我不起作用。

使用像 cygwin 这样的模拟器控制台工具,然后使用默认的 linux 方式进行操作:

export http_proxy=<proxy>
export https_proxy=<proxy>
pip install <package>

一切正常。


在 Windows 10 下,使用身份验证代理,这对我有用:使用 cntlm 作为中间代理,然后在 msdos 提示符下:“set https_proxy=localhost:3128”,然后“pip install -U setuptools==41.0.1”
在 Windows 10 中,我认为没有 Cygwin 就无法使用没有 HTTPS 的代理。无论我尝试什么,SSL 版本总是存在错误。这很明显,因为我的代理没有使用 SSL。
C
Connected Wanderer

我在远程 Windows 环境中遇到了同样的问题。我尝试了在这里或其他类似帖子中找到的许多解决方案,但没有任何效果。最后,解决方案非常简单。我必须用 cmd 设置 NO_PROXY

set NO_PROXY="<domain>\<username>:<password>@<host>:<port>"
pip install <packagename>

您必须使用双引号并将 NO_PROXY 设置为大写。您还可以将 NO_PROXY 添加为环境变量,而不是每次使用控制台时都设置它。

如果此处发布的任何其他解决方案有效,我希望这会有所帮助。


T
Tshilidzi Mudau

您也可能会遇到来自代理的证书问题。这里有很多关于如何检索代理证书的答案。

在 Windows 主机上,要允许 pip 清除您的代理,您可能需要设置一个环境变量,例如:

PIP_CERT=C:\path\to\certificate\file\in\pem\form\myproxycert.pem

您还可以将 --cert 参数用于 PIP 以获得相同的结果。


A
Alex B

安装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/


G
GermanSniper

尝试在域和用户之间编码反斜杠

pip --proxy https://domain%5Cuser:password@proxy:port install -r requirements.txt

g
gebbissimo

对我来说,问题在于 conda 环境中。很可能它使用了 conda 环境中的 pip 命令(“其中 pip”指向 conda 环境)。通过 --proxy 设置代理设置或设置 http_proxy 没有帮助。

相反,只需打开一个新的 CMD 并在那里执行“pip install”,就会有所帮助。