نصب نشدن پکیج ها با استفاده از pip


#1

دوستان عزیز سلام
وقتی می خوام با pip یه بسته رو نصب کنم خطاهای زیر رو می بینم:
من ورژن پیش فرض python ترمینال رو به 3 تغییر دادم.
نه می تونم pip رو update یا upgrade کنم نه میشه باهاش پکیجی رو نصب کنم. کد خطاها رو توی stackoverflow, askubuntu سرچ کردم هرکس یه چیزی گفته بود و نتیجه ای نگرفتم.
هم با pip هم pip3 هم با sudo هم بی sudo زدم! نتیجه همینه…
نیازمند یاری شما هستیم :slight_smile:
با تشکر

Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
    finder, self.upgrade, require_hashes)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages
    page = self._get_page(location)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 597, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 195, in resolve_redirects
    **adapter_kwargs
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
    timeout=timeout
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

یا چیزهایی شبیه این:

Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
    finder, self.upgrade, require_hashes)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages
    page = self._get_page(location)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 597, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 195, in resolve_redirects
    **adapter_kwargs
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
    timeout=timeout
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'‍‍
‍‍‍```

#2

خوب نباید اینکارو میکردید.
نباید پیشفرض سیستم رو از python2 به python3 تغییر بدید. اینکار ممکنه یه سری نرم‌افزارها رو به مشکل بندازه. برگردونیدش به حالت پیشفرض سیستم.

اینطور که مشخصه، از vitualenv استفاده نمیکنید. اگه از virtualenv استفاده بشه احتمالا مشکل حل بشه و نیاز به تغییر دیگه‌ای نباشه.

همیشه هرکاری که میخواید انجام بدید، باید داخل virtualenv باشه. اینطوری پکیجها با هم قاطی نمیشن و ورژنها به هم نمیریزه.
برای هر پروژه یه virtualenv بسازید:

sudo pip3 install virtualenv
virtualenv venv

خط اول برای نصب virtualenv و خط دوم برای ساختن یه virtualenv به نام venv (یه دایرکتوری میسازه به نام venv)
بعد واردش بشید:

. venv/bin/activate

یا:

source venv/bin/activate

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

زمانی هم که خواستید کدتون رو به یه نفر دیگه بدید (یا روی یه سرور گیت بذارید یا روی یه سرور deploy کنید) برای اینکه یه لیست از لایبرریها و ورژنهاشون به طرف بدید، این دستور رو بزنید:

pip freeze > requirements.txt

تا لیست لایبرریهایی که روی اون venv نصب شده، ریخته بشه توی یه فایل به نام requirements.txt و بعدا با این دستور قابل نصب باشه:

pip install -r requirements.txt

#3

پویا جان عزیز سلام
خیلی ممنون به خاطر پاسختون…
مطابق فرمایشاتتون عمل کردم باز هم همین کدهای خطا ظاهر شد.
من یه کار خیلی مسخره هم انجام دادم و اون نصب مجدد توزیعی بود که ازش استفاده می کنم! چون واقعا هر کاری که میشد انجام دادم ولی این راه هم جواب نداد!
مسئله اینه که من با pip هیچ پکیجی رو نمی تونم نصب کنم.
قبلا روی اوبونتو با pip کار کردم… تنها احتمالی که دادم مشکل از توزیعی باشه که ازش استفاده می کنم!
واقعا ممنونم…


#4

خوب ربطی به توضیع نداره و خوب هر مشکلی هم که داشته باشه میشه حلش کرد (هیچوقت لازم نیست توضیع دوباره نصب بشه، مگر اینکه بلد نباشیم چطوری درستش کنیم)

شاید اگه pip رو پاک و مجددا نصب کنید درست بشه. شاید الآن (مثلا) pip3 داره با python2 کار میکنه یا برعکس. (وقتی به طور دستی نسخه‌ی پایتون پیشفرض سیستم عوض بشه امکانش هست این اتفاقها بیفته)
الآن که فکر میکنم یه سری اتفاقهای دیگه هم میتونه باعث خراب شدن سیستمهای این مدلی بشه. اونهم اینه که /tmp پر شده باشه :smiley: خیلی مسخرست ولی یه وقتایی همین چندساعت منو درگیر کرده :smiley:

پاک کردن کش و نصب مجدد پکیج هم میتونه کمک کنه:

rm -r ~/.cache/pip

چیز دیگه‌ای به ذهنم نمیرسه.


#5

احتمالا باید از pip3 و با فرمان sudo استفاده کنی، به اضافه مواردی که @pouya-abbassi عزیز گفتند


#6

بله اینو یادم نبود.
بعضیوقتا pip2 یا pip3 باید بنویسیم برای مشخص کردن ورژن پیپ.

اگه کامند which pip رو داخل ترمینال بنویسید، بهتون میگه که مسیر نصبش کجاست و با یه ls گرفتن مشخص میشه چی نصبه اونجا:

─$ which pip
/usr/bin/pip
─$ ls -lha /usr/bin/pip*
-rwxr-xr-x 1 root root 364 Mar 29 08:39 /usr/bin/pip
-rwxr-xr-x 1 root root 366 Mar 29 08:39 /usr/bin/pip3
-rwxr-xr-x 1 root root 370 Mar 29 08:39 /usr/bin/pip3.7
-rwxr-xr-x 1 root root 14K Jan  9 00:31 /usr/bin/pipewire
-rwxr-xr-x 1 root root 46K Jan  9 00:31 /usr/bin/pipewire-cli
-rwxr-xr-x 1 root root 34K Jan  9 00:31 /usr/bin/pipewire-monitor

البته من اصلا pip2 ندارم روی این سیستم و pip دقیقا همون pip3 هست و جفتشون دقیقا همون pip3.7 هستن :smiley: ولی نتیجه‌ی شما ممکنه متفاوت باشه.
با این کامند هم میتونید اطلاعات بیشتر درمورد ورژن pip به دست بیارید:

─$ pip --version
pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

(این نتایج روی سیستم ArchLinux هستن و ممکنه با ورژنهای شما فرق داشته باشن)


#7

یه سوال:
آیا python-setuptools نصبه؟

ممکنه اسم این پکیج توی سیستم عامل شما یه چیز دیگه باشه.
ممکنه اسمهایی مثل python2-setuptools و python3-setuptools باشه. ولی فکر نمیکنم چیزی غیر از این باشه.


#8

از روبی استفاده کن :hugs:


#9

@toomaj, @pouya-abbassi
از پاسخگویی و محبتتون سپاس گزارم…
بلاخره موفق شدم مشکل رو حل کنم… محدودیت ها مربوط به توزیعی بود که استفاده می کردم… متشکرم…


#10

خوب نباید اینطوری حل میشد (توضیع نمیتونه مشکل داشته باشه، شاید پکیجی که پکیج-منیجر نصب میکرد مشکل داشت) ولی به هر حال خوبه که حل شد.