Модули устанавливаются с помощью pip на OSX, но не обнаруживаются при импорте

Я успешно установил различные модули с помощью pip, и они показаны в

pip list

такие как:

beautifulsoup4 (4.4.1)
requests (2.10.0)
Scrapy (1.1.0)

Из терминала

Однако всякий раз, когда я пытаюсь импортировать его

import beautifulsoup4 / import bs4 или же import Scrapy или же import requests

отображается следующая ошибка:

$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests

Обновление: если я запускаю python, когда нахожусь в правильном каталоге site-packages

$ pwd
/usr/local/lib/python2.7/site-packages
$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
>>> import requests
>>> import bs4
>>> import scrapy

Тогда это работает. Это решит проблему, если писать прямо в Терминале. Тем не менее, я понятия не имею, как заставить его работать внутри файла file.py, который будет использоваться в обычном режиме.

Насколько я знаю, у меня установлен только Python2.7.

Из файла.py

Если у меня есть файл.py, сохраненный в какой-то локальной папке. Это содержит, например,

import requests
from bs4 import BeautifulSoup

когда я пытаюсь

python file.py

Я получаю ту же ошибку.

Подход

То же самое происходит с любым другим модулем из списка. Я бы подумал, что pip устанавливает их в каталог, который Python не читает, но, согласно тому, что я прочитал, он правильный.

Они все установлены здесь:

/usr/local/lib/python2.7/site-packages

Результат, запрошенный Padraic Cunningham:

$ which -a pip
/usr/local/bin/pip
$ which -a python
/usr/bin/python
/usr/local/bin/python

Вывод, запрошенный leovp:

$ pip -V
pip 8.1.2 from /usr/local/lib/python2.7/site-packages (python 2.7)

Темы уже проверены

Я проверил следующие темы, но, к сожалению, они не помогли мне решить проблему:

Есть идеи, в чем проблема?

9 ответов

Решение

Поскольку ваша проблема может быть вызвана различными причинами, я перечислил некоторые из них здесь:

Ссылка, которую вы искали: https://pythonhosted.org/setuptools/setuptools.html

  • Это также может произойти, если у вас установлены две версии python. Если pip у вас есть доступ к одной версии, а используемый интерпретатор python - другая.

Так что просто убедитесь, что вы используете одну и ту же версию python для установки и использования пакета.

Вы можете исправить это, используя псевдоним,

Сначала настройте псевдоним оболочки:

alias python=/usr/local/bin/python3

Затем введите это в командной строке или введите ~/.bashrc так что всякий раз, когда вы открываете python из терминала, открывается правильная версия.

  • Если оба вышеуказанных метода не работают для вас, проверьте это:

ImportError Нет названного модуля или это

Здесь ответ, который работал, что в основном то, что было объяснено в комментариях вопроса. Однако я подумал, что было бы полезно объяснить это как четкий и хорошо структурированный ответ.

Как было подчеркнуто, проблема заключалась в том, что я не использовал интерпретатор, для которого устанавливался pip. Команда which показывает, где pip устанавливал модули:

$ which -a pip
/usr/local/bin/pip

и где были расположены разные версии Python:

$ which -a python
/usr/bin/python
/usr/local/bin/python

То есть мой системный / стандартный Python был

/usr/bin/python

пока пип устанавливал для

/usr/local/bin/python

Поэтому я не мог импортировать что-либо, что я установил, когда я просто набрал python, поскольку /usr/bin/python переводчик был первым.

Решение

Установите pip еще раз, указав место назначения модулей, которые будут установлены. Это должен быть пункт назначения для системного / стандартного питона.

Это было сделано в два этапа:

  1. Downloding get-pip.py от http://bootstrap.pypa.io/get-pip.py
  2. Устанавливаем его с помощью следующей команды

    sudo /usr/bin/python get-pip.py

Обратите внимание, что без sudo Я получил ошибку и не смог установить pip.

Я только что исправил подобную проблему.

Чтобы дать немного фона, я устанавливаю pip с homebrew выполняя brew install python, Одним из недостатков этой команды будет установка как python2, так и python3(может быть, в некоторых случаях это не является недостатком), затем

pip install scrapy

но когда я пытаюсь import scrapyжаловался ImportError: No module named scrapy,


Мое решение: запустить brew doctor, он должен сообщить вам, что ссылка не работает, он просит вас запустить brew link python, вы можете столкнуться с некоторыми ошибками, но следуйте предложению, чтобы двигаться вперед после успешного выполнения brew link python, все должно работать сейчас.

Мне удалось решить эту проблему, запустив:

$ brew doctor 

и получил следующее:

Рассмотрите возможность установки вашего PATH так, чтобы /usr/local/bin происходит до /usr/bin.

Вот однострочный:

echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile

После запуска однострочника я смог получить доступ к установленному пакету из /usr/local/bin

Я добавляю это на случай, если это поможет кому-то еще. Для меня проблема заключалась в том, что я запускал Anaconda, а pip3 устанавливался в другой каталог, чем был связан Anaconda. Чтобы исправить этот пробег conda deactivate, Вы можете активировать позже с conda activate

В моем случае я изменил интерпретатор VSCode на ~/opt/anaconda3/bin/python. Это решило проблему.

Для меня проблема заключалась в том, чтоpip3.11устанавливает новые модули в/usr/local/lib/python3.11(или какая у вас версия Python), который не является путем, который двоичный файл Python учитывает при поиске модулей.

В качестве обходного пути вы можете указать путь к модулю в переменнойPYTHONPATHнравиться

      PYTHONPATH="/usr/local/lib/python3.11/site-packages/" python3.11 my_script.py

В качестве альтернативы можно указать каталог, в который pip должен помещать новые модули, с помощью-tвариант.

      # print module paths which are considered by python
python3.11
Python 3.11.3 (main, Apr  8 2023, 04:18:45) [Clang 14.0.0 (clang-1400.0.29.102)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python311.zip', '/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11', '/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload', '/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages']
      # install new module to one of the above listed directories
pip3.11 install my_module -t /opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages

В некоторых конкретных случаях, таких как криптомодуль в Python, после установки его в Pycharm мне придется найти путь к модулю «крипто», а затем изменить имя каталога на «Крипто».

Бежать brew doctorв терминале должно появиться предупреждение:

Warning: The following directories do not exist:
/usr/local/sbin

You should create these directories and change their ownership to your account.
  sudo mkdir -p /usr/local/sbin
  sudo chown -R $(whoami) /usr/local/sbin

тип sudo mkdir -p /usr/local/sbin в терминале и нажмите ввод, затем введите sudo chown -R $(whoami) /usr/local/sbinзатем запустите python и попробуйте импортировать ваш модуль снова.

Другие вопросы по тегам