وقتی اسکریپت تأمین‌کننده‌ای موجود باید 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 جلوگیری می‌شود.

هر آرگومان یک عنصر جداگانه در فهرست را اشغال می‌کند. به هیچ shell نیازی نیست و نشانی پروکسی به یک جفت نقل‌قول shell جاسازی‌شده اضافی نیاز ندارد. check=True در صورت شکست نصب CalledProcessError را مطرح می‌کند و به گردش‌کار تأمین اجازه می‌دهد آن شکست را مدیریت کند.

مسیر بارگیری را روی این فراخوانی pip یا در محیط subprocess آن پیکربندی کنید. نشست Requests که در جای دیگری از برنامه والد پیکربندی شده است، فرایند جداگانه pip را پیکربندی نمی‌کند.

پس از نصب، چرخه عمر عادی محیط برنامه را ادامه دهید. نصب در مفسری که از قبل در حال اجراست تضمین نمی‌کند که واردات‌ها، حافظه‌های نهان یا مسیرهای کنونی آن فوراً بسته جدید را بازتاب دهند.

مقالات مرتبط