เมื่อสคริปต์การจัดเตรียมที่มีอยู่ต้องรัน pip ผ่านพร็อกซี ให้เริ่ม pip เป็น subprocess ฟังก์ชัน Python ภายในของ pip ไม่ใช่ API ของแอปพลิเคชันที่รองรับ

import subprocess
import sys

subprocess.run([
    sys.executable,
    '-m', 'pip', 'install',
    '--proxy', 'http://proxy.example:8080',
    'example-package',
], check=True)

ใช้แพ็กเกจและปลายทางพร็อกซีที่ตั้งใจไว้ สำหรับการดาวน์โหลดแพ็กเกจสาธารณะที่อนุญาตผ่านตัวกลางสาธารณะ รายการพร็อกซี HTTP มีผู้สมัครสำหรับอาร์กิวเมนต์พร็อกซี HTTP sys.executable เลือกตัวแปลภาษา Python ที่รันสคริปต์ จึงหลีกเลี่ยงการเรียก pip ของการติดตั้งอื่นจาก PATH โดยไม่ตั้งใจ

แต่ละอาร์กิวเมนต์อยู่ในองค์ประกอบรายการแยกกัน ไม่ต้องใช้เชลล์ และ URL ของพร็อกซีไม่ต้องใช้เครื่องหมายคำพูดของเชลล์ที่ฝังเพิ่มอีกคู่ check=True จะโยน CalledProcessError หากการติดตั้งล้มเหลว ทำให้เวิร์กโฟลว์การจัดเตรียมจัดการความล้มเหลวนั้นได้

กำหนดเส้นทางการดาวน์โหลดในการเรียก pip นี้หรือในสภาพแวดล้อม subprocess ของมัน เซสชัน Requests ที่กำหนดค่าไว้ที่อื่นในโปรแกรมหลักไม่ได้กำหนดค่ากระบวนการ pip แยกต่างหาก

หลังการติดตั้ง ให้ดำเนินวงจรชีวิตสภาพแวดล้อมปกติของแอปพลิเคชันต่อ การติดตั้งลงในตัวแปลภาษาที่กำลังทำงานอยู่ไม่รับประกันว่าการนำเข้า แคช หรือเส้นทางปัจจุบันจะสะท้อนแพ็กเกจใหม่ทันที

บทความที่เกี่ยวข้อง