Sử dụng pip phía sau proxy với CNTLM


279

Tôi đang cố gắng sử dụng pip phía sau một proxy trong công việc.

Một trong những câu trả lời từ bài đăng này được đề xuất sử dụng CNTLM . Tôi đã cài đặt và định cấu hình cho mỗi bài đăng khác này , nhưng việc chạy bị cntlm.exe -c cntlm.ini -I -M http://google.comlỗi Connection to proxy failed, bailing out.

Tôi cũng đã thử pip install -–proxy=user:pass@localhost:3128(cổng CNTLM mặc định) nhưng nó đã được nâng lên Cannot fetch index base URL http://pypi.python.org/simple/. Rõ ràng một cái gì đó lên với proxy.

Có ai biết cách kiểm tra dứt khoát hơn liệu CNTLM có được thiết lập đúng hay không, nếu có một cách khác xung quanh điều này hoàn toàn? Tôi biết bạn cũng có thể đặt http_proxybiến môi trường như được mô tả ở đây nhưng tôi không chắc chắn nên đặt thông tin đăng nhập cntlm.ininào.


2
Bạn cần biết địa chỉ IP của proxy và số cổng của mình và đặt nó phù hợp trong cntlm.ini của bạn (Đồng thời tên người dùng và mật khẩu của bạn cho proxy nếu bạn có)
5

2
Tôi đã viết một blog về cách thiết lập và sử dụng CNTLM. Bài đăng dành cho Ubuntu và để cài đặt Rails, nhưng tôi nghĩ quá trình này có thể giống nhau. Chỉnh sửa: Đọc bài viết này về cách thiết lập CNTLM cho Windows, về cơ bản giống với phiên bản Ubuntu của tôi. HTH.
Annie Lagang

Câu trả lời:


74

Để thiết lập CNTLM cho windows, hãy theo dõi bài viết này . Đối với Ubuntu, đọc bài viết trên blog của tôi .

Biên tập:

Về cơ bản, để sử dụng CNTLM trong bất kỳ nền tảng nào, bạn cần thiết lập tên người dùng và mật khẩu băm , trước khi sử dụng http://127.0.0.1:3128làm proxy cho proxy gốc của bạn.

  1. Chỉnh sửa cấu hình và thêm thông tin quan trọng như tên miền, tên người dùng, mật khẩu và proxy cha.

  2. Tạo mật khẩu băm.

    các cửa sổ cntlm –c cntlm.ini –H

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

  3. Xóa mật khẩu văn bản đơn giản khỏi cấu hình và thay thế chúng bằng mật khẩu được tạo.

Để kiểm tra nếu làm việc:

các cửa sổ cntlm –M http://www.google.com

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

Để được hướng dẫn chi tiết hơn, xem các liên kết ở trên.

Cập nhật:

Chỉ vì mục đích hoàn chỉnh, tôi đã có thể định cấu hình và sử dụng CNTLM trong Windows gần đây. Tôi đã gặp sự cố trong quá trình đồng bộ hóa Kindle cho PC do proxy của chúng tôi và cài đặt và định cấu hình CNTLM cho Windows đã khắc phục sự cố đó cho tôi. Tham khảo bài viết của tôi để biết thêm chi tiết.


Nếu hướng dẫn này không giải quyết được vấn đề của bạn, hãy thử chạy pip với tùy chọn dòng lệnh --trusted-host pypi.python.orgđã giúp tôi.
Petr

1
Tôi chỉ muốn thêm vào điều này, rằng tôi thực sự không thể khiến cntlm hoạt động trên Windows hoặc Mac trong môi trường công ty của chúng tôi, nhưng cài đặt Fiddler trên máy Windows và sử dụng nó làm proxy đã giải quyết vấn đề.
Dean Meehan

267

Với Ubuntu, tôi không thể có tùy chọn proxy hoạt động như quảng cáo - vì vậy lệnh sau không hoạt động:

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

Nhưng việc xuất https_proxybiến môi trường (lưu ý là https_proxykhông http_proxy) đã thực hiện thủ thuật:

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

sau đó

sudo -E pip install somepackage

1
thiết lập https_proxy cũng thực hiện công việc trong Mac OS X.
Bharadwaj Srigiriraju

4
tương tự ở đây, --proxy không hoạt động, tôi phải chỉ định CẢ HAI http_proxy VÀ https_proxy (Debian đằng sau tường lửa corp)
marc.guenther 12/12/13

34
Cảm ơn bạn đã bao gồm -Etrong sudolệnh, điều đó liên tục ném tôi khi tôi tự hỏi tại sao các chương trình không nhìn thấy ENV của tôi.
AndyC

11
-E thêm vào sudo đã lừa tôi. Nó bảo tồn biến môi trường "http_proxy" mà tôi đã thiết lập trước đó. Cảm ơn!
fantasyerTháng

7
pip --proxy = someproxy-url: port install some-pack làm việc cho tôi trong Win8.1 với pip 6.1.1
zenpoy

96

Trong Windows đừng quên thiết lập

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

những gì tôi cần thiết lập cho

pip install pep8

Hoạt động trên fedora cũng với 'export http_proxy = <proxy_host>: <port>'
Damien

5
Điều này hiệu quả với tôi, nhưng chỉ ở dạng SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [trừ khoảng trống tôi phải thêm để giữ stackoverflow không bị xáo trộn] và tôi phải thay thế các ký tự đặc biệt trong mật khẩu của mình với hex ở dạng% nn
Seth

Điều này làm việc cho tôi. trước đây, tôi đã làm: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>và nó không hoạt động.
Zahra

Có ai đó có một lời giải thích tại sao biến môi trường là cần thiết và làm thế nào nó được sử dụng bởi pip? Đối với conda, nó đủ để cấu hình proxy trong tệp .condarc.
maggie

1
Một cuộc gọi ví dụ sẽ giống như: SET HTTPS_PROXY = https://512893:Pass%23h98@proxy.example.com:6050cho tên người dùng 512893và mật khẩu pass#h98. Hãy nhớ để mã hóa các ký tự đặc biệt trong mật khẩu hoặc tên người dùng ( #trong trường hợp này). Có lẽ cũng nên thử đặt HTTP_PROXYcờ là tốt.
Nuhman

65

Nó không làm việc cho tôi. Tôi đã phải sử dụng https tại nơi làm việc:

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

Để cập nhật, thêm -U.


1
Đây có vẻ như là giải pháp đơn giản nhất cho Windows, không yêu cầu các gói bổ sung.
JE Carter II

3
Nếu bạn cần sử dụng mật khẩu:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti

Và nếu bạn không biết userphải đặt gì , có thể đó là vì không có gì để đặt:pip install --proxy=https://mydomain:port somepackage
Olivier

45

Bạn có thể tiếp tục sử dụng pip qua HTTPS bằng cách thêm chứng chỉ gốc của công ty vào tệp cacert.pem trong thư mục gói / gói trang web của bạn. Sau đó định cấu hình pip để sử dụng proxy của bạn bằng cách thêm các dòng sau vào ~ / pip / pip.conf (hoặc ~ \ pip \ pip.ini nếu bạn đang ở trên Windows):

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

Đó là nó. Không cần sử dụng các gói của bên thứ ba hoặc từ bỏ HTTPS (tất nhiên, quản trị viên mạng của bạn vẫn có thể thấy những gì bạn đang làm).


Điều này hiệu quả với tôi, nhưng chỉ sau khi cài đặt thủ công pip, điều đó có nghĩa là ban đầu bạn không thể sử dụng get-pip.py
Luke Dunstan

2
Để biết vị trí của pip.ini, hãy xem pip.pypa.io/en/latest/user_guide.html#configuration Trong các cửa sổ Tôi tìm thấy cacert trong "C: \ Python34 \ Lib \ site-gói \ pip_vendor \ request \ cacert.pem"
lib

2
Điều này làm việc cho tôi nhưng tôi không có tệp pip.config vì vậy tôi phải tạo một tệp ~/.pip/pip.confsau đó export PIP_CONFIG_FILE=/root/.pip/pip.confvà cài đặt của tôi đã hoạt động! Cảm ơn!
Rhyuk

2
Cảm ơn, bạn đặt tôi trên con đường đúng! FYI, đối với Python 3.7 trên tệp chứng chỉ của Windows 7 dường như được đặt tại [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Xuất chứng chỉ chặn SSL của công ty bạn ở định dạng Base64 .cer, dán khóa chung vào tệp đó và voilà, hỗ trợ https đầy đủ đằng sau proxy công ty.
Mike Strobel

2
Vị trí pip ini của bạn trên windows có thể là AppData/Roaming/pip/pip.ini....
Erik Aronesty 22/12/18

27

cho cửa sổ; đặt proxy của bạn trong dấu nhắc lệnh như
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

thí dụ:
set http_proxy=IND\namit.kewat:xl123456@192.168.180.150:8880


3
Nếu mật khẩu có ký tự đặc biệt như! và @.
Ravi Kumar

1
thoát ký tự đặc biệt với bash esc char: \
Adam

1
Bạn không thể thoát '@' trong mật khẩu của mình bằng ký tự thoát (), bạn phải mã hóa url thành% 40 trong chuỗi proxy.
Deep-B


1
Đặt biến môi trường này dường như không ảnh hưởng đến pip trên máy của tôi
Jack M

26

Điều này làm việc cho tôi (trên Windows thông qua CMD):

pip install --proxy proxyserver:port requests

21
$ pip --proxy http://proxy-host:proxy-port install packagename

Đây là những gì làm việc cho tôi trên


4
Điều này thực sự hữu ích khi chỉ tạm thời đứng sau một proxy. Tôi cũng đã phải thêm tên người dùng và mật khẩu của mình vào cú pháp:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits ngày

14

Theo chính sách bảo mật của chúng tôi, tôi không thể sử dụng https với pypi, chứng nhận kiểm tra SSL, nó phá vỡ tính bảo mật tích hợp của pip cho www.python.org. Người đàn ông ở giữa là quản trị mạng.

Vì vậy, tôi cần phải sử dụng http đơn giản . Để làm như vậy tôi cần ghi đè proxy hệ thống cũng như pypi mặc định:

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

2
Điều này không còn hoạt động nữa. PyPi bây giờ sẽ tự động chuyển bạn tới https.
Martin M.

Kiểm tra SSL dường như không hoạt động; nó có thể là do ghim chính, hoặc bí mật về phía trước?
bbaassssiiee

@SamuelHarmer. Securitycó bốn âm tiết. Quá nhiều cho Trump.
javadba

2
Tôi nghĩ rằng @bbaassssiiee có thể nói rằng pip của anh ấy đã bị hỏng (năm 2013) với HTTPS vì proxy công ty của anh ấy đã viết lại tất cả các certs để sử dụng chứng chỉ gốc của riêng họ (vì vậy họ có thể giải mã tất cả lưu lượng SSL) và pip không xác minh được chứng chỉ. Tất nhiên vào năm 2017, pip tự động tránh kiểm tra chứng chỉ khi --proxy được sử dụng. Nhiều proxy công ty đã thay đổi hiệu quả tất cả lưu lượng truy cập của bạn thành không phải SSL vì ngay cả khi điều hướng đến các trang SSL, bạn vẫn được ủy quyền thông qua proxy HTTP không SSL.
cowbert

13

Mở dấu nhắc lệnh Windows.

Đặt các biến môi trường proxy.

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

Cài đặt các gói Python bằng proxy trong cùng dấu nhắc lệnh của Windows.

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

12

Trong Windows 7:

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

I E:

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

11

Điện thoại như điểm phát sóng di động / kết nối USB

Nếu tôi gặp nhiều khó khăn khi tìm cách thông qua proxy công ty, tôi kết nối với web qua điện thoại của mình (điểm truy cập không dây nếu tôi có wifi, USB tether nếu không) và thực hiện nhanh chóng pip install.

Có thể không hoạt động cho tất cả các thiết lập, nhưng sẽ khiến hầu hết mọi người gặp khó khăn.



7

Tôi có một vấn đề tương tự: đằng sau một proxy công ty với auth tại nơi làm việc, tôi không thể có công việc pip, cũng như Sublime Text 2 (tốt, nó hoạt động với thiết lập tùy chỉnh các cài đặt proxy của tôi). Đối với pip (và tôi sẽ thử điều đó trên git), tôi đã giải quyết nó bằng cách cài đặt proxy cntlm. Cấu hình rất đơn giản:

  1. Chỉnh sửa cntlm.ini
  2. Chỉnh sửa các trường "Tên người dùng", "Tên miền", "Mật khẩu"
  3. Thêm một dòng "Proxy", với cài đặt proxy của bạn: server:port
  4. Đảm bảo rằng dòng "NoProxy" tích hợp "localhost" (như thế theo mặc định)
  5. Lưu ý cổng mặc định: 3128
  6. Lưu và đó là nó.

Để kiểm tra hoạt động, chỉ cần khởi chạy một công cụ dòng lệnh mới và thử:

pip install django --proxy=localhost:3128

Điều đó làm việc cho tôi. Hy vọng điều này sẽ giúp bạn.


6

Tôi có thể đạt được điều này bằng cách chạy:

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

Tôi đang sử dụng Python 3.7.3 bên trong một proxy liên kết.



5

nếu bạn muốn nâng cấp pip bằng proxy, có thể sử dụng (ví dụ: trong Windows):

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

4

Đối với người dùng windows: nếu bạn muốn cài đặt Flask-MongoAlchemy thì hãy sử dụng đoạn mã sau

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

3

Nếu bạn đang kết nối với internet đằng sau một proxy, có thể có vấn đề trong việc chạy một số lệnh.

Đặt các biến môi trường cho cấu hình proxy trong dấu nhắc lệnh như sau:

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

2

Tại CentOS (thực sự tôi nghĩ rằng tất cả các bản phân phối linux đều tương tự nhau) chạy

env|grep http_proxy

env|grep https_proxy

kiểm tra đầu ra của các lệnh đó là gì (chúng nên chứa địa chỉ proxy của bạn).

Nếu đầu ra trống hoặc có giá trị không chính xác, hãy sửa đổi chúng, ví dụ:

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

Bây giờ hãy thử tìm nạp và cài đặt một số gói bằng cách sử dụng pip:

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

và thực sự tôi chưa bao giờ gặp trường hợp này khi nó không hoạt động. Đối với một số hệ thống, bạn cần phải là một root (sudo là không đủ).


2

Cảnh báo, có một cái gì đó rất xấu với lệnh "pip search". Lệnh tìm kiếm không sử dụng cài đặt proxy bất kể nó được thông qua như thế nào.

Tôi đã cố gắng tìm ra vấn đề chỉ bằng cách thử lệnh "tìm kiếm" và tìm thấy bài đăng này với lời giải thích chi tiết về lỗi đó: https://github.com/pypa/pip/issues/1104

Tôi có thể xác nhận lỗi vẫn còn với pip 1.5.6 trên Debian 8 với python 2.7.9. Lệnh "pip install" hoạt động như một bùa mê.


2

Tôi đã nhận được lỗi:

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

(Cổng của máy chủ proxy là cổng ssh được chuyển tiếp tới localhost:3128 ).

Tôi đã phải đặt cả proxy http và https để làm cho nó hoạt động:

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...

như http://pypi.python.org/simple/chuyển hướng đến https://pypi.python.org/simplenhưng piplỗi không cho bạn biết.


2

Tôi cũng không phải là chuyên gia về vấn đề này nhưng tôi đã làm cho nó hoạt động bằng cách đặt all_proxybiến trong tệp ~ / .bashrc. Để mở ~/.bashrctệp và chỉnh sửa tệp từ thiết bị đầu cuối chạy theo các lệnh,

gedit ~/.bashrc &

Thêm sau vào cuối tập tin,

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

Sau đó, mở một thiết bị đầu cuối mới hoặc chạy theo sau trong cùng một thiết bị đầu cuối,

source ~/.bashrc

Chỉ cần thiết lập http_proxyhttps_proxycác biến không đủ cho việc sử dụng đơn giản pip install somepackage. Mặc dù bằng cách nào đósudo -E pip install somepackage hoạt động, nhưng điều này đã cho tôi một số vấn đề trong trường hợp tôi đang sử dụng cài đặt cục bộ của Anaconda trong thư mục người dùng của tôi.

Tái bút - Tôi đang sử dụng Ubuntu 16.04.


2

Làm thế nào về chỉ làm điều đó tại địa phương? Nhiều khả năng bạn có thể tải xuống từ nguồn https thông qua trình duyệt của bạn

  1. Tải xuống tệp mô-đun của bạn (mysql-connector-python-2.0.3.zip / gz ... vv).
  2. Giải nén nó và đi đến thư mục được trích xuất, nơi setup.py được đặt và gọi:

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

6
Nhưng sau đó, bạn phải đi và nhận tất cả các phụ thuộc (và phụ thuộc của họ, và ...) chính mình
jonrsharpe

1

Đây là những gì làm việc cho tôi:

pip --proxy proxy url:port command package

1

Đặt biến môi trường sau: export PIP_PROXY=http://web-proxy.mydomain.com


1

Nếu bạn đang sử dụng Linux, với quyền root:

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

Khi bạn sử dụng env, nó sẽ xuất biến https_proxy để thực thi lệnh cài đặt pip hiện tại.

$ web_proxy_ip là tên máy chủ hoặc IP của Proxy của bạn $ web_proxy_port là Cổng


0

Tôi đã giải quyết vấn đề với PIP trong Windows bằng cách sử dụng "Fiddler" ( https://www.telerik.com/doad/fiddler ). Sau khi tải xuống và cài đặt, hãy làm như sau:

"Quy tắc" => nhấp vào "Tự động xác thực"

Ví dụ: pip cài đặt virtualenv -proxy 127.0.0.1:8888

Chỉ cần mở lời nhắc của bạn và sử dụng.

https://github.com/pypa/pip/issues/1182 Tìm kiếm "voltx" (nhận xét vào ngày 22 tháng 5 năm 2015)


0

đối với các cửa sổ, hãy truy cập C: /ProgramData/pip/pip.ini và đặt

[toàn cầu]

proxy = http: // YouKnowTheRest

với các chi tiết proxy của bạn. Điều này cấu hình vĩnh viễn proxy cho pip.


0

Một cách tiếp cận đơn giản hơn có thể là:

  1. Tạo một thư mục có tên "pip" trong $HOMEthư mục của bạn .
  2. Tạo một tệp có tên "pip.ini" (Windows) hoặc "pip.conf" (Linux) trong thư mục được tạo ở bước 1
  3. Sao chép và dán các dòng sau trong pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
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.