How to use pip on windows behind an authenticating proxy
Asked Answered
B

11

110

My computer is running windows behind a proxy on a windows server (using active directory), and I can't figure out how to get through it with pip (in python3). I have tried using --proxy, but it still just timeouts. I have also tried setting a long timeout (60s), but that made no difference. My proxy settings are correct, and I compared them with those that I'm using successfully in TortoiseHG to make sure.

Are there any other tricks that anyone knows of that I can try, or is there some limitation in pip with regards to windows proxies?

Update: My failed attempts involved searching pypi. I've just tried actually installing something and it worked. Searching still fails though. Does this indicate a bug in pip or do they work differently?

Botelho answered 14/3, 2012 at 8:54 Comment(0)
H
126

I have tried 2 options which both work on my company's NTLM authenticated proxy. Option 1 is to use --proxy http://user:pass@proxyAddress:proxyPort

If you are still having trouble I would suggest installing a proxy authentication service (I use CNTLM) and pointing pip at it ie something like --proxy http://localhost:3128

Harney answered 8/8, 2012 at 16:58 Comment(7)
CNTLM tool is actively maintained and seem to work really well.Hanschen
I could not make it work not matter all tentatives I didFeud
If you have special characters in your password or username, just escape it with \ before the special character. It works fine.Volga
do I understand this correctly that you are telling pip to send the request to the proxy, authenticating itself with the given user and password via an http connection? That means your password will be sent unencrypted to the proxy server, right!? Looks like a big security risk to me or am I missing something?Unidirectional
It worked for me with a Microsoft Forefront firewallRiki
It is strange that this is not working for me. I am using windows 10 and if I check my PC Automatic proxy setup, I see "Script address = proxy-europe.network.mycorporate.com"; there is no Address or port# is filled. How can I use this proxy to make my pip work please? I used "pip install --proxy=proxy-europe.network.mycorporate.com pandas" but not working :(Hammon
Is there also a way to prompt for the password instead of typing it in the command? I really don't like to have my password as plain text in my command history.Ricker
Q
94

It took me a couple hours to figure this out but I finally got it to work using CNTLM and afterwards got it to work with just a pip config file. Here is how I got it work with the pip config file...

Solution:

1. In Windows navigate to your user profile directory (Ex. C:\Users\Sync) and create a folder named "pip"

2. Create a file named "pip.ini" in this directory (Ex. C:\Users\Sync\pip\pip.ini) and enter the following into it:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org
    proxy = http://[domain name]%5C[username]:[password]@[proxy address]:[proxy port]

Replace [domain name], [username], [password], [proxy address] and [proxy port] with your own information.

Note, if your [domain name], [username] or [password] has special characters, you have to percent-encode | encode them.

3. At this point I was able to run "pip install" without any issues.

Hopefully this works for others too!

P.S.: This may pose a security concern because of having your password stored in plain text. If this is an issue, consider setting up CNTLM using this article (allows using hashed password instead of plain text). Afterwards set proxy = 127.0.0.1:3128in the "pip.ini" file mentioned above.

Quash answered 13/5, 2016 at 21:30 Comment(8)
More about pip.ini location can be found here. You can set PIP_CONFIG_FILE environment variable to point to the pip.ini fileDaredevil
Sometime you might required https proxy alsoOmophagia
Legend! This works for me using python 3.6 on windows 7, with pip3Necessity
Love it!!!! so clean--just remember most proxies will let you manually enter your password. NEVER leave your password in cleartext!Prosciutto
Another very important global setting can be added here is mirror site, for example, add "index-url = pypi.tuna.tsinghua.edu.cn/simple" would increase pip download speed a lot in PRC China. And the corresponding file under Linux is ~/.pip/pip.confAlloplasm
what is [domain name]?Kandace
@AlexB, [domain name] refers to your windows domain nameBarbate
Very useful when the step "Installing build dependencies" doesn't use the --proxy given to the initial pip install command.Jadwiga
G
53

This is how I set it up:

  1. Open the command prompt(CMD) as administrator.
  2. Export the proxy settings :

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

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

  3. Install the package you want to install:

    pip install PackageName

For example:

Example

Guadalajara answered 31/1, 2017 at 12:36 Comment(4)
This is definitely the first thing to try. Python is cross-platform, and this is the equivalent of what we normally do on Linux. Had problems on Windows (behind the same proxy) where the --proxy argument just would not have it at all, but the standard env var approach worked first time. For the record, we also set no_proxy to avoid other internal requests trying to go out through the proxy.Vetavetch
does not work for me on win10. use a emulator console tool like cygwin or cmder and then do it the linux way: export http_proxy=<proxy> and export https_proxy=<proxy> and then just do pip install <package>Titania
This worked for me but the --proxy command-line flag never did. Windows 10.Iffy
This method shows your password, in plaintext, in your terminal history, right? Isn't there a better way to do this? Even setting this in pip.ini has the same issue.Arbor
A
20

I ran into the same issue on windows 7. I managed to get it working by creating a "pip" folder with a "pip.ini" file inside it. I put this folder inside "C:\Users\{my.username}\AppData\Roaming", because according to the Python documentation:

On Windows the configuration file is %APPDATA%\pip\pip.ini

In the pip.ini file I have only:

[global]
proxy = [proxy address]:[proxy port]

So no username:password. And it is working just fine.

Aundreaaunson answered 22/12, 2016 at 9:12 Comment(2)
In my case this only works if I put my username and password in cleartext in this file... :/ Why is everyhting else from the CMD working like "ping XYZ". Why isn't pip using the IE settings?Delindadelineate
Thanks, this is the best method and working in Win 10 as wellAra
T
8

I had a similar issue, and found that my company uses NTLM proxy authentication. If you see this error in your pip.log, this is probably the issue:

Could not fetch URL http://pypi.python.org/simple/pyreadline: HTTP Error 407: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )

NTLMaps can be used to interface with the NTLM proxy server by becoming an intermediate proxy.

Download NTLMAPs, update the included server.cfg, run the main.py file, then point pip's proxy setting to 127.0.0.1:.

I also needed to change these default values in the server.cfg file to:

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/

Tenne answered 19/3, 2012 at 5:21 Comment(0)
T
3

same issue on windows10 and above solutions are not working for me.

use a emulator console tool like cygwin and then do it the default linux way:

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

and things are working fine.

Titania answered 14/6, 2019 at 10:53 Comment(2)
under Windows 10, with authenticating proxy, this works for me: using cntlm as intermediate proxy, then on msdos prompt: "set https_proxy=localhost:3128" and then "pip install -U setuptools==41.0.1"Palermo
In Windows 10, I don't think using a proxy without HTTPS can be done without Cygwin. No matter what I try, there is always an error about SSL-version. That's obvious as my proxy isn't using SSL.Tideland
G
2

I had the same issue on a remote windows environment. I tried many solutions found here or on other similars posts but nothing worked. Finally, the solution was quite simple. I had to set NO_PROXY with cmd :

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

You have to use double quotes and set NO_PROXY to upper case. You can also add NO_PROXY as an environment variable instead of setting it each time you use the console.

I hope this will help if any other solution posted here works.

Gabrielagabriele answered 17/4, 2018 at 16:0 Comment(0)
G
1

You may also run into problems with certificates from your proxy. There are plenty of answers here on how to retrieve your proxy's certificate.

On a Windows host, to allow pip to clear your proxy, you may want to set an environment variable such as:

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

You can also use the --cert argument to PIP with the same result.

Gabriel answered 17/2, 2017 at 19:14 Comment(0)
K
1

install cntlm: Cntlm: Fast NTLM Authentication Proxy in C

Config cntlm.ini:

Username ob66759

Domain NAM

Password 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

start it:

cntlm -v -c cntlm.ini

Now in 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

works!

You can also hide password: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Kandace answered 25/5, 2018 at 14:58 Comment(0)
D
1

Try to encode backslash between domain and user

pip --proxy https://domain%5Cuser:password@proxy:port install -r requirements.txt
Delectable answered 9/12, 2020 at 9:24 Comment(0)
A
0

For me, the issue was being inside a conda environment. Most likely it used the pip command from the conda environment ("where pip" pointed to the conda environment). Setting proxy-settings via --proxy or set http_proxy did not help.

Instead, simply opening a new CMD and doing "pip install " there, helped.

Allineallis answered 15/12, 2020 at 14:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.