Cara menggunakan pip di windows di belakang proxy yang mengautentikasi

90

Komputer saya menjalankan windows di belakang proxy di server windows (menggunakan direktori aktif), dan saya tidak tahu cara melewatinya dengan pip(di python3). Saya sudah mencoba menggunakan --proxy, tetapi masih hanya batas waktu. Saya juga mencoba menyetel waktu tunggu yang lama (60-an), tetapi tidak ada bedanya. Pengaturan proxy saya benar, dan saya membandingkannya dengan yang berhasil saya gunakan di TortoiseHG untuk memastikannya.

Apakah ada trik lain yang diketahui siapa pun yang dapat saya coba, atau adakah batasan pipterkait dengan proxy windows?

Pembaruan: Upaya saya yang gagal melibatkan pencarian pypi. Saya baru saja mencoba menginstal sesuatu dan berhasil. Pencarian masih gagal. Apakah ini menunjukkan adanya bug pipatau apakah cara kerjanya berbeda?

aquavitae
sumber

Jawaban:

107

Saya telah mencoba 2 opsi yang keduanya berfungsi pada proxy terautentikasi NTLM perusahaan saya. Opsi 1 adalah menggunakan--proxy http://user:pass@proxyAddress:proxyPort

Jika Anda masih mengalami masalah, saya sarankan menginstal layanan otentikasi proxy (saya menggunakan CNTLM ) dan menunjuk pip padanya yaitu sesuatu seperti--proxy http://localhost:3128

Russell
sumber
1
Alat CNTLM dipelihara secara aktif dan tampaknya bekerja dengan sangat baik.
Michał Fita
6
Saya tidak bisa membuatnya bekerja tidak peduli semua tentatif yang saya lakukan
eusoubrasileiro
2
Jika Anda memiliki karakter khusus dalam kata sandi atau nama pengguna Anda, lepaskan saja dengan \ sebelum karakter khusus. Ini bekerja dengan baik.
Arockia
apakah saya memahami ini dengan benar bahwa Anda memberi tahu pip untuk mengirim permintaan ke proxy, mengautentikasi dirinya sendiri dengan pengguna dan kata sandi yang diberikan melalui koneksi http? Itu berarti kata sandi Anda akan dikirim tanpa enkripsi ke server proxy, bukan !? Sepertinya risiko keamanan besar bagi saya atau saya melewatkan sesuatu?
Robert
Ini bekerja untuk saya dengan firewall Microsoft Forefront
Raúl Salinas-Monteagudo
65

Butuh beberapa jam bagi saya untuk mengetahuinya, tetapi saya akhirnya berhasil menggunakan CNTLM dan setelah itu membuatnya berfungsi hanya dengan file konfigurasi pip. Berikut adalah cara saya membuatnya berfungsi dengan file konfigurasi pip ...

Larutan:

1. Di Windows, navigasikan ke direktori profil pengguna Anda (Mis. C: \ Users \ Sync) dan buat folder bernama " pip "

2. Buat file bernama " pip.ini " di direktori ini (Mis. C: \ Users \ Sync \ pip \ pip.ini) dan masukkan berikut ini ke dalamnya:

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

Ganti [nama domain] , [nama pengguna] , [sandi] , [alamat proxy] dan [port proxy] dengan informasi Anda sendiri.

Perhatikan, jika [nama domain] , [nama pengguna], atau [sandi] Anda memiliki karakter khusus, Anda harus encode-persen | menyandi .

3. Pada titik ini saya dapat menjalankan " pip install " tanpa masalah.

Semoga ini berhasil juga untuk orang lain!

NB: Ini dapat menimbulkan masalah keamanan karena kata sandi Anda disimpan dalam teks biasa. Jika ini adalah masalah, pertimbangkan untuk menyiapkan CNTLM menggunakan artikel ini (izinkan penggunaan sandi berciri alih-alih teks biasa). Setelah itu atur proxy = 127.0.0.1:3128di file "pip.ini" yang disebutkan di atas.

Sinkronisasi
sumber
2
Lebih lanjut tentang lokasi pip.ini dapat ditemukan di sini . Anda dapat mengatur PIP_CONFIG_FILEvariabel lingkungan untuk diarahkan ke file
pip.ini
1
Suka!!!! sangat bersih - ingat saja kebanyakan proxy akan membiarkan Anda memasukkan kata sandi secara manual. JANGAN PERNAH meninggalkan kata sandi Anda dalam teks bebas!
avgvstvs
1
Pengaturan global lain yang sangat penting dapat ditambahkan di sini adalah situs cermin, misalnya, menambahkan "index-url = pypi.tuna.tsinghua.edu.cn/simple " akan meningkatkan kecepatan unduh pip di RRC China. Dan file yang sesuai di Linux adalah ~ / .pip / pip.conf
TingQian LI
4
apa itu [nama domain]?
Alex B
1
@AlexB, [nama domain] mengacu pada nama domain windows Anda
Mike Pennington
45

Beginilah cara saya mengaturnya:

  1. Buka command prompt (CMD) sebagai administrator.
  2. Ekspor pengaturan proxy:

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

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

  3. Instal paket yang ingin Anda instal:

    pip install PackageName

Sebagai contoh:

Contoh

Heinrich Cloete
sumber
4
Ini jelas hal pertama yang harus dicoba. Python adalah lintas platform, dan ini setara dengan yang biasanya kami lakukan di Linux. Memiliki masalah pada Windows (di belakang proxy yang sama) di mana --proxyargumen tidak akan memilikinya sama sekali, tetapi pendekatan env var standar berfungsi pertama kali. Sebagai catatan, kami juga mengatur no_proxyuntuk menghindari permintaan internal lainnya yang mencoba keluar melalui proxy.
randomsock
tidak bekerja untuk saya di win10. menggunakan alat emulator konsol seperti cygwinatau cmderdan kemudian melakukannya dengan cara linux: export http_proxy=<proxy>dan export https_proxy=<proxy>kemudian hanya melakukanpip install <package>
bucky
Ini berhasil untuk saya, tetapi --proxybendera baris perintah tidak pernah berhasil. Windows 10.
AmbroseChapel
15

Saya mengalami masalah yang sama di windows 7. Saya berhasil membuatnya bekerja dengan membuat folder "pip" dengan file "pip.ini" di dalamnya. Saya meletakkan folder ini di dalam "C: \ Users \ {my.username} \ AppData \ Roaming", karena menurut dokumentasi Python:

Di Windows, file konfigurasinya adalah% APPDATA% \ pip \ pip.ini

Dalam file pip.ini saya hanya memiliki:

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

Jadi tidak ada username: password. Dan itu bekerja dengan baik.

stann1
sumber
1
Dalam kasus saya ini hanya berfungsi jika saya memasukkan nama pengguna dan kata sandi saya dalam teks bebas di file ini ...: / Mengapa semua hal lain dari CMD bekerja seperti "ping XYZ". Mengapa pip tidak menggunakan pengaturan IE?
hmrc87
7

Saya mengalami masalah serupa, dan menemukan bahwa perusahaan saya menggunakan otentikasi proxy NTLM. Jika Anda melihat kesalahan ini di pip.log Anda, mungkin inilah masalahnya:

Tidak dapat mengambil URL http://pypi.python.org/simple/pyreadline : HTTP Error 407: Proxy Authentication Required (Server ISA membutuhkan otorisasi untuk memenuhi permintaan. Akses ke filter Web Proxy ditolak.)

NTLMaps dapat digunakan untuk berinteraksi dengan server proxy NTLM dengan menjadi proxy perantara.

Unduh NTLMAP, perbarui server.cfg yang disertakan, jalankan file main.py, lalu arahkan pengaturan proxy pip ke 127.0.0.1 :.

Saya juga perlu mengubah nilai default ini di server.cfgfile menjadi:

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/

monkut
sumber
1

Anda juga mungkin mengalami masalah dengan sertifikat dari proxy Anda. Ada banyak jawaban di sini tentang cara mendapatkan kembali sertifikat proxy Anda.

Di host Windows, untuk mengizinkan pip menghapus proxy Anda, Anda mungkin ingin menyetel variabel lingkungan seperti:

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

Anda juga bisa menggunakan --certargumen to PIPdengan hasil yang sama.

cincypiper
sumber
1

Saya memiliki masalah yang sama di lingkungan windows jarak jauh. Saya mencoba banyak solusi yang ditemukan di sini atau di posting serupa lainnya tetapi tidak ada yang berhasil. Akhirnya, solusinya cukup sederhana. Saya harus mengatur NO_PROXYdengan cmd:

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

Anda harus menggunakan tanda kutip ganda dan menggunakan NO_PROXYhuruf besar. Anda juga bisa menambahkanNO_PROXY sebagai variabel lingkungan alih-alih menyetelnya setiap kali Anda menggunakan konsol.

Saya harap ini akan membantu jika ada solusi lain yang diposting di sini berfungsi.

Wanderer yang Terhubung
sumber
1

instal cntlm: Cntlm: Proxy Otentikasi NTLM Cepat di C

Konfigurasi cntlm.ini:

Nama pengguna ob66759

Domain NAM

Rahasia sandi

Proxy proxy1.net:8080

Proxy proxy2.net:8080

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

Dengarkan 3128

Izinkan 127.0.0.1

# IP Anda

Izinkan 10.106.18.138

mulai itu:

cntlm -v -c cntlm.ini

Sekarang di 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

berhasil!

Anda juga dapat menyembunyikan kata sandi: https://stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/

Alex B
sumber
1

masalah yang sama pada windows10 dan solusi di atas tidak berfungsi untuk saya.

gunakan alat konsol emulator seperti cygwindan kemudian lakukan dengan cara linux default:

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

dan semuanya bekerja dengan baik.

bucky
sumber
di bawah Windows 10, dengan mengautentikasi proxy, ini berfungsi untuk saya: menggunakan cntlm sebagai proxy perantara, lalu pada prompt msdos: "setel https_proxy = localhost: 3128" dan kemudian "pip install -U setuptools == 41.0.1"
mrtexaz