【问题标题】:pip install using proxy in a virtual environment在虚拟环境中使用代理进行 pip 安装
【发布时间】:2016-10-19 01:45:50
【问题描述】:

我在公司笔记本电脑上的 Ubuntu 虚拟机上工作,该虚拟机使用代理服务器连接到互联网。 经过一番研究,我发现了如何使用带有代理的pip install 安装模块。例如,使用这个命令我可以安装我的 virtualenv 模块:

sudo pip install --proxy=http://user:pass@<proxy_address>:<portnumber> virtualenv

但是,在创建虚拟环境文件夹后,将其激活,然后使用此 pip 命令安装模块:

pip install --proxy=http://user:pass@<proxy_address>:<portnumber> pyperclip

我得到这个错误:

 Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pyperclip/

如果我使用sudo,pip 可以下载并安装模块,但在系统全局包中而不是在我的虚拟环境中。在我看来,我的 Ubuntu 及其代理设置存在权限问题。

我该如何解决这个问题,以便在我的 virtualenv 中本地安装一个模块?

谢谢

【问题讨论】:

标签: python ubuntu pip virtualenv proxy-server


【解决方案1】:

您可能需要退出 virtualenv 并离线安装软件包。下载包:

pip download -d <path/to/downloads/> {package_name | -r requirements.txt}

然后输入你的virtualenv,安装包:

pip install {package_name| -r requiements.txt} --no-index --find-links <path/to/downloads/>

【讨论】:

    【解决方案2】:

    不要激活 virtualenv 并使用 virtualenv pip 的完整路径运行 pip install --proxy ... 命令,即

    C:\Users\name\myvenv\Scripts\pip install --proxy=http://user:pass@&lt;proxy_address&gt;:&lt;portnumber&gt; virtualenv

    【讨论】:

    • 当 VS Code 在设置虚拟环境后尝试搜索扩展时,这对我有用。
    【解决方案3】:

    同时,我知道解决方案。 pip 需要环境变量 HTTP_PROXYHTTPS_PROXY 大写字母,而不是 http_proxy。 所以在你的 '~/.bashrc' 末尾附加下面的文本模式

    HTTP_PROXY=http://username:pass@proxyaddress:port
    export HTTP_PROXY
    HTTPS_PROXY=http://username:pass@proxyaddress:port
    export HTTPS_PROXY
    

    然后,运行source ~/.bashrc 现在你可以在你的 Ubuntu VM 中使用 pip 安装所有 python 包,并使用代理登录。

    【讨论】:

    • 在我的公司代理中不起作用。我收到以下错误 - Retrying (Retry(total=4, connect=None, read=None, redirect=None)) 在连接被 'ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407需要代理身份验证',))': /simple/rasa-core/
    • 您使用哪个 Ubuntu 版本? Ubuntu 16.04 的另一个解决方案是在文件“/etc/apt/apt.conf.d/70debconf”中附加代理条目。 Acquire::http::Proxy "http://username:pass@proxyadress:portnumber";Acquire::https::Proxy "https://username:pass@proxyadress:portnumber";
    • 谢谢。我现在正在使用 CNTLM 绕过我的公司代理。
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多