【问题标题】:Using pip behind a proxy with CNTLM在带有 CNTLM 的代理后面使用 pip
【发布时间】:2012-12-18 10:27:40
【问题描述】:

我正在尝试在工作中使用代理背后的 pip。

this post 的其中一个答案建议使用CNTLM。我按照this other post 安装和配置了它,但是运行cntlm.exe -c cntlm.ini -I -M http://google.com 给出了错误Connection to proxy failed, bailing out

我也尝试了pip install -–proxy=user:pass@localhost:3128(默认的 CNTLM 端口),但是这引发了Cannot fetch index base URL http://pypi.python.org/simple/。显然代理出了点问题。

有谁知道如何更明确地检查 CNTLM 是否设置正确,或者是否有其他方法可以完全解决这个问题?我知道您也可以按照here 的描述设置http_proxy 环境变量,但我不确定要输入什么凭据。来自cntlm.ini 的凭据?

【问题讨论】:

  • 您需要知道代理的 IP 地址和端口号,并在您的 cntlm.ini 中进行相应设置(如果您有代理,还需要您的用户名和密码)
  • 我写了一个blog 来介绍如何设置和使用 CNTLM。该帖子适用于 Ubuntu 和安装 Rails,但我认为过程可能相同。编辑:阅读此article,了解如何为 Windows 设置 CNTLM,与我的 Ubuntu 版本基本相同。 HTH。

标签: python proxy pip


【解决方案1】:

对于窗户;在命令提示符中将您的代理设置为
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

示例:
set http_proxy=IND\namit.kewat:xl123456@192.168.180.150:8880

【讨论】:

  • 如果密码有特殊字符,例如!和@。
  • 使用 bash 转义字符转义特殊字符:\
  • 您不能使用转义字符 () 转义密码中的“@”,您必须在代理字符串中将其 url 编码为 %40。
  • 设置这个环境变量好像对我机器上的pip没有影响
【解决方案2】:

要为 Windows 设置 CNTLM,请遵循此article。对于 Ubuntu,请阅读 my blog post

编辑:

基本上,要在任何平台上使用 CNTLM,您需要设置您的用户名和 散列 密码,然后才能使用 http://127.0.0.1:3128 作为父代理的代理。

  1. 编辑配置并添加重要信息,如域、用户名、密码和父代理。

  2. 生成散列密码。

    Windows cntlm –c cntlm.ini –H

    Ubuntu/Linux cntlm -v -H -c /etc/cntlm.conf

  3. 从配置中删除纯文本密码,并将其替换为生成的密码。

检查是否工作:

Windows cntlm –M http://www.google.com

Ubuntu/Linux sudo cntlm -M http://www.google.com/

有关更详细的说明,请参阅上面的链接。

更新:

为了完整起见,我最近能够在 Windows 中配置和使用 CNTLM。由于我们的代理,我在 Kindle for PC 的同步过程中遇到了一个问题,安装和配置 CNTLM for Windows 为我解决了这个问题。有关详细信息,请参阅my article

【讨论】:

  • 如果本指南不能解决您的问题,请尝试使用命令行选项 --trusted-host pypi.python.org 运行 pip,这对我有用。
  • 我想补充一点,我实际上无法在我们的公司环境中让 cntlm 在 Windows 或 Mac 上工作,但是在 Windows 机器上安装 Fiddler 并将其用作代理解决了问题。
【解决方案3】:

我遇到了同样的问题:在工作中使用身份验证的公司代理背后,我无法使用 pip 以及 Sublime Text 2(嗯,它与我的代理设置的自定义设置一起使用)。 对于 pip(我将在 git 上尝试),我解决了安装 cntlm 代理的问题。 配置非常简单:

  1. 编辑cntlm.ini
  2. 编辑“用户名”、“域”、“密码”字段
  3. 使用您的代理设置添加“代理”行:server:port
  4. 确保“NoProxy”行集成了“localhost”(默认情况下如此)
  5. 注意默认端口:3128
  6. 保存即可。

要测试它是否有效,只需启动一个新的命令行工具,然后尝试:

pip install django --proxy=localhost:3128

这对我有用。 希望这会对你有所帮助。

【讨论】:

    【解决方案4】:

    windows下别忘了设置

    SET HTTPS_PROXY=<proxyHost>:<proxyPort>
    

    我需要设置什么

    pip install pep8
    

    【讨论】:

    • 在 Fedora 上也可以使用 'export http_proxy=:'
    • 这对我有用,但仅限于 SET HTTPS_PROXY=ht tps://user:pass@addr:port [减去我必须添加的空间以防止 stackoverflow 乱码],我必须用 %nn 形式的十六进制替换我的密码中的特殊字符
    • 这对我有用。之前,我在做:SET HTTPS_PROXY=username:password@&lt;proxyHost&gt;:&lt;proxyPort&gt;,但它不起作用。
    • 有人解释为什么需要环境变量以及 pip 如何使用它?对于 conda 来说,它足以在 .condarc 文件中配置代理。
    • 一个示例调用如下所示:SET HTTPS_PROXY = https://512893:Pass%23h98@proxy.example.com:6050 用于用户名 512893 和密码 pass#h98。请记住对密码或用户名中的特殊字符进行 url 编码(在这种情况下为#)。也许也可以尝试设置HTTP_PROXY 标志。
    【解决方案5】:

    根据我们的安全政策我不能将 https 与 pypi 一起使用,SSL-inspection 会重写证书,它会破坏 pip 对 www.python.org 的内置安全性。中间的人是网络管理员。

    所以我需要使用普通的http。为此,我需要覆盖系统代理以及默认的 pypi:

    bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
    

    【讨论】:

    • 这不再起作用了。 PyPi 现在会自动将您转发到 https。
    • SSL 检查似乎不起作用;可能是因为密钥固定,还是前向保密?
    • @SamuelHarmer 。 Security 有四个音节。对特朗普来说太多了。
    • 我认为@bbaassssiiee 可能会说他的 pip 使用 HTTPS 破坏了(在 2013 年),因为他的公司代理重写了所有证书以使用他们自己的根证书(因此他们可以解密所有 SSL 流量)并且 pip 失败证书验证。当然在 2017 年,使用 --proxy 时 pip 会自动避免证书检查。无论如何,许多公司代理已经有效地将您的所有流量更改为非 SSL,因为即使在导航到 SSL 站点时,您也是通过非 SSL HTTP 代理进行代理。
    【解决方案6】:

    使用 Ubuntu,我无法让代理选项像宣传的那样工作 - 所以以下命令 not 工作:

    sudo pip --proxy http://web-proxy.mydomain.com install somepackage
    

    但是导出https_proxy 环境变量(注意它的https_proxy 不是http_proxy)可以解决问题:

    export https_proxy=http://web-proxy.mydomain.com
    

    然后

    sudo -E pip install somepackage
    

    【讨论】:

    • 设置 https_proxy 也可以在 Mac OS X 中完成。
    • 这里也一样,--proxy 不起作用,我必须同时指定 http_proxy 和 https_proxy(Debian 位于公司防火墙后面)
    • 感谢您将 -E 包含在 sudo 命令中,当我想知道为什么程序没有看到我的 ENV 时,它不断地抛出我。
    • -E 添加到 sudo 对我有用。它保留了我之前设置的环境变量“http_proxy”。谢谢!
    • pip --proxy= someproxy-url:port install some-package 在 Win8.1 中使用 pip 6.1.1 为我工作
    【解决方案7】:

    手机作为移动热点/USB 网络共享

    如果我很难通过公司代理找到方法,我会通过我的手机连接到网络(如果我有 wifi,则连接到网络,如果没有,则使用 USB 系绳)并快速执行pip install

    可能不适用于所有设置,但应该能让大多数人在紧要关头。

    【讨论】:

      【解决方案8】:

      您可以通过 HTTPS 继续使用 pip,方法是将您公司的根证书添加到您的 site-packages/pip 文件夹中的 cacert.pem 文件中。然后通过将以下行添加到 ~/pip/pip.conf(或 ~\pip\pip.ini,如果你在 Windows 上)来配置 pip 以使用你的代理:

      [global]
      proxy = [user:passwd@]proxy.server:port
      

      就是这样。无需使用第三方软件包或放弃 HTTPS(当然,您的网络管理员仍然可以看到您在做什么)。

      【讨论】:

      • 这对我有用,但只有在手动安装 pip 之后,这意味着你最初不能使用 get-pip.py
      • 有关 pip.ini 的位置,请参阅pip.pypa.io/en/latest/user_guide.html#configuration 在 Windows 中,我在“C:\Python34\Lib\site-packages\pip_vendor\requests\cacert.pem”中找到了 cacert
      • 这对我有用,但我没有 pip.config 文件,所以我必须在~/.pip/pip.conf 然后export PIP_CONFIG_FILE=/root/.pip/pip.conf 创建一个,我的安装成功了!谢谢!
      • 谢谢,你让我走上了正确的道路!仅供参考,对于 Windows 7 上的 Python 3.7,pip 的证书文件显然位于 [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem。以 Base64 .cer 格式导出您公司的 SSL 拦截证书,将公钥粘贴到该文件中,瞧,公司代理背后的完整 https 支持。
      • 你在windows上的pip ini位置可能是AppData/Roaming/pip/pip.ini ....
      【解决方案9】:

      在本地做怎么样?您很可能可以通过浏览器从 https 源下载

      1. 下载你的模块文件(mysql-connector-python-2.0.3.zip /gz... 等等)。
      2. 解压并转到 setup.py 所在的解压目录 并调用:

        C:\mysql-connector-python-2.0.3>python.exe setup.py install
        

      【讨论】:

      • 但是你必须自己去获取所有依赖项(以及它们的依赖项,以及......)
      【解决方案10】:

      Windows 用户:如果你想安装 Flask-MongoAlchemy,请使用以下代码

      pip install Flask-MongoAlchemy --proxy="http://example.com:port"**
      

      【讨论】:

        【解决方案11】:

        在 CentOS(其实我认为所有的 linux 发行版都差不多)运行

        env|grep http_proxy
        

        env|grep https_proxy
        

        检查这些命令的输出是什么(它们应该包含您的代理地址)。

        如果输出为空或值不正确,请修改它们,例如:

        export http_proxy=http://10.1.1.1:8080
        export https_proxy=http://10.1.1.1:8080
        

        现在尝试使用 pip 获取并安装一些包:

        pip --proxy http://10.1.1.1:8080 install robotframework
        

        实际上,我从来没有遇到过它不起作用的情况。对于某些系统,您需要成为 root(sudo 是不够的)。

        【讨论】:

          【解决方案12】:

          警告,“pip search”命令有一些不好的地方。 搜索命令不使用代理设置,无论其传递方式如何。

          我试图找出问题只尝试“搜索”命令,发现这篇文章详细解释了那个错误:https://github.com/pypa/pip/issues/1104

          我可以确认该错误仍然存​​在于 Debian 8 上的 pip 1.5.6 和 python 2.7.9。 “pip install”命令就像一个魅力。

          【讨论】:

            【解决方案13】:

            在 Ubuntu 14.04 LTS 中

               sudo pip --proxy http://PROXYDOM:PROXYPORT install package
            

            干杯

            【讨论】:

              【解决方案14】:

              它对我不起作用。我不得不在工作中使用 https

              pip install --proxy=https://user@mydomain:port somepackage
              

              为了更新,添加-U。

              【讨论】:

              • 这似乎是最简单的 Windows 解决方案,不需要额外的包。
              • 如需使用密码:pip install somepackage --proxy https://user:password@mydomain:port
              • 如果你不知道user 应该放什么,那可能是因为没有放什么:pip install --proxy=https://mydomain:port somepackage
              【解决方案15】:

              我得到了错误:

              chris@green:~$ sudo http_proxy=http://localhost:3128 pip install django==1.8.8 
              Downloading/unpacking django==1.8.8
                Cannot fetch index base URL http://pypi.python.org/simple/
                Could not find any downloads that satisfy the requirement django==1.8.8
              No distributions at all found for django==1.8.8
              Storing complete log in /home/chris/.pip/pip.log
              

              (代理服务器的端口是ssh端口转发到localhost:3128)。

              我必须同时设置 http 和 https 代理才能使其工作:

              chris@green:~$ sudo http_proxy=http://localhost:3128 https_proxy=http://localhost:3128 pip install django==1.8.8
              Downloading/unpacking django==1.8.8
                Downloading Django-1.8.8.tar.gz (7.3Mb): 7.3Mb downloaded
                Running setup.py egg_info for package django
              
                  warning: no previously-included files matching '__pycache__' found under directory '*'
                  warning: no previously-included files matching '*.py[co]' found under directory '*'
              Installing collected packages: django
                Running setup.py install for django
              
                  warning: no previously-included files matching '__pycache__' found under directory '*'
                  warning: no previously-included files matching '*.py[co]' found under directory '*'
                  changing mode of build/scripts-2.7/django-admin.py from 644 to 755
                  changing mode of /usr/local/bin/django-admin.py to 755
                  Installing django-admin script to /usr/local/bin
              Successfully installed django
              Cleaning up...
              

              因为http://pypi.python.org/simple/ 重定向到https://pypi.python.org/simplepip 的错误并没有告诉你。

              【讨论】:

                【解决方案16】:

                这对我有用(在 Windows 上通过 CMD):

                pip install --proxy proxyserver:port requests
                

                【讨论】:

                  【解决方案17】:

                  在高级系统设置中设置环境变量。 在命令提示符下,它的行为应该是这样的:

                  C:\Windows\system32>echo %http_proxy%

                  http://username:passowrd@proxy:port

                  C:\Windows\system32>echo %https_proxy%

                  http://username:password@proxy:port

                  稍后,简单 pip install whatEver 应该可以工作。

                  【讨论】:

                    【解决方案18】:

                    在 Windows 7 中:

                    pip install --proxy DOMAIN\user:password@proxyaddress:port package
                    

                    即:

                    pip install --proxy BR\neo:p4ssw0rd@myproxyrocks.com.br:8080 virtualenv
                    

                    【讨论】:

                      【解决方案19】:

                      这对我有用:

                      pip --proxy proxy url:port command package
                      

                      【讨论】:

                        【解决方案20】:

                        我也不是这方面的专家,但我通过在 ~/.bashrc 文件中设置 all_proxy 变量使其工作。要打开 ~/.bashrc 文件并从终端运行以下命令对其进行编辑,

                        gedit ~/.bashrc &
                        

                        在文件末尾添加以下内容,

                        export all_proxy="http://x.y.z.w:port"
                        

                        然后打开一个新终端或在同一终端中运行以下命令,

                        source ~/.bashrc
                        

                        仅设置http_proxyhttps_proxy 变量不足以简单使用pip install somepackage。虽然 sudo -E pip install somepackage 以某种方式有效,但这给了我一些问题,以防我在用户文件夹中使用本地安装的 Anaconda。

                        附: - 我使用的是 Ubuntu 16.04。

                        【讨论】:

                          【解决方案21】:

                          如果你想通过代理升级 pip,可以使用(例如在 Windows 中):

                          python -m pip --proxy http://proxy_user:proxy_password@proxy_hostname:proxy_port insta
                          ll --upgrade pip
                          

                          【讨论】:

                            【解决方案22】:
                            $ pip --proxy http://proxy-host:proxy-port install packagename
                            

                            这对我有用

                            【讨论】:

                            • 这在仅在代理后临时非常有用。我还必须在语法中添加我的用户名和密码:pip --proxy http://username:password@proxy-host:proxy-port install &lt;package&gt;
                            【解决方案23】:

                            我使用“Fiddler”(https://www.telerik.com/download/fiddler) 在 Windows 中解决了 PIP 的问题。下载并安装后,执行以下操作:

                            “规则” => 点击“自动验证”

                            示例:pip install virtualenv -proxy 127.0.0.1:8888

                            只需打开提示符并使用。

                            https://github.com/pypa/pip/issues/1182 搜索“voltagex”(2015 年 5 月 22 日评论)

                            【讨论】:

                              【解决方案24】:

                              打开 Windows 命令提示符。

                              设置代理环境变量。

                              set http_proxy=http://user:password@proxy_ip:port
                              set https_proxy=https://user:password@proxy_ip:port
                              

                              在同一 Windows 命令提示符下使用代理安装 Python 包。

                              pip install --proxy="user:password@proxy_ip:port" package_name
                              

                              【讨论】:

                                【解决方案25】:

                                对于 windows 转到 C:/ProgramData/pip/pip.ini,然后设置

                                [全局]

                                代理 = http://YouKnowTheRest

                                您的代理详细信息。这会永久配置 pip 的代理。

                                【讨论】:

                                  【解决方案26】:

                                  设置如下环境变量:export PIP_PROXY=http://web-proxy.mydomain.com

                                  【讨论】:

                                    【解决方案27】:

                                    如果您使用的是 Linux,请以 root 身份:

                                    env https_proxy=http://$web_proxy_ip:$web_proxy_port pip install something
                                    

                                    当您使用 env 时,它会导出变量 https_proxy 以供当前执行命令 pip install。

                                    $web_proxy_ip 是您的代理的主机名或 IP $web_proxy_port 是端口

                                    【讨论】:

                                      【解决方案28】:

                                      我可以通过运行来实现:

                                      pip install --proxy=http://user:pass@your.proxy.com:3128 package==version
                                      

                                      我在公司代理中使用 Python 3.7.3。

                                      【讨论】:

                                        【解决方案29】:

                                        如果您通过代理连接到互联网,则运行某些命令可能会出现问题。

                                        在命令提示符下设置代理配置的环境变量如下:

                                        set http_proxy=http://username:password@proxyserver:proxyport
                                        set https_proxy=https://username:password@proxyserver:proxyport
                                        

                                        【讨论】:

                                          【解决方案30】:

                                          一种更简单的方法可能是:

                                          1. 在您的$HOME 目录中创建一个名为“pip”的文件夹。
                                          2. 在目录中创建一个名为“pip.ini”(Windows)或“pip.conf”(Linux)的文件 在第 1 步中创建
                                          3. 在 pip.ini/pip.conf 下复制并粘贴以下行:

                                            [global]
                                            trusted-host = pypi.python.org
                                                           pypi.org
                                                           files.pythonhosted.org 
                                            

                                          【讨论】:

                                            猜你喜欢
                                            • 2015-09-21
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2013-09-29
                                            • 1970-01-01
                                            • 2014-12-30
                                            • 2012-03-30
                                            相关资源
                                            最近更新 更多