Menggunakan pip di belakang proxy dengan CNTLM

280

Saya mencoba menggunakan pip di belakang proxy di tempat kerja.

Salah satu jawaban dari posting ini disarankan menggunakan CNTLM . Saya menginstal dan mengkonfigurasinya per posting lain ini , tetapi menjalankannya cntlm.exe -c cntlm.ini -I -M http://google.commemberikan kesalahan Connection to proxy failed, bailing out.

Saya juga mencoba pip install -–proxy=user:pass@localhost:3128(port CNTLM default) tetapi itu meningkat Cannot fetch index base URL http://pypi.python.org/simple/. Jelas ada sesuatu dengan proxy.

Adakah yang tahu cara mengecek dengan lebih pasti apakah CNTLM diatur dengan benar, atau apakah ada cara lain untuk menyelesaikannya? Saya tahu Anda juga dapat mengatur http_proxyvariabel lingkungan seperti yang dijelaskan di sini, tetapi saya tidak yakin kredensial apa yang akan dimasukkan. Dari mana cntlm.ini?

rampok
sumber
2
Anda perlu mengetahui alamat IP dari proxy dan nomor port Anda dan mengaturnya di cntlm.ini Anda (Juga nama pengguna dan kata sandi Anda untuk proxy jika ada)
number5
2
Saya menulis blog tentang cara mengatur dan menggunakan CNTLM. Posting ini untuk Ubuntu dan untuk menginstal Rails, tapi saya pikir prosesnya mungkin sama. Sunting: Baca artikel ini tentang cara mengatur CNTLM untuk Windows, pada dasarnya sama dengan versi Ubuntu saya. HTH.
Annie Lagang

Jawaban:

74

Untuk mengatur CNTLM untuk windows, ikuti artikel ini . Untuk Ubuntu, baca posting blog saya .

Edit:

Pada dasarnya, untuk menggunakan CNTLM di platform apa pun, Anda perlu mengatur nama pengguna dan kata sandi hash Anda , sebelum digunakan http://127.0.0.1:3128sebagai proxy ke proksi induk Anda.

  1. Edit konfigurasi dan tambahkan informasi penting seperti domain, nama pengguna, kata sandi, dan proksi induk.

  2. Hasilkan kata sandi hash.

    Windows cntlm –c cntlm.ini –H

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

  3. Hapus kata sandi teks biasa dari konfigurasi dan ganti dengan kata sandi yang dihasilkan.

Untuk memeriksa apakah berfungsi:

Windows cntlm –M http://www.google.com

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

Untuk instruksi lebih detail, lihat tautan di atas.

Memperbarui:

Demi kelengkapan saja, saya dapat mengkonfigurasi dan menggunakan CNTLM di Windows baru-baru ini. Saya mengalami masalah selama proses sinkronisasi Kindle untuk PC karena proxy kami dan menginstal dan mengkonfigurasi CNTLM untuk Windows memperbaiki masalah itu untuk saya. Lihat artikel saya untuk lebih jelasnya.

Annie Lagang
sumber
Jika panduan ini tidak menyelesaikan masalah Anda, coba jalankan pip dengan opsi commandline --trusted-host pypi.python.orgyang membantu saya.
Petr
1
Saya hanya ingin menambahkan ini, bahwa saya tidak bisa benar-benar membuat cntlm bekerja pada Windows atau Mac dalam lingkungan perusahaan kami, tetapi menginstal Fiddler pada mesin Windows dan menggunakannya sebagai proksi menyelesaikan masalah.
Dean Meehan
268

Dengan Ubuntu saya tidak bisa mendapatkan opsi proxy untuk berfungsi seperti yang diiklankan - jadi perintah berikut tidak berfungsi:

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

Tetapi mengekspor https_proxyvariabel lingkungan (perhatikan https_proxybukan http_proxy) berhasil:

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

kemudian

sudo -E pip install somepackage
Sameer Vaidya
sumber
1
pengaturan https_proxy juga berfungsi di Mac OS X.
Bharadwaj Srigiriraju
4
sama di sini, --proxy tidak berfungsi, saya harus menentukan KEDUA http_proxy DAN https_proxy (Debian di belakang firewall corp)
marc.guenther
34
Terima kasih telah memasukkan -Edalam sudoperintah, yang terus-menerus melempar saya ketika saya bertanya-tanya mengapa program tidak melihat ENV saya.
AndyC
11
-E ditambahkan ke sudo melakukan trik untukku. Ini mempertahankan variabel lingkungan "http_proxy" yang saya atur sebelumnya. Terima kasih!
ImagerThat
7
pip --proxy = someproxy-url: port install beberapa-paket bekerja untuk saya di Win8.1 dengan pip 6.1.1
zenpoy
96

Di bawah Windows jangan lupa untuk mengatur

SET HTTPS_PROXY=<proxyHost>:<proxyPort>

apa yang saya butuhkan untuk mengatur

pip install pep8
k7sleeper
sumber
Bekerja pada fedora juga dengan 'export http_proxy = <proxy_host>: <port>'
Damien
5
Ini bekerja untuk saya, tetapi hanya dalam bentuk SET HTTPS_PROXY = ht tps: // user: pass @ addr: port [minus ruang yang harus saya tambahkan untuk menjaga stackoverflow agar tidak rusak] dan saya harus mengganti karakter khusus pada kata sandi saya dengan hex dalam bentuk% nn
Seth
ini berhasil untuk saya. sebelumnya, saya lakukan: SET HTTPS_PROXY=username:password@<proxyHost>:<proxyPort>dan itu tidak berhasil.
Zahra
Apakah ada yang punya penjelasan mengapa variabel lingkungan diperlukan dan bagaimana ini digunakan oleh pip? Untuk conda cukup untuk mengkonfigurasi proxy di file .condarc.
maggie
1
Contoh panggilan akan terlihat seperti: SET HTTPS_PROXY = https://512893:Pass%[email protected]:6050untuk nama pengguna 512893& kata sandi pass#h98. Ingatlah untuk url menyandikan karakter khusus dalam kata sandi atau nama pengguna ( #dalam hal ini). Mungkin juga mencoba mengatur HTTP_PROXYbendera juga.
Nuhman
65

Itu tidak bekerja untuk saya. Saya harus menggunakan https di tempat kerja:

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

Untuk memperbarui, tambahkan -U.

Hugo Salvador
sumber
1
Ini sepertinya solusi paling sederhana untuk Windows, tidak memerlukan paket tambahan.
JE Carter II
3
Jika Anda perlu menggunakan kata sandi:pip install somepackage --proxy https://user:password@mydomain:port
Daniel R Carletti
Dan jika Anda tidak tahu userharus meletakkan apa , mungkin itu karena tidak ada yang bisa dimasukkan:pip install --proxy=https://mydomain:port somepackage
Olivier
45

Anda dapat terus menggunakan pip melalui HTTPS dengan menambahkan sertifikat root perusahaan Anda ke file cacert.pem di folder situs-paket / pip Anda. Kemudian konfigurasikan pip untuk menggunakan proxy Anda dengan menambahkan baris berikut ke ~ / pip / pip.conf (atau ~ \ pip \ pip.ini jika Anda menggunakan Windows):

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

Itu dia. Tidak perlu menggunakan paket pihak ketiga atau menyerah HTTPS (tentu saja, admin jaringan Anda masih dapat melihat apa yang Anda lakukan).

djmoch
sumber
Ini bekerja untuk saya, tetapi hanya setelah menginstal secara manual pip, yang berarti Anda tidak dapat menggunakan get-pip.py pada awalnya
Luke Dunstan
2
Untuk lokasi pip.ini lihat pip.pypa.io/en/latest/user_guide.html#configuration Di windows saya menemukan cacert di "C: \ Python34 \ Lib \ situs-paket \ pip_vendor \ permintaan \ cacert.pem"
Lib
2
Ini bekerja untuk saya tetapi saya tidak memiliki file pip.config jadi saya harus membuatnya pada ~/.pip/pip.confsaat itu export PIP_CONFIG_FILE=/root/.pip/pip.confdan instalasi saya berhasil! Terima kasih!
Rhyuk
2
Terima kasih, Anda menempatkan saya di jalan yang benar! FYI, untuk Python 3.7 pada file sertifikat Windows 7 pip tampaknya terletak di [Python37]\Lib\site-packages\pip\_vendor\certifi\cacert.pem. Ekspor sertifikat intersepsi SSL perusahaan Anda dalam format Base64 .cer, rekatkan kunci publik ke dalam file itu, dan berikan dukungan penuh https di belakang proksi perusahaan.
Mike Strobel
2
Lokasi pip Anda di windows mungkin AppData/Roaming/pip/pip.ini....
Erik Aronesty
27

untuk windows; setel proxy Anda di command prompt sebagai
set HTTP_PROXY=domain\username:password@myproxy:myproxyport

contoh:
set http_proxy=IND\namit.kewat:[email protected]:8880

namit
sumber
3
Bagaimana jika kata sandi memiliki karakter khusus seperti! dan @.
Ravi Kumar
1
melarikan diri karakter spesial dengan char bash escape: \
Adam
1
Anda tidak dapat melarikan diri '@' dalam kata sandi Anda dengan karakter escape (), Anda harus menyandikannya ke% 40 dalam string proxy.
Deep-B
3
Saya perlu mengatur HTTP_PROXY = nama pengguna: kata sandi @ myproxy: set myproxyport HTTPS_PROXY = nama pengguna: kata sandi @ myproxyport, myproxyport
Seth
1
Mengatur variabel lingkungan ini tampaknya tidak berpengaruh pada pip di mesin saya
Jack M
26

Ini bekerja untuk saya (pada Windows via CMD):

pip install --proxy proxyserver:port requests
damian1baran
sumber
21
$ pip --proxy http://proxy-host:proxy-port install packagename

Inilah yang berhasil bagi saya

Anand
sumber
4
Ini sangat berguna ketika hanya sementara di belakang proxy. Saya juga harus menambahkan nama pengguna dan kata sandi saya ke sintaks:pip --proxy http://username:password@proxy-host:proxy-port install <package>
Terrabits
14

Di bawah kebijakan keamanan kami, saya tidak boleh menggunakan https dengan pypi, sertifikat penulisan ulang inspeksi SSL, ini melanggar keamanan pip yang terpasang untuk www.python.org. Pria di tengah adalah admin jaringan.

Jadi saya perlu menggunakan http biasa . Untuk melakukannya saya perlu mengganti proxy sistem dan juga pypi default:

bin/pip install --proxy=squidproxy:3128 -i http://www.python.org/pypi --upgrade "SQLAlchemy>=0.7.10"
bbaassssiiee
sumber
2
Ini tidak berfungsi lagi. PyPi sekarang secara otomatis meneruskan Anda ke https.
Martin M.
Inspeksi SSL tampaknya tidak berfungsi; mungkinkah itu karena pinning kunci, atau meneruskan kerahasiaan?
bbaassssiiee
@SamuelHarmer. Securitymemiliki empat suku kata. Terlalu banyak untuk Trump.
javadba
2
Saya pikir @bbaassssiiee mungkin mengatakan bahwa pipnya putus (pada 2013) dengan HTTPS karena proxy korporatnya menulis ulang semua sertifikat untuk menggunakan sertifikat root mereka sendiri (sehingga mereka dapat mendekripsi semua lalu lintas SSL) dan pip gagal verifikasi sertifikat. Tentu saja pada tahun 2017, pip secara otomatis menghindari pemeriksaan sertifikat ketika --proxy digunakan. Banyak proxy perusahaan sudah secara efektif mengubah semua lalu lintas Anda menjadi non-SSL karena meskipun ketika menavigasi ke situs SSL, Anda melakukan proxy melalui proxy HTTP non-SSL.
cowbert
13

Buka prompt perintah Windows.

Setel variabel lingkungan proxy.

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

Instal paket Python menggunakan proksi di prompt perintah Windows yang sama.

pip install --proxy="user:password@proxy_ip:port" package_name
Jyoti Yadav
sumber
12

Di Windows 7:

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

yaitu:

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

Telepon sebagai hotspot seluler / penambatan USB

Jika saya memiliki banyak kesulitan menemukan jalan melalui proxy perusahaan, saya terhubung ke web melalui telepon saya (hotspot nirkabel jika saya memiliki wifi, USB tether jika tidak) dan melakukan yang cepat pip install.

Mungkin tidak berfungsi untuk semua pengaturan, tetapi harus membuat sebagian besar orang dalam keadaan darurat.

Tommy O'Dell
sumber
8

Di Ubuntu 14,04 LTS

   sudo pip --proxy http://PROXYDOM:PROXYPORT install package

Bersulang

Rene Cejas Bolecek
sumber
7

Saya memiliki masalah yang sama: di belakang proksi perusahaan dengan auth di tempat kerja, saya tidak bisa memiliki pekerjaan pip, serta Sublime Text 2 (well, ini bekerja dengan pengaturan kustom pengaturan proxy saya). Untuk pip (dan saya akan mencobanya di git), saya menyelesaikannya dengan menginstal cntlm proxy. Sangat mudah untuk mengkonfigurasi:

  1. Edit cntlm.ini
  2. Edit bidang "Nama Pengguna", "Domain", "Kata Sandi"
  3. Tambahkan baris "Proxy", dengan pengaturan proxy Anda: server:port
  4. Pastikan baris "NoProxy" mengintegrasikan "localhost" (seperti itu secara default)
  5. Perhatikan port default: 3128
  6. Simpan dan hanya itu.

Untuk menguji itu berhasil, cukup luncurkan alat baris perintah baru, dan coba:

pip install django --proxy=localhost:3128

Itu berhasil bagi saya. Semoga ini bisa membantu Anda.

Johan Chouquet
sumber
6

Saya bisa mencapai ini dengan menjalankan:

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

Saya menggunakan Python 3.7.3 di dalam proxy korporatif.

Nicolas Castro
sumber
5

jika Anda ingin memutakhirkan pip dengan proxy, dapat menggunakan (misalnya di Windows):

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

Untuk pengguna windows: jika Anda ingin menginstal Flask-MongoAlchemy kemudian gunakan kode berikut

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

Jika Anda terhubung ke internet di belakang proxy, mungkin ada masalah dalam menjalankan beberapa perintah.

Atur variabel lingkungan untuk konfigurasi proxy di prompt perintah sebagai berikut:

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

Di CentOS (sebenarnya saya pikir semua distro linux serupa) dijalankan

env|grep http_proxy

dan

env|grep https_proxy

periksa apa output dari perintah-perintah itu (harus berisi alamat proxy Anda).

Jika output kosong atau memiliki nilai yang salah, modifikasi, misalnya:

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

Sekarang cobalah untuk mengambil dan menginstal beberapa paket dengan menggunakan pip:

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

dan sebenarnya saya belum pernah bertemu case ketika itu tidak berhasil. Untuk beberapa sistem, Anda harus menjadi root (sudo tidak cukup).

Paweł Wojtal
sumber
2

Peringatan, ada sesuatu yang sangat buruk dengan perintah "pencarian pip". Perintah pencarian tidak menggunakan pengaturan proxy terlepas dari cara itu dilewatkan.

Saya mencoba mencari masalah hanya dengan mencoba perintah "pencarian", dan menemukan posting ini dengan penjelasan terperinci tentang bug itu: https://github.com/pypa/pip/issues/1104

Saya dapat mengkonfirmasi bug tetap dengan pip 1.5.6 pada Debian 8 dengan python 2.7.9. Perintah "pip install" bekerja seperti mantra.

Pivert
sumber
2

Saya mendapat kesalahan:

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

(Port server proxy adalah port ssh diteruskan ke localhost:3128 ).

Saya harus menyetel proksi http dan https agar berfungsi:

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

sebagai http://pypi.python.org/simple/pengalihan ke https://pypi.python.org/simpletetapi pipkesalahan tidak memberi tahu Anda.

fadedbee
sumber
2

Saya juga bukan ahli dalam hal ini tetapi saya membuatnya bekerja dengan mengatur all_proxyvariabel dalam file ~ / .bashrc. Untuk membuka ~/.bashrcfile dan mengeditnya dari terminal jalankan perintah berikut,

gedit ~/.bashrc &

Tambahkan berikut di akhir file,

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

Kemudian buka terminal baru atau jalankan mengikuti di terminal yang sama,

source ~/.bashrc

Pengaturan http_proxydan https_proxyvariabel saja tidak cukup untuk penggunaan sederhana pip install somepackage. Meskipun entah bagaimana sudo -E pip install somepackageberfungsi, tetapi ini telah memberi saya beberapa masalah jika saya menggunakan instalasi lokal Anaconda di folder pengguna saya.

PS - Saya menggunakan Ubuntu 16.04.

bytestorm
sumber
2

Bagaimana kalau hanya melakukannya secara lokal? Kemungkinan besar Anda dapat mengunduh dari sumber https melalui browser Anda

  1. Unduh file modul Anda (mysql-connector-python-2.0.3.zip / gz ... dll).
  2. Ekstrak dan buka dir ekstrak di mana setup.py berada dan panggil:

    C:\mysql-connector-python-2.0.3>python.exe setup.py install
Kirimkan
sumber
6
Tetapi kemudian Anda harus pergi dan mendapatkan semua dependensi (dan dependensinya, dan ...) sendiri
jonrsharpe
1

Inilah yang bekerja untuk saya:

pip --proxy proxy url:port command package
Brock Vond
sumber
1

Tetapkan variabel lingkungan berikut: export PIP_PROXY=http://web-proxy.mydomain.com

FTM
sumber
1

Jika Anda menggunakan Linux, sebagai root:

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

Ketika Anda menggunakan env, ia mengekspor variabel https_proxy untuk pelaksanaan perintah install pip saat ini.

$ web_proxy_ip adalah nama host atau IP Proxy Anda $ web_proxy_port adalah Port

Adail Junior
sumber
0

untuk windows buka C: /ProgramData/pip/pip.ini, dan atur

[global]

proxy = http: // YouKnowTheRest

dengan detail proxy Anda. Ini secara permanen mengkonfigurasi proksi untuk pip.

Kvothan
sumber
0

Pendekatan yang lebih sederhana mungkin:

  1. Buat folder bernama "pip" di $HOMEdirektori Anda .
  2. Buat file bernama "pip.ini" (Windows) atau "pip.conf" (Linux) di direktori yang dibuat pada langkah 1
  3. Salin & rekatkan baris berikut di bawah pip.ini / pip.conf:

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org 
Jayant Kumar
sumber