Ошибка Python " ImportError: нет названного модуля"
Python установлен в локальном каталоге.
мое дерево каталогов выглядит так:
(local directory)/site-packages/toolkit/interface.py
мой код здесь:
(local directory)/site-packages/toolkit/examples/mountain.py
чтобы запустить пример, я пишу python mountain.py, и в коде у меня есть:
from toolkit.interface import interface
и я получаю ошибку:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
я уже проверил sys.path и там у меня есть каталог /site-packages. Кроме того, у меня есть файл __init__.py.bin в папке toolkit, чтобы указать Python, что это пакет. У меня тоже есть __init__.py.bin в каталоге examples.
Я не знаю, почему Python не может найти файл, когда он находится в sys.path. Есть идеи? Может ли это быть проблема с разрешениями? Мне нужно разрешение на выполнение?
21 ответов:
на основе ваших комментариев к посту orip, я думаю, что это случилось:
- вы редактировали
__init__.pyна windows.- редактор windows добавил что-то непечатное, возможно, возврат каретки (конец строки в Windows-CR/LF; в unix это только LF) или, возможно, CTRL-Z (конец файла windows).
- вы использовали WinSCP для копирования файла в ваш unix box.
- WinSCP подумал: "в этом есть что-то, что не является основным текстом; Я поставлю .расширение bin для указания двоичных данных."
- отсутствует
__init__.py(ныне__init__.py.bin) означает, что python не понимает инструментарий как пакет.- создать
__init__.pyв соответствующем каталоге и все работает... ?
тут
(local directory)/site-packages/toolkitесть
__init__.py?сделать импорт прогулка через ваши каталоги каждый каталог должен иметь .
On *nix, также убедитесь, что PYTHONPATH настроен правильно, особенно что он имеет такой формат:
.:/usr/local/lib/python(обратите внимание на
.:в начале, так что он может искать в текущем каталоге тоже.)Он также может быть в других местах, в зависимости от версии:
.:/usr/lib/python .:/usr/lib/python2.6 .:/usr/lib/python2.7 and etc.
я столкнулся с чем-то очень похожим, когда я делал это упражнение в LPTHW; я никогда не мог заставить Python признать, что у меня есть файлы в каталоге, из которого я звонил. Но в конце концов мне удалось заставить его работать. Что я сделал, и что я рекомендую, чтобы попробовать это:
(примечание: из вашего первоначального сообщения я предполагаю, что вы используете машину на основе *NIX и запускаете вещи из командной строки, поэтому этот совет адаптирован к этому. Поскольку я запускаю Ubuntu, это то, что я сделал)
1) изменить каталог (cd) в каталог выше каталог, в котором находятся ваши файлы. В этом случае вы пытаетесь запустить
mountain.pyфайл, и пытается вызватьtoolkit.interface.pyмодуль, которые находятся в отдельных каталогах. В этом случае вы перейдете в каталог, содержащий пути к обоим этим файлам (или, другими словами, в ближайший каталог, в котором находятся пути обоих этих файлов). Что в данном случае является
я решил свою собственную проблему, и я напишу резюме того, что было неправильно и решение:
файл должен быть вызван точно
__init__.py. Если расширение отличается, например, в моем случае.py.binтогда Python не может перемещаться по каталогам, а затем он не может найти модули. Для редактирования файлов необходимо использовать редактор Linux, например vi или нано. Если вы используете редактор Windows, это будет писать некоторые скрытые письмена.еще одна проблема, которая повлияла на это, заключалась в том, что у меня была другая версия Python, установленная корнем, поэтому, если кто-то работает с локальной установкой python, убедитесь, что установка Python, на которой запущены программы, является локальным Python. Чтобы проверить это, просто сделайте
which python, и посмотреть, если исполняемый файл в локальный каталог. Если нет, измените путь, но убедитесь, что локальный каталог Python находится раньше, чем другой Python.
простое решение-установить модуль с помощью
python -m pip install <library-name>вместоpip install <library-name>вы можете использовать sudo в случае административных ограничений
используя
PyCharm(часть JetBrains suite) вам нужно определить каталог скриптов как источник:Right Click > Mark Directory as > Sources Root
- у вас должен быть файл __ init__.py в том же каталоге, где это файл, который вы импортируете.
- вы не можете попытаться импортировать файл с тем же именем и быть файлом из 2 папок, настроенных на PYTHONPATH.
например: / etc / environment
PYTHONPATH=$PYTHONPATH:/opt / folder1:/opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
и, если вы пытаетесь импортировать файл foo, python не будет знать, какой из них вы хотите.
от импорта foo ... > > > importerror: нет модуля с именем foo
Юп. Вам нужен каталог, чтобы содержать
__init__.pyфайл, который является файлом, который инициализирует пакет. Вот, взгляните на этой.the __init__.py файлы необходимы для того, чтобы Python рассматривал каталоги как содержащие пакеты; это делается для предотвращения непреднамеренного скрытия допустимых модулей, которые возникают позже в пути поиска модуля, в каталогах с общим именем, например string. В простейшем случае __init__.py может просто быть пустым файл, но он также может выполнить код инициализации для пакета или установить переменную __all__, описанную ниже.
Linux: импортированные модули находятся в /usr / local/lib/python2. 7/dist-packages
Если вы используете модуль, скомпилированный в C, не забудьте chmod файл. so после
sudo setup.py install.sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so
в моем случае проблема была в том, что я связывался с debug
python&boost::Python, что требует, чтобы расширение былоFooLib_d.pydне толькоFooLib.pyd; переименование файла или обновлениеCMakeLists.txtсвойства Исправлена ошибка.
мои две копейки:
вертел:
Traceback (most recent call last): File "bash\bash.py", line 454, in main import bosh File "Wrye Bash Launcher.pyw", line 63, in load_module mod = imp.load_source(fullname,filename+ext,fp) File "bash\bosh.py", line 69, in <module> from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \ ImportError: No module named RecordGroupsэто смутило меня, черт возьми, - прошел через сообщения и сообщения, предлагающие уродливые хаки syspath (как вы видите мой
__init__.pyвсе есть). Ну вот и получается, что game/oblivion.py а игра / забвение сбивала с толку питона который выплюнул довольно бесполезный "нет модуля с именем RecordGroups". Мне было бы интересно найти обходной путь и / или ссылки, документирующие это (то же имя) поведение -> EDIT (2017.01.24) - посмотрите в что делать, если у меня есть модуль и пакет с тем же именем? интересно нормально пакетов имеет приоритет, но, по-видимому, наша пусковая установка нарушает это.EDIT (2015.01.17): я не упоминал, что мы используем custom launcher рассеченные здесь.
моя проблема была в том, что я добавлена в каталог с
__init__.pyфайл в PYTHONPATH, когда на самом деле мне нужно было добавить его родительский каталог.
если вы пробовали все методы, приведенные выше, но не удалось, возможно, ваш модуль имеет то же имя как встроенный модуль. Или модуль с то же имя существующий в папке, которая имеет высокий приоритет в
sys.pathчем ваш модуль.для отладки, скажем
from foo.bar import bazжалобыImportError: No module named bar. Изменение наimport foo; print foo, который покажет путьfoo. Это то, что вы ожидаете?если нет, либо переименовать
fooили использовать Абсолют импорт.
после того, как я просто страдал от той же проблемы, я обнаружил, что мое решение было удалить все
pycфайлы из моего проекта, похоже, что эти кэшированные файлы каким-то образом вызывают эту ошибку.самый простой способ я нашел, чтобы сделать это, чтобы перейти в папку проекта в проводнике Windows и поиск
*.pyc, затем выбрав все (Ctrl+A) и удалять их (Ctrl+X).возможно, я мог бы решить свои проблемы просто удалив конкретный но я никогда не пробовал это
я столкнулся с той же проблемой:
Import error. Кроме того, библиотека была установлена на 100% правильно. Источником проблемы было то, что на моем ПК 3 версии python (Anaconda packet) были установлены). Вот почему библиотека была установлена не в нужном месте. После этого я просто перешел на правильную версию python в моей IDE PyCharm.
исправлена моя проблема, написав
print (sys.path)и обнаружил, что python использует устаревшие пакеты, несмотря на чистую установку. Удаление их сделало python автоматически использовать правильные пакеты.
У меня была такая же ошибка. Это было вызвано тем, что кто-то создал папку в той же папке, что и мой скрипт, имя которой конфликтовало с модулем, который я импортировал из другого места. Вместо импорта внешнего модуля он заглянул в эту папку, которая, очевидно, не содержала ожидаемых модулей.
у меня была та же проблема (Python 2.7 Linux), я нашел решение, и я хотел бы поделиться им. В моем случае у меня была структура ниже:
Booklet -> __init__.py -> Booklet.py -> Question.py default -> __init_.py -> main.pyIn 'main.py" я безуспешно пробовал все комбинации ниже:
from Booklet import Question from Question import Question from Booklet.Question import Question from Booklet.Question import * import Booklet.Question # and many othet various combinations ...решение было гораздо проще, чем я думал. Я переименовал папку "буклет" в "буклет" и все. Теперь в Python можно импортировать как правило, вопрос класса с помощью в main.py' код:
from booklet.Booklet import Booklet from booklet.Question import Question from booklet.Question import AnotherClassот это я могу заключить, что имена пакетов (папки), такие как "буклет", должны начинаться с нижнего регистра, иначе Python путает его с именами классов и именами файлов.
видимо, это не ваша проблема, но Джон Fouhy это ответ очень хороший, и этот поток имеет почти все, что может вызвать эту проблему. Итак, это еще одна вещь, и я надеюсь, что это может помочь другим.
в моем случае я включал путь к пакету.яичная папка, а не фактический пакет под ней. Я скопировал пакет на верхний уровень, и это сработало.

Comments