pip چیست؟ معرفی برای پایتونی‌های جوان

June 2020

ویدیویی وجود ندارد

 

pip چیست؟ pip مدیر بسته های استاندارد برای پایتون است. این امکان را به شما می دهد تا بسته های دیگری را که جزئی از کتابخانه استاندارد Python نیستند را نصب و مدیریت کنید. این آموزش مقدماتی pip برای برنامه‌نویسان جوان پایتون است.

 

مدیریت بسته بندی از اهمیت بسیار بالایی برخوردار است که پیپ از نسخه های 3.4 برای پایتون 3 و 2.7.9 برای پایتون 2 با نصب پایتون گنجانده شده است ، و در بسیاری از پروژه های پایتون مورد استفاده قرار می گیرد ، و این باعث می شود آن را به ابزاری اساسی برای هر برنامه‌نویسان پایتون تبدیل کند.

 

اگر شما با زبانهای دیگر آشنا باشید، مفهوم مدیر بسته ممکن است برای شما آشنا باشد. javascript از مدیربسته npm و ruby از gem و .NET از NuGet به استفاده میکنند. در پایتون، pip به مدیر بسته استاندارد تبدیل شده است. pip همراه پایتون به صورت اتوماتیک نصب خواهد شد مگر اینکه از نسخه‌های قدیمی پایتون استفاده کنید. با اجرای دستور زیر در کنسول می توانید تأیید کنید که pip در دسترس است:

$ pip --version

pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)

شما باید خروجی مشابهی را مشاهده کنید که نسخه pip را نشان می دهد ، همچنین مکان و نسخه پایتون را نشان می دهد.

 

اگر از سیستم عامل بدلیل اینکه هر دو نسخه 2 و 3 پایتون نصب هستند برای نصب pip برای پایتون 3 از دستور زیر استفاده کنید:

$ sudo apt install python3-pip

پس از نصب میتوانید با دستور زیر از نصب شدن pip3 اطمینان حاصل کنید:

$ pip3 --version

pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

 

پایتون به عنوان زبانی شناخته میشود که تمام ابزارهای مورد نیاز برنامه نویس را در خود دارد(batteries included). این بدان معنی است که کتابخانه استاندارد Python شامل مجموعه گسترده ای از بسته ها و ماژول ها برای کمک به توسعه دهندگان در اسکریپت ها و برنامه های خود است. در عین حال ، پایتون دارای یک جامعه بسیار فعال است که مجموعه ای حتی بزرگتر از کتابخانه استاندارد پایتون را ایجاد کرده‌اند که در نیازهای توسعه شما کمک خواهند کرد. این بسته ها در فهرست بسته های پایتون منتشر می شوند که همچنین به عنوان PyPI نیز شناخته می شوند. PyPI میزبان مجموعه گسترده ای از بسته ها است که شامل چارچوب های توسعه ، ابزار و کتابخانه ها است.

 

نصب و راه اندازی بسته اصلی

PyPI میزبان یک کتابخانه بسیار محبوب برای انجام درخواست های HTTP به نام requests است که میخواهیم امروز آن را نصب کنیم. با استفاده از help میتوانید به دستوراتی که pip دارد دسترسی داشته باشید:

$ pip help

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible 
                              dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment 
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be 
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be 
                              used up to 3 times (corresponding to WARNING, 
                              ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form 
                              [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should 
                              attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: 
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host <hostname>   Mark this host as trusted, even though it does 
                              not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file 
                              containing the private key and the certificate in 
                              PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine 
                              whether a new version of pip is available for 
                              download. Implied with --no-index.

 

همانطور که مشاهده می کنید، با دستور install میتوانید پکیج‌ها را نصب کنید. برای نصب بسته requests می توانید آن را اجرا کنید:

$ pip install requests

Looking in indexes: https://pypi.org/simple
Collecting requests
  Using cached 
  https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests)
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting urllib3<1.25,>=1.21.1 (from requests)
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: chardet, idna, urllib3, certifi, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8 
  requests-2.21.0 urllib3-1.24.1
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' 
  command.

باید خروجی شبیه به نمونه فوق را ببینید. شما از pip با دستور install استفاده می کنید و به دنبال آن نام بسته ای را که می خواهید نصب کنید.  pip به دنبال پکیج در PyPI می باشد ، وابستگی های آن را محاسبه می کند و آنها را نصب می کند تا از کارایی requests اطمینان حاصل کند.

همچنین می توانید ببینید که پایتون فعلی از pip نسخه 18.1 استفاده می کند ، اما نسخه 19.0.1 در دسترس است. همچنین دستوری را که باید برای به روزرسانی pip استفاده کنید نشان می دهد ، بنابراین اجازه دهید این کار را انجام دهیم:

$ python -m pip install --upgrade pip

Looking in indexes: https://pypi.org/simple
Collecting pip
  Downloading https://files.pythonhosted.org/packages/46/dc/
  7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/
  pip-19.0.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 2.0MB/s
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.0.1

توجه کنید که از Python -m برای به روزرسانی پیپ استفاده می کنید. سوئیچ -m به پایتون می گوید که ماژول را به عنوان اجرایی اجرا کنید. این امر ضروری است زیرا برای اینکه شما pip را به روز کنید ، باید نسخه قدیمی قبل از نصب نسخه جدید حذف شود و حذف آن هنگام اجرای ابزار می تواند باعث بروز خطا شود.

 

هنگامی که پیپ را به عنوان یک ماژول اجرا می کنید ، پایتون ماژول را در حافظه بار می گذارد و اجازه می دهد تا بسته در حین استفاده حذف شود.

 

اکنون که requests را نصب و pip را به روزرسانی نصب کرده اید ، می توانید از دستور list برای دیدن بسته های نصب شده در محیط خود استفاده کنید:

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

همانطور که مشاهده می کنید ، pip به نسخه 19.0.1 (آخرین نسخه در حال حاضر) به روز شده است ، و requests نسخه 2.21.0 نصب شده است. دستور< pip install <package_name همیشه به دنبال آخرین نسخه از بسته و نصب آن است. همچنین ، وابستگی های ذکر شده در metadata بسته را جستجو می کند و این وابستگی ها را نصب می کند تا مطمئن شود که بسته دارای کلیه موارد مورد نیاز خود است.

 

همانطور که مشاهده می کنید ، چندین بسته نصب شده است. با استفاده از دستور show در pip می توانید به metadata بسته نگاه کنید:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: py37\lib\site-packages
Requires: certifi, chardet, idna, urllib3
Required-by:

این metadataها certifi ، chardet ، idna و urllib3 را به عنوان وابستگی ذکر کرده و می بینید که آنها نیز نصب شده اند. شما می توانید بسته requests را مانند سایر بسته های استاندارد import کنید زیرا اکنون در محیط شما نصب شده است.

 

استفاده از فایل requirements

دستور pip install همیشه آخرین نسخه منتشر شده یک بسته را نصب می کند ، اما بعضی اوقات ممکن است بخواهید نسخه خاصی را نصب کنید که می دانید با کد شما سازگار است. شما می خواهید مشخصات وابستگی ها و نسخه هایی را که برای توسعه و آزمایش برنامه خود استفاده کرده اید ایجاد کنید ، بنابراین هنگام استفاده از برنامه در production ، هیچ گونه نگرانی نیست.

 

فایل requirements مورد نیاز به شما امکان می دهد دقیقاً مشخص کنید که چه بسته ها و نسخه هایی باید نصب شوند. در pip دستور freeze وجود دارد که میتواند تمام پکیج‌ها و وابستگی‌های آنها را در یک فایل ذخیره کند. با استفاده از این دستور می توانید خروجی را به یک فایل تغییر دهید تا یک فایل requirements تولید شود.

$ pip freeze > requirements.txt
$ cat requirements.txt

certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

دستور freeze تمام بسته ها و نسخه های آنها را به خروجی استاندارد تولید می کند ، بنابراین می توانید خروجی را به پرونده ای تغییر دهید که می تواند برای نصب دقیق مورد نیاز در سیستم دیگری استفاده کند. پیشنهاد میشود که نام این فایل را requirements.txt قرار دهید.

 

هنگامی که می خواهید پکیچ‌ها را در یک سیستم دیگر نصب کنید ، می توانید pip install را با مشخص کردن پرونده مورد نیاز با استفاده از سوئیچ -r اجرا کنید:

$ pip install -r requirements.txt

Looking in indexes: https://pypi.org/simple
Collecting certifi==2018.11.29 (from -r .\requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2))
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna==2.8 (from -r .\requirements.txt (line 3))
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting requests==2.21.0 (from -r .\requirements.txt (line 4))
  Using cached https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3==1.24.1 (from -r .\requirements.txt (line 5))
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8 
  requests-2.21.0 urllib3-1.24.1

نسخه های این بسته ها مطابق با لیست های ذکر شده در requirements.txt خواهد بود.

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

 

یافتن بسته هایی برای استفاده

با تبدیل شدن به یک Pythonista با تجربه تر ، مجموعه ای از بسته ها را خواهید دید که از روی قلب آنها می شناسید و در بیشتر برنامه های خود از آنها استفاده خواهید کرد. requests و pytest کاندیداهای خوبی برای تبدیل شدن به ابزارهای مفید در جعبه ابزار Python شما هستند. زمانهایی وجود خواهد داشت که شما نیاز به حل یک مشکل متفاوت دارید و می خواهید به دنبال یک ابزار یا کتابخانه دیگری باشید که بتواند به شما در حل آن کمک کند. همانطور که در بالا مشاهده می کنید ، pip help نشان می دهد که یک دستور search وجود دارد که به دنبال بسته های منتشر شده در PyPI است.

 

بیایید ببینیم چگونه این دستور می تواند به ما کمک کند:

$ pip help search

Usage:
  pip search [options] <query>

Description:
  Search for PyPI packages whose name or summary contains <query>.

Search Options:
  -i, --index <url>           Base URL of Python Package Index 
                              (default https://pypi.org/pypi)

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment 
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be 
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be 
                              used up to 3 times (corresponding to WARNING, 
                              ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form 
                              [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should 
                              attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: 
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host <hostname>   Mark this host as trusted, even though it does 
                              not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file 
                              containing the private key and the certificate in 
                              PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine 
                              whether a new version of pip is available for 
                              download. Implied with --no-index.
  --no-color                  Suppress colored output

همانطور که در بالا میبینید چند option و query را از شما میگیرد. query نام همان پیکیجی است که به دنبال آن هستید.

$ pip search requests oauth

requests-oauth (0.4.1)             - Hook for adding Open Authentication 
                                     support to Python-requests HTTP library.
oauth (1.0.1)                      - Library for OAuth version 1.0a.
pmr2.oauth (0.6.1)                 - OAuth PAS Plugin, OAuth 1.0 provider for 
                                     Plone.
oauth-proxy (1.0.5)                - OAuth HTTP proxy
django-oauth (1.1)                 - Support of OAuth in Django.
intuit-oauth (1.2.0)               - Intuit OAuth Client
brubeck-oauth (0.1.11)             - Brubeck OAuth module
guillotina-oauth (2.0.0)           - guillotina oauth support
httpie-oauth (1.0.2)               - OAuth plugin for HTTPie.
paytm-oauth (0.2)                  - Consumer for paytm oauth
plurk-oauth (0.9.2)                - Plurk OAuth API
oauth-flow (1.0.3)                 - Authenticate and make calls to OAuth 1.0, 
                                     OAuth 2.0 services
... Additional Output Omitted

همانطور که میبینید دستور search مجموعه کاملاً گسترده ای از بسته ها را ارائه می دهد. به نظر می رسد برخی از آنها برای سرویس یا فناوری مانند django-oauth خاص هستند. برخی دیگر مانند requests-oauth امیدوارکننده به نظر می رسند. متأسفانه ، جز توضیحات مختصر اطلاعات زیادی وجود ندارد.

 

حذف بسته‌ها

هر ازگاهی نیاز دارید که یک بسته را حذف کنید. شما یا کتابخانه ای بهتر برای جایگزین کردن آن پیدا کردید ، یا این چیزی است که شما واقعاً نیازی به آن ندارید. حذف بسته ها می تواند کمی مشکل باشد. توجه داشته باشید که ، هنگامی که requests را نصب کردید ، وابستگی های دیگر را نیز نصب کنید. هرچه بسته های بیشتری نصب کنید، احتمال اینکه چند پکیج به یک پکیج خاص نیاز داشته باشند زیاد است. اینجاست که دستور show در pip در دسترس است.

 

قبل از حذف یک بسته ، اطمینان حاصل کنید که دستور show را برای آن بسته اجرا کرده اید:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: c:\users\isaac\projects\virtualenv\py37\lib\site-packages
Requires: urllib3, certifi, chardet, idna
Required-by:

به دو قسمت آخر توجه داشته باشید: Requires و Required-by. دستور show به ما می گوید که requests به urllib3 ، certifi ، chardet و idna نیاز دارند. احتمالاً می خواهید آن دو را حذف کنید. همچنین می توانید مشاهده کنید که requests توسط هیچ بسته دیگری لازم نیست ، بنابراین از بین بردن آن بی خطر است. شما باید دستور show را در برای همه وابستگی های requests اجرا کنید تا مطمئن شوید که هیچ کتابخانه دیگری نیز به آنها وابسته نیست. پس از فهمیدن ترتیب وابستگی بسته هایی که می خواهید حذف آنها کنید ، می توانید با استفاده از دستور uninstall آنها را حذف کنید:

$ pip uninstall certifi

Uninstalling certifi-2018.11.29:
  Would remove:
    \py37\lib\site-packages\certifi-2018.11.29.dist-info\*
    \py37\lib\site-packages\certifi\*
Proceed (y/n)? y
  Successfully uninstalled certifi-2018.11.29

حذف یک بسته ، پرونده هایی را حذف می کند که تأیید می شوند. اگر مطمئن هستید که می خواهید بسته را حذف کنید و وابستگی های آن را بررسی کرده اید و می دانید که هیچ چیز دیگری از آن استفاده نمی کند ، می توانید با یک سوییچ y- مستقیما آن را حذف کنید.

$ pip uninstall urllib3 -y

Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

$ pip uninstall chardet -y

Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4

$ pip uninstall idna -y

Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8

$ pip uninstall requests -y

Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0

 

همچنین میتوانید تمام پکیج‌ها را یکجا حذف کنید:

pip uninstall -y urllib3 chardet idna requests

 

شما میتوانید تمام پکیج‌هایی که در فایل requirements.txt وجود دارد را یکباره حذف کنید. دقت کنید که برای هر پکیج از شما درخواست تایید خواسته میشود که با سوئیچ y- میتوانید آن را رد کنید:

$ pip uninstall -r requirements.txt -y

Uninstalling certifi-2018.11.29:
  Successfully uninstalled certifi-2018.11.29
Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4
Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8
Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0
Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

 

ارسال نظر

اگر قراره سوالی بپرسید که داخلش کد هست، بهتره از کدتون عکس بگیرید و به ایمیلی که پایین نوشتم بفرستید