ماژولها و پکیجها
pip freeze و requirements.txt: بازسازی محیط پایتون
در درس ماژول و پکیج دیدیم که میشود توابع خودمان را در یک فایل .py بگذاریم و import کنیم. دیگران هم دقیقاً همین کار را میکنند؛ با این تفاوت که کدشان را روی PyPI میگذارند تا همه بتوانند با pip install نصبش کنند.
کتابخانهٔ نصبشده کجاست؟
ماژول شخصیمان باید کنار فایل یا نوتبوکمان میبود. ولی وقتی یک پکیج را با pip نصب میکنید، فایلش کنار شما نیست:
pip install numpy
pip یک بار به اینترنت وصل میشود، پکیج را میگیرد و داخل پوشهٔ خود پایتون میگذارد. از آن به بعد، در هر پوشه و هر پروژهای، import کار میکند:
import numpy as np
a = np.array([12, 6, 7])
print(a * 3)
[36 18 21]
دقت کنید a * 3 روی تکتک خانهها ضرب شد — کاری که با لیست معمولی نمیشود. (NumPy موضوع درسهای جداگانهای است؛ اینجا فقط میخواستیم ببینیم یک کتابخانهٔ نصبشده چطور استفاده میشود.)
💡 الگوی
import numpy as npهمانimport ... asدرس قبل است. در دنیای پایتون این نامهای کوتاه قراردادیاند:npبرای NumPy،pdبرای Pandas،stبرای Streamlit.
pip freeze: چه چیزهایی نصب است؟
pip freeze
فهرست همهٔ پکیجهای نصبشده را با شمارهٔ نسخهٔ دقیقشان میدهد:
numpy==2.5.4
pandas==3.0.6
requests==2.34.2
streamlit==1.66.0
(شمارهها روی سیستم شما احتمالاً فرق میکند؛ هر پکیج مدام نسخهٔ تازه میدهد.)
همین دستور سادهترین راه چککردن یک نصب است: بعد از pip install streamlit، اگر اسمش در خروجی pip freeze بود، نصب موفق بوده.
💡
pip listهم تقریباً همین کار را میکند، ولی خروجیاش جدول خوشفرم برای خواندن است. خروجیpip freezeبرای ماشین است: دقیقاً همان قالبی که pip برای نصب میفهمد.
ریختن فهرست در فایل
حالا نکتهٔ اصلی. خروجی را میتوانیم با > در یک فایل بریزیم:
pip freeze > requirements.txt
علامت > مال ترمینال است، نه پایتون: «خروجی این دستور را بهجای صفحه، در این فایل بنویس». فایل در پوشهٔ فعلی ساخته میشود و محتوایش همان فهرست package==version است.
اسم requirements.txt یک قرارداد است، نه اجبار؛ ولی همه از همین اسم استفاده میکنند، پس هر برنامهنویسی که پروژهٔ شما را ببیند میفهمد این فایل چیست.
نصب دستهجمعی با یک دستور
روی کامپیوتر دیگر (یا سرور، یا وقتی ویندوز را عوض کردهاید)، بهجای نصب تکتک پکیجها:
pip install -r requirements.txt
-r یعنی «فهرست را از این فایل بخوان». pip خطبهخط میرود و همه را با همان نسخهها نصب میکند.
این الگو — یک فایل requirements.txt کنار کد، که در گیت هم ذخیره میشود — استاندارد کار تیمی و استقرار روی سرور است. کسی که پروژه را میگیرد لازم نیست حدس بزند چه چیزهایی باید نصب کند.
⚠️
pip freezeهمهٔ پکیجهای آن پایتون را میدهد، نه فقط آنهایی که این پروژه لازم دارد. اگر همهچیز را در یک پایتون مشترک نصب کرده باشید، فایلتان شلوغ میشود. راهحل درستش محیط مجازی (virtual environment) است: برای هر پروژه یک پایتون جدا. فعلاً همینقدر بدانید که چنین چیزی هست.
خلاصه
| دستور | کار |
|---|---|
pip install X |
نصب پکیج X از PyPI |
pip freeze |
فهرست پکیجهای نصبشده با نسخه |
pip freeze > requirements.txt |
ریختن همان فهرست در فایل |
pip install -r requirements.txt |
نصب همهٔ پکیجهای فهرست |
تمرین
در ترمینال pip freeze بزنید و ببینید چند پکیج روی سیستمتان نصب است. بعد خروجی را در فایلی به اسم requirements.txt بریزید و فایل را با یک ویرایشگر متن باز کنید. آیا pip و setuptools هم در فهرست هستند؟
جواب
pip freeze
pip freeze > requirements.txt
خود pip هیچوقت در خروجی pip freeze نیست، چون ابزار خود محیط پایتون است، نه وابستگی پروژهٔ شما. setuptools بستگی به نسخهٔ پایتون دارد: تا پایتون 3.11 مخفی میشود؛ از 3.12 به بعد اگر نصب باشد در فهرست میآید (هرچند در نصبهای تازهٔ 3.12 به بعد معمولاً اصلاً نصب نیست). اگر بخواهید همهچیز را ببینید:
pip list
یک نکتهٔ کوچک هم: فهرستی که میگیرید معمولاً بلندتر از چیزی است که انتظار دارید. دلیلش این است که هر پکیجی خودش به پکیجهای دیگری وابسته است و pip آنها را هم نصب کرده است. مثلاً با نصب Streamlit، چیزهایی مثل altair، pillow و tornado هم میآیند.