Модули устанавливаются с помощью 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)
Темы уже проверены
Я проверил следующие темы, но, к сожалению, они не помогли мне решить проблему:
- установка pyside с использованием PIP - nmake не найден
- PIp устанавливает, но модуль не найден ==> мог бы дать правильный ответ, но приведенные ссылки больше не работают
- google.protobuf установлен, но модуль не найден
- Модуль установки Python pip не найден. Как связать Python с местоположением в пипсах?
Есть идеи, в чем проблема?
9 ответов
Поскольку ваша проблема может быть вызвана различными причинами, я перечислил некоторые из них здесь:
- Возможно, это связано с тем, что здесь указано: Pip устанавливается, но модуль не найден. Обновили ответ с новой ссылкой.
Ссылка, которую вы искали: https://pythonhosted.org/setuptools/setuptools.html
- Это также может произойти, если у вас установлены две версии python. Если
pip
у вас есть доступ к одной версии, а используемый интерпретатор python - другая.
Так что просто убедитесь, что вы используете одну и ту же версию python для установки и использования пакета.
Вы можете исправить это, используя псевдоним,
Сначала настройте псевдоним оболочки:
alias python=/usr/local/bin/python3
Затем введите это в командной строке или введите ~/.bashrc
так что всякий раз, когда вы открываете python из терминала, открывается правильная версия.
- Если оба вышеуказанных метода не работают для вас, проверьте это:
Здесь ответ, который работал, что в основном то, что было объяснено в комментариях вопроса. Однако я подумал, что было бы полезно объяснить это как четкий и хорошо структурированный ответ.
Как было подчеркнуто, проблема заключалась в том, что я не использовал интерпретатор, для которого устанавливался 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 еще раз, указав место назначения модулей, которые будут установлены. Это должен быть пункт назначения для системного / стандартного питона.
Это было сделано в два этапа:
- Downloding
get-pip.py
от http://bootstrap.pypa.io/get-pip.py Устанавливаем его с помощью следующей команды
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 и попробуйте импортировать ваш модуль снова.