ChatGPT解决这个技术问题 Extra ChatGPT

How to use pip on windows behind an authenticating proxy

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?


R
Russell

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


CNTLM tool is actively maintained and seem to work really well.
I could not make it work not matter all tentatives I did
If you have special characters in your password or username, just escape it with \ before the special character. It works fine.
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?
It worked for me with a Microsoft Forefront firewall
C
Community

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.


More about pip.ini location can be found here. You can set PIP_CONFIG_FILE environment variable to point to the pip.ini file
Love it!!!! so clean--just remember most proxies will let you manually enter your password. NEVER leave your password in cleartext!
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.conf
what is [domain name]?
@AlexB, [domain name] refers to your windows domain name
H
Heinrich Cloete

This is how I set it up:

Open the command prompt(CMD) as administrator. Export the proxy settings : set http_proxy=http://username:password@proxyAddress:port set https_proxy=https://username:password@proxyAddress:port Install the package you want to install: pip install PackageName

For example:

https://i.stack.imgur.com/saJuM.png


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.
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>
This worked for me but the --proxy command-line flag never did. Windows 10.
s
stann1

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.


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?
m
monkut

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/


b
bucky

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.


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"
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.
C
Connected Wanderer

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.


T
Tshilidzi Mudau

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.


A
Alex B

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/


G
GermanSniper

Try to encode backslash between domain and user

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

g
gebbissimo

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.