Cách sử dụng pip trên windows sau proxy xác thực


90

Máy tính của tôi đang chạy các cửa sổ sau một proxy trên máy chủ windows (sử dụng thư mục hoạt động) và tôi không thể tìm ra cách vượt qua nó với pip(trong python3). Tôi đã thử sử dụng --proxy, nhưng nó vẫn chỉ hết thời gian chờ. Tôi cũng đã thử đặt thời gian chờ dài (60 giây), nhưng điều đó không có gì khác biệt. Cài đặt proxy của tôi là chính xác và tôi đã so sánh chúng với những cài đặt mà tôi đang sử dụng thành công trong TortoiseHG để đảm bảo.

Có bất kỳ thủ thuật nào khác mà bất kỳ ai biết đến mà tôi có thể thử, hoặc có một số hạn chế pipliên quan đến proxy Windows?

Cập nhật: Các lần thử không thành công của tôi liên quan đến việc tìm kiếm pypi. Tôi vừa thử thực sự cài đặt một cái gì đó và nó hoạt động. Tuy nhiên, tìm kiếm vẫn không thành công. Điều này cho thấy một lỗi trong piphay chúng hoạt động khác nhau?

Câu trả lời:


107

Tôi đã thử 2 tùy chọn đều hoạt động trên proxy được xác thực NTLM của công ty tôi. Tùy chọn 1 là sử dụng--proxy http://user:pass@proxyAddress:proxyPort

Nếu bạn vẫn gặp sự cố, tôi khuyên bạn nên cài đặt một dịch vụ xác thực proxy (tôi sử dụng CNTLM ) và trỏ pip vào nó, tức là một cái gì đó như--proxy http://localhost:3128


1
Công cụ CNTLM được duy trì tích cực và dường như hoạt động thực sự tốt.
Michał Fita 19/12/12

6
Tôi không thể làm cho nó hoạt không thành vấn đề tất cả tentatives tôi đã làm
eusoubrasileiro

2
Nếu bạn có các ký tự đặc biệt trong mật khẩu hoặc tên người dùng của mình, chỉ cần thoát nó bằng \ trước ký tự đặc biệt. Nó hoạt động tốt.
Arockia

Tôi có hiểu chính xác điều này là bạn đang yêu cầu pip gửi yêu cầu đến proxy, xác thực chính nó với người dùng và mật khẩu đã cho thông qua kết nối http không? Điều đó có nghĩa là mật khẩu của bạn sẽ được gửi không được mã hóa đến máy chủ proxy, phải không !? Có vẻ như tôi có một rủi ro bảo mật lớn hay tôi đang thiếu thứ gì đó?
Robert

Nó làm việc cho tôi với một tường lửa Microsoft Forefront
Raúl Salinas-Monteagudo

64

Tôi đã mất vài giờ để tìm ra điều này nhưng cuối cùng tôi đã làm cho nó hoạt động bằng CNTLM và sau đó nó hoạt động chỉ với một tệp cấu hình pip. Đây là cách tôi làm cho nó hoạt động với tệp cấu hình pip ...

Giải pháp:

1. Trong Windows, điều hướng đến thư mục hồ sơ người dùng của bạn (Ví dụ: C: \ Users \ Sync) và tạo một thư mục có tên " pip "

2. Tạo một tệp có tên " pip.ini " trong thư mục này (Ví dụ: C: \ Users \ Sync \ pip \ pip.ini) và nhập thông tin sau vào đó:

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

Thay thế [tên miền] , [tên người dùng] , [mật khẩu] , [địa chỉ proxy][cổng proxy] bằng thông tin của riêng bạn.

Lưu ý, nếu [tên miền] , [tên người dùng] hoặc [mật khẩu] của bạn có các ký tự đặc biệt, bạn phải mã hóa phần trăm | mã hóa chúng.

3. Tại thời điểm này, tôi đã có thể chạy " cài đặt pip " mà không gặp bất kỳ sự cố nào.

Hy vọng rằng điều này cũng hiệu quả cho những người khác!

Tái bút: Điều này có thể gây ra mối lo ngại về bảo mật vì mật khẩu của bạn được lưu trữ dưới dạng văn bản thuần túy. Nếu đây là một vấn đề, hãy xem xét thiết lập CNTLM bằng cách sử dụng bài viết này (cho phép sử dụng mật khẩu băm thay vì văn bản thuần túy). Sau đó đặt proxy = 127.0.0.1:3128trong tệp "pip.ini" được đề cập ở trên.


2
Bạn có thể tìm thêm thông tin về vị trí pip.ini tại đây . Bạn có thể thiết lập PIP_CONFIG_FILEbiến môi trường để trỏ đến file pip.ini
Mahesha999

1
Yêu nó!!!! rất rõ ràng - chỉ cần nhớ hầu hết các proxy sẽ cho phép bạn nhập mật khẩu của mình theo cách thủ công. KHÔNG BAO GIỜ để lại mật khẩu của bạn trong văn bản rõ ràng!
trung bình

1
Một cài đặt toàn cầu rất quan trọng khác có thể được thêm vào đây là trang nhân bản, ví dụ: thêm "index-url = pypi.tuna.tsinghua.edu.cn/simple " sẽ tăng tốc độ tải xuống pip rất nhiều ở Trung Quốc. Và tệp tương ứng trong Linux là ~ / .pip / pip.conf
TingQian LI

4
[tên miền] là gì?
Alex B

1
@AlexB, [tên miền] đề cập đến tên miền windows của bạn
Mike Pennington

45

Đây là cách tôi thiết lập nó:

  1. Mở dấu nhắc lệnh (CMD) với tư cách quản trị viên.
  2. Xuất cài đặt proxy:

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

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

  3. Cài đặt gói bạn muốn cài đặt:

    pip install PackageName

Ví dụ:

Thí dụ


4
Đây chắc chắn là điều đầu tiên để thử. Python là đa nền tảng và điều này tương đương với những gì chúng ta thường làm trên Linux. Đã gặp sự cố trên Windows (đằng sau cùng một proxy) trong đó --proxyđối số hoàn toàn không có, nhưng cách tiếp cận env var tiêu chuẩn đã hoạt động lần đầu tiên. Đối với bản ghi, chúng tôi cũng đặt no_proxyđể tránh các yêu cầu nội bộ khác cố gắng gửi đi thông qua proxy.
randomsock

không hoạt động cho tôi trên win10. sử dụng một công cụ giả lập giao diện điều khiển như cygwinhay cmdervà sau đó làm nó theo cách linux: export http_proxy=<proxy>export https_proxy=<proxy>và sau đó chỉ cần làmpip install <package>
Bucky

Điều này đã hiệu quả với tôi nhưng --proxycờ dòng lệnh không bao giờ làm được. Windows 10.
AmbroseChapel

15

Tôi đã gặp vấn đề tương tự trên windows 7. Tôi đã cố gắng làm cho nó hoạt động bằng cách tạo một thư mục "pip" với tệp "pip.ini" bên trong nó. Tôi đặt thư mục này bên trong "C: \ Users \ {my.username} \ AppData \ Roaming", bởi vì theo tài liệu Python:

Trên Windows, tệp cấu hình là% APPDATA% \ pip \ pip.ini

Trong tệp pip.ini, tôi chỉ có:

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

Vì vậy, không có tên người dùng: mật khẩu. Và nó đang hoạt động tốt.


1
Trong trường hợp của tôi, điều này chỉ hoạt động nếu tôi đặt tên người dùng và mật khẩu của mình ở dạng cleartext trong tệp này ...: / Tại sao mọi thứ khác từ CMD lại hoạt động như "ping XYZ". Tại sao pip không sử dụng cài đặt IE?
hmrc87

7

Tôi gặp sự cố tương tự và nhận thấy rằng công ty của tôi sử dụng xác thực proxy NTLM. Nếu bạn thấy lỗi này trong pip.log của mình, đây có thể là vấn đề:

Không thể tìm nạp URL http://pypi.python.org/simple/pyreadline : Lỗi HTTP 407: Yêu cầu xác thực proxy (Máy chủ ISA yêu cầu ủy quyền để thực hiện yêu cầu. Quyền truy cập vào bộ lọc Web Proxy bị từ chối.)

Bản đồ NTLM có thể được sử dụng để giao tiếp với máy chủ proxy NTLM bằng cách trở thành một proxy trung gian.

Tải xuống NTLMAPs, cập nhật server.cfg đi kèm, chạy tệp main.py, sau đó trỏ cài đặt proxy của pip thành 127.0.0.1 :.

Tôi cũng cần thay đổi các giá trị mặc định này trong server.cfgtệp thành:

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/


1

Bạn cũng có thể gặp sự cố với chứng chỉ từ proxy của mình. Có rất nhiều câu trả lời ở đây về cách truy xuất chứng chỉ proxy của bạn.

Trên máy chủ Windows, để cho phép pip xóa proxy của bạn, bạn có thể muốn đặt một biến môi trường như:

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

Bạn cũng có thể sử dụng --certđối số PIPvới cùng một kết quả.


1

Tôi đã gặp vấn đề tương tự trên môi trường cửa sổ từ xa. Tôi đã thử nhiều giải pháp được tìm thấy ở đây hoặc trên các bài đăng tương tự khác nhưng không có gì hoạt động. Cuối cùng, giải pháp khá đơn giản. Tôi đã phải đặt NO_PROXYbằng cmd:

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

Bạn phải sử dụng dấu ngoặc kép và đặt NO_PROXYthành chữ hoa. Bạn cũng có thể thêm NO_PROXYdưới dạng một biến môi trường thay vì đặt nó mỗi khi bạn sử dụng bảng điều khiển.

Tôi hy vọng điều này sẽ giúp ích nếu bất kỳ giải pháp nào khác được đăng ở đây hoạt động.


1

cài đặt cntlm: Cntlm: Fast NTLM Authentication Proxy in C

Cấu hình cntlm.ini:

Tên người dùng ob66759

Miền NAM

Mật khẩu bí mật

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Nghe 3128

Cho phép 127.0.0.1

#IP của bạn

Cho phép 10.106.18.138

bắt đầu làm đi:

cntlm -v -c cntlm.ini

Bây giờ trong cmd.exe:

pip cài đặt - nâng cấp 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

làm!

Bạn cũng có thể ẩn mật khẩu: https://stormpoopersmith.com/2012/03/20/using-application-behind-a-corporate-proxy/


1

vấn đề tương tự trên windows10 trở lên các giải pháp không hoạt động cho tôi.

sử dụng công cụ bảng điều khiển giả lập như cygwinvà sau đó thực hiện theo cách mặc định của linux:

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

và mọi thứ đang hoạt động tốt.


trong Windows 10, với proxy xác thực, điều này phù hợp với tôi: sử dụng cntlm làm proxy trung gian, sau đó trên lời nhắc msdos: "set https_proxy = localhost: 3128" và sau đó "pip install -U setuptools == 41.0.1"
mrtexaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.