Не удается импортировать модуль python, который определенно установлен (mechanize)
текущие проблемы с установкой python (2.7.3) на моей машине Ubuntu 12.04 и импортом модулей.
здесь у меня возникла проблема, когда я определенно установил mechanize как на своей машине, так и в различных виртуальных средах.
Я попытался установить из pip, easy_install и через python setup.py install
из этого РЕПО: https://github.com/abielr/mechanize.
все это безрезультатно, так как каждый раз, когда я ввожу свой python interactive, я получаю:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>
другие компьютеры, на которых я устанавливаю это, не имеют проблем (например, Mac или Windows-машина на работе, все хорошо, устанавливается и импортируется как обычно).
это почти сводит меня с ума в этот момент, и я просто хочу поработать.
обновить информацию (в ответ на комментарии):
выход из easy_install mechanize
и путь:
<me>@<host>:~$ sudo easy_install mechanize
[sudo] password for <me>:
Processing mechanize
Writing /home/<me>/mechanize/setup.cfg
Running setup.py -q bdist_egg --dist-dir /home/<me>/mechanize/egg-dist-tmp-zXwJ_d
warning: no files found matching '*.html' under directory 'docs'
warning: no files found matching '*.css' under directory 'docs'
warning: no files found matching '*.js' under directory 'docs'
mechanize 0.2.6.dev-20130112 is already the active version in easy-install.pth
Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
Processing dependencies for mechanize==0.2.6.dev-20130112
Finished processing dependencies for mechanize==0.2.6.dev-20130112
<me>@<host>:~$ ^C
<me>@<host>:~$ which pip
/home/<me>/bin/pip
<me>@<host>:~$ which python
/home/<me>/bin/python
<me>@<host>:~$ which easy_install
/home/<me>/bin/easy_install
<me>@<host>:~$
ВТОРОЕ ОБНОВЛЕНИЕ:
Кажется, что-то с mechanize, как будто я добавляю любой другой случайный пакет через pip, нет никаких проблем (в этом случае html5lib
)
ТРЕТЬЕ ОБНОВЛЕНИЕ (@DSM)
1)
>>> sys.path
['', '/home/<me>/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/virtualenvwrapper-2.11-py2.7.egg', '/home/<me>/src/geopy', '/home/<me>/local/lib/python2.7/site-packages/BeautifulSoup-3.2.0-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/django_sorting-0.1-py2.7.egg' ... <so on and so forth but mechanize is not here>]
>>>
2) *pretty long output of which most looks like:*
<me>@<host>:~$ ls -laR /usr/local/lib/python2.7/dist-packages/mech*
/usr/local/lib/python2.7/dist-packages/mechanize:
total 1144
...lots of other files, pretty much same permissions...
-rw-r--r-- 1 root staff 24916 Jan 11 01:19 _mechanize.py
...lots of other files...
3)
>>> import imp
>>> imp.find_module("mechanize")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>
ЧЕТВЕРТОЕ РЕДАКТИРОВАНИЕ (это становится смешно :/): Это похоже на проблему, которую я имел раньше (полное удаление и новая установка python на Ubuntu 12.04), где, если я запускаю все с sudo, это нормально, но я не знаю, должен ли я это делать... что случилось с разрешения?
15 ответов:
в моем случае это проблема разрешения. Пакет был каким-то образом установлен только с разрешением root rw, другой пользователь просто не может rw к нему!
у меня была та же проблема: скрипт
import colorama
бросал и ImportError, ноsudo pip install colorama
говорил мне "пакет уже установлен".мое исправление: запустите pip без sudo:
pip install colorama
. Затем Пип согласился, что его нужно установить, установил его, и мой скрипт запустился.моя среда Ubuntu 14.04 32-бит; я думаю, что видел это до и после того, как я активировал свой virtualenv.
обновление: еще лучше, использовать
python -m pip install <package>
. Преимущество это означает, что, поскольку вы выполняете конкретную версию python, в которой вы хотите получить пакет, pip однозначно установит пакет в "правильный" python. Опять,не в этом случае используйте sudo... затем вы получаете пакет в нужном месте, но, возможно, с (нежелательными) правами root.
это проблема пути python.
в моем случае у меня установлен python:
/ Библиотека / Фреймворки / Python.framework / Versions / 2.6 / bin / python,
и в python2.6 нет каталога site-packages.
пакет (SOAPpy), установленный pip, находится
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
и site-package не находится в пути python, все, что я сделал, это добавить site-packages в PYTHONPATH постоянно.
- открыть терминал
- тип открытые .файл
в текстовом файле, который появляется, добавьте эту строку в конце:
экспорт PYTHONPATH=$PYTHONPATH:/System/Library/Frameworks / Python.framework / Versions / 2.6 / lib / python2. 6/site-packages/
- сохраните файл, перезагрузите терминал, и все готово
механизм импорта Python работает, действительно, так:
- твой путь питона неверен,
- ваша библиотека не установлена, где вы думаете, что это
- у вас есть еще одна библиотека с тем же именем, маскирующая этот
я стучал головой о свой монитор на этом, пока молодой хип-стажер не сказал мне, что секрет в том, чтобы "python setup.py установить"в директории модуля.
по какой-то причине запуск установки оттуда делает его просто работать.
чтобы быть ясным, если имя вашего модуля "foo":
[burnc7 (2016-06-21 15:28:49) git]# ls -l total 1 drwxr-xr-x 7 root root 118 Jun 21 15:22 foo [burnc7 (2016-06-21 15:28:51) git]# cd foo [burnc7 (2016-06-21 15:28:53) foo]# ls -l total 2 drwxr-xr-x 2 root root 93 Jun 21 15:23 foo -rw-r--r-- 1 root root 416 May 31 12:26 setup.py [burnc7 (2016-06-21 15:28:54) foo]# python setup.py install <--snip-->
Если вы попытаетесь запустить setup.py из любого другого каталога, вызывая его путь, вы в конечном итоге с borked install.
НЕ Работа:
python /root/foo/setup.py install
РАБОТАЕТ:
cd /root/foo python setup.py install
в моем случае я побежал
pip install Django==1.11
и он не будет импортировать изpython
переводчик.просматривая команды Пипа я нашел
pip show
, который выглядел вот так:> pip show Django Name: Django Version: 1.11 ... Location: /usr/lib/python3.4/site-packages ...
обратите внимание, что расположение говорит "3.4". Я обнаружил, что
python
-команда была связана сpython2.7
/usr/bin> ls -l python lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7
рядом с этим я нашел ссылку под названием
python3
так что я использовал это. Вы также можете изменить ссылкуpython3.4
. Это тоже все исправит.
Я не мог заставить мой PYTHONPATH работать должным образом. Я понял, добавив
export
Исправлена ошибка:(сделал работу)
export PYTHONPATH=$PYTHONPATH:~/test/site-packages
и
(не работает)
PYTHONPATH=$PYTHONPATH:~/test/site-packages
я столкнулся с этим при попытке использовать брелок, который я установил через
sudo pip install keyring
. Как упоминалось в других ответах, в моем случае это проблема с разрешениями.что сработало для меня:
- удалил брелок:
sudo pip uninstall keyring
- Я суда
-H
опция и переустановленный брелок:
sudo -H pip install keyring
надеюсь, что это помогает.
У меня была эта точная проблема, но ни один из ответов выше не работал. Это сводило меня с ума, пока я не заметил, что sys.путь был другим после того, как я импортировал из родительского проекта. Оказалось, что я использовал importlib для написания небольшой функции, чтобы импортировать файл не в иерархии проекта. Плохая идея: я забыл, что сделал это. Еще хуже, что процесс импорта испорчен с помощью sys.путь--и оставил его таким образом. очень плохая идея.
решение было остановить это, и просто поместите файл, который мне нужно было импортировать в проект. Другой подход состоял бы в том, чтобы поместить файл в свой собственный проект, так как его нужно время от времени перестраивать, и перестройка может совпадать или не совпадать с перестройкой основного проекта.
у меня была эта проблема с 2.7 и 3.5, установленными в моей системе, пытаясь проверить Бот telegram с Python-Telegram-Bot.
Я не мог заставить его работать после установки с Pip и pip3, с sudo и без. Я всегда получал:
Traceback (most recent call last): File "telegram.py", line 2, in <module> from telegram.ext import Updater File "$USER/telegram.py", line 2, in <module> from telegram.ext import Updater ImportError: No module named 'telegram.ext'; 'telegram' is not a package
чтение сообщения об ошибке правильно говорит мне, что python ищет в текущем каталоге
telegram.py
. И правильно, у меня там лежал сценарий под названием telegram.py и это было загружено python, когда я позвонилimport
.заключение, убедитесь, что у вас нет никаких
package.py
в текущей рабочей директории при попытке импорта. (И внимательно прочитайте сообщение об ошибке).
python -m pip install
- помог мне решить эту проблему. Я начал сталкиваться с этой проблемой после обновленияpython to 2.7.14
(от12
)
Я смог исправить эту проблему с помощью комбинированного подхода. Во-первых, я последовал совету Криса, открыл командную строку и набрал "pip show packagename" Это обеспечило расположение установленного пакета.
затем я открыл python и набрал "import sys", затем " sys.путь', чтобы показать, где мой python ищет любые пакеты, которые я импортирую. Увы, место, показанное на первом шаге, не было в списке.
последний шаг, я набрал - sys.путь.функции append('package_location_seen_in_step_1'). При необходимости можно повторить шаг два, чтобы увидеть расположение теперь в списке.
шаг теста, попробуйте импортировать пакет снова... это работает.
недостаток? Это временно, и вам нужно добавлять его в список каждый раз.
у меня была аналогичная проблема (в Windows), и основной причиной в моем случае было антивирус программное обеспечение! Он имеет функцию "автоматического сдерживания", которая обертывает запущенный процесс с помощью какой-то виртуальной машины. Симптомы:
pip install somemodule
отлично работает в одном окне cmd-line иimport somemodule
сбой при запуске из другого процесса с ошибкойModuleNotFoundError: No module named 'somemodule'
Я надеюсь, что это сэкономит некоторое время кому-то :)
при установке через
easy_install
илиpip
, он успешно завершается? Что такое полный выход? Какую установку python вы используете? Возможно, вам придется использоватьsudo
перед командой установки, если вы устанавливаете модули в системный каталог (если вы используете установку System python, возможно). В вашем вопросе не так много полезной информации, но некоторые инструменты, которые, вероятно, помогут включить:
echo $PYTHONPATH
и/илиecho $PATH
: при импорте модулей Python ищет одну из этих переменных среды (списки каталогов,:
с разделителями) для нужного модуля. Проблемы с импортом часто возникают из-за отсутствия правильного каталога в этих списках
which python
,which pip
илиwhich easy_install
: они расскажут вам о местоположении каждого исполняемого файла. Это может помочь узнать.использовать virtualenv, как предлагает @JesseBriggs. Он очень хорошо работает с
pip
чтобы помочь вам изолировать и управлять модулями и средой для отдельных проектов Python.