Не удается импортировать модуль python, который определенно установлен (механизировать)
текущие проблемы с установкой python (2.7.3) на моей машине Ubuntu 12.04 и импортом модулей.
здесь у меня проблема, когда я определенно установил mechanize как на моей машине, так и в различных виртуальных средах.
Я попытался установить из pip, easy_install и via 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 на работе, все хорошо, устанавливается и импортируется как обычно).
это почти сводит меня с ума в этот момент, и я просто хочу поработать.
обновить информацию (в ответ на комментарии):
Out put of 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 / версии / 2.6 / bin / python,
и в python2 нет каталога пакетов сайтов.6.
пакет (SOAPpy), установленный pip, находится
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
и site-package не находится в пути python, все, что я сделал, это добавить site-packages в PYTHONPATH постоянно.
- открыть терминал
- тип открытые .файл
-
в текстовом файле, который появляется, добавьте эту строку в конце:
экспорт PYTHONPATH=$PYTHONPATH:/система/библиотека/фреймворки / Python.фреймворк / версии / 2.6/lib / python2.6 / сайт-пакеты/
- сохраните файл, перезапустите терминал, и все готово
механизм импорта 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, я нашел 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-Бот.
Я не мог заставить его работать после установки с 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 ищет любые пакеты, которые я импортирую. Увы, места, показанного на первом шаге, в списке не оказалось.
последний шаг, я набрал 'Сыс.путь.функции 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 ищет одну из этих переменных среды (списки каталогов,:
delimited) для модуля, который вы хотите. Проблемы с импортом часто возникают из-за отсутствия правильного каталога в этих спискахwhich python
,which pip
илиwhich easy_install
: они сообщат вам местоположение каждого исполняемого файла. Это может помочь узнать.использовать virtualenv, как предлагает @JesseBriggs. Он очень хорошо работает с
pip
чтобы помочь вам изолировать и управлять модулями и средой для отдельных проектов Python.
Если вы научитесь использовать virtualenv (что довольно просто), у вас будет меньше этих проблем. Вы просто создадите virtualenv, а затем будете использовать локальные (для проекта) пакеты.
Это решает много головной боли для меня с пути, версий и т. д.