【问题标题】:How to use pip on windows behind an authenticating proxy如何在身份验证代理后面的 Windows 上使用 pip
【发布时间】:2012-03-30 17:04:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: python authentication proxy pip


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

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

      我花了几个小时才弄清楚这一点,但我终于用 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]
      

      替换[域名][用户名][密码][代理地址][代理端口] 使用您自己的信息。

      注意,如果您的[域名][用户名][密码]有特殊字符,您必须percent-encode | encode他们。

      3.此时我可以运行“pip install”,没有任何问题。

      希望这也适用于其他人!

      P.S.:这可能会带来安全问题,因为您的密码以纯文本形式存储。如果这是一个问题,请考虑使用 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”会大大提高PRC中国的pip下载速度。而Linux下对应的文件是~/.pip/pip.conf
      • 什么是[域名]?
      • @AlexB, [域名] 指的是你的 windows 域名
      【解决方案4】:

      我在 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 设置?
      【解决方案5】:

      我是这样设置的:

      1. 以管理员身份打开命令提示符(CMD)。
      2. 导出代理设置:

        set http_proxy=http://username:password@proxyAddress:port

        set https_proxy=https://username:password@proxyAddress:port

      3. 安装你要安装的包:

        pip install PackageName

      例如:

      【讨论】:

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

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

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

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

      您也可以将--cert 参数用于PIP,结果相同。

      【讨论】:

        【解决方案7】:

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

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

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

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

        【讨论】:

          【解决方案8】:

          安装cntlm:Cntlm: Fast NTLM Authentication Proxy in C

          配置cntlm.ini:

          用户名 ob66759

          域 NAM

          密码秘密

          代理 proxy1.net:8080

          代理 proxy2.net:8080

          NoProxy localhost, 127.0.0.*, 10.*, 192.168.*

          听着 3128

          允许 127.0.0.1

          #你的IP

          允许 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/

          【讨论】:

            【解决方案9】:

            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。
            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

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

              相反,只需打开一个新的 CMD 并在那里执行“pip install”即可。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2023-03-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-12-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多