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
в каталоге примеров.
Я не знаю, почему Python не может найти этот файл, когда он находится в sys.path
. Есть идеи? Может ли это быть проблемой с правами доступа? Нужно ли мне какое-то разрешение на выполнение?
Судя по вашим комментариям к сообщению orip', я полагаю, что именно это и произошло:
__init__.py
на windows.__init__.py
(теперь называется __init__.py.bin
) означает, что python не понимает toolkit как пакет.__init__.py
в соответствующем каталоге, и все работает... ?Я столкнулся с чем-то очень похожем, когда я делал это упражнение в LPTHW; я никогда не мог получить Python, чтобы признать, что у меня файлы в каталоге, я звоню из. Но мне удалось заставить его работать в конце концов. Что я сделал, и то, что я рекомендую, чтобы попробовать это:
(Примечание: из вашего первоначального поста, я предполагаю, что вы используете *Никс машине и работает из командной строки, так что этот совет подойдет именно для этой. Так как я запускаю Ubuntu, это то, что я сделал)
Перейдите в каталог (CD) в каталог выше каталог файлов. В этом случае, вы'вновь пытается запустить файл mountain.py и пытается вызвать
toolkit.interface.pyмодуль, которые находятся в отдельных каталогах. В этом случае вам нужно перейти в каталог, содержащий пути для обоих эти файлы (или другими словами, ближайший каталог, что пути обоих этих файлов акцию). В данном случае это папка
инструментарий`.
Когда вы находитесь в tookit каталога, введите следующую строку кода в командной строке:
экспорт PYTHONPATH=.`
Это устанавливает ваш PYTHONPATH, чтобы ".", который в основном означает, что ваш PYTHONPATH теперь будет искать любые файлы в каталог, который вы в настоящее время, (а точнее, в поддиректорию филиалы каталог в котором вы находитесь. Так что это не'Т просто смотреть в текущем каталоге, но и во всех каталогах, которые в ваш текущий каталог).
инструментарий
). Питон теперь следует найти и загрузить модули, которые вы указали.Надеюсь, что это помогает. Я был очень расстроен с этим сам.
На *Nix, также убедитесь, что PYTHONPATH правильно настроен, тем более, что он имеет такой формат:
.:/usr/local/lib/python
(Ума .:
в самом начале, так что он может искать в текущем каталоге тоже.)
Он также может быть в других местах, в зависимости от версии:
.:/usr/lib/python
.:/usr/lib/python2.6
.:/usr/lib/python2.7 and etc.
Я решена моя проблема, и я напишу резюме из вещей, которые были неправильными и решение:
Файл должен быть назван именно __init__.py
. Если расширение другое, например в моем случае `.пы.Бен тогда питон не может двигаться через каталоги, а потом он не может найти модули. Для редактирования файлов нужно использовать редактор Linux, например, ви или нано. Если вы используете редактор Windows это будет писать какие-то скрытые символы.
Еще одна проблема, которая затрагивает то, что я имел другую версию Python установлен на корню, так что если кто-то работает с локальной установки Python, будьте уверены, что установка Python, который работает под управлением программы является местный питон. Чтобы проверить это, вобще, по которым питон`, и посмотреть, если исполняемый файл в локальный каталог. Если нет, то измените путь, но будьте уверены, что локальный каталог Python-это прежде чем другой питон.
простое решение заключается в установке модуль, используя питон -м пункт Установить <библиотека-имя>
вместо пункт Установить <библиотека-имя>
вы можете использовать sudo в случае ограничения администратора
Используя PyCharm (часть из компании JetBrains люкс) вам необходимо определить свой скрипт каталога как источник:<БР>
Щелкните правой кнопкой мыши > пометить каталог как > источники корень
ЮП. Вам нужен каталог, содержащий файл `init.py является файл, который инициализирует пакет. Вот, взгляните на это.
и GT; \файлы_init__.py требуется сделать питона лечить каталогов, содержащих пакеты; это делается для предотвращения каталоги с общим именем, таких как строки, от умысла скрываться действительное модули, которые происходят позже в модуле путь поиска. В простейшем случае, __init__.py может быть просто пустой файл, но он также может выполнять код инициализации пакета или установить __all_\ переменной, описанной позже.
например: /и т. д./среды
PYTHONPATH=$PYTHONPATH:/опт/папка1:/опт/папка2
/опт/папка1/ФОО
/опт/папка2/ФОО
И, если вы пытаетесь импортировать файл foo, что Python не знаю, какой вы хотите.
от импорта фу ... >>> importerror: нет модуль с именем foo
Вы читаете этот ответ говорит, что ваш __init__.py в нужном месте, вы установили все зависимости и вы по-прежнему получать
ImportError`.
Я столкнулся с похожей проблемой, за исключением, что моя программа будет работать нормально, когда побежал, используя PyCharm, но сообщение об ошибке выше, когда я запустить его из терминала. После дальнейшего копания, я обнаружил, что PYTHONPATH
не'т иметь запись для каталога проекта. Итак, я поставил PYTHONPATH
в импорт оператор работает на PyCharm, но не с терминала:
export PYTHONPATH=$PYTHONPATH:`pwd` (OR your project root directory)
Там'ы другой способ сделать это с помощью представления sys.путь` как:
import sys
sys.path.insert(0,'<project directory>') OR
sys.path.append('<project directory>')
Вы можете использовать вставлены в том порядке, в котором вы хотите, чтобы ваш проект, чтобы быть найдены.
Мои два цента:
Вертел:
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 и". Я'd быть заинтересованы в обход и/или ссылки в качестве подтверждения (то же имя) поведение -и GT; редактировать (2017.01.24) - взгляните на что если у меня есть модуль и пакет с тем же именем?]2 Интересно нормально packages взять верх, но, видимо, наш лаунчер нарушает это.
Редактирование (2015.01.17): я не говорил, что мы использовать настраиваемый лаунчер рассеченные здесь.
Линукс: импортированные модули находятся в /usr/местные/библиотека/вместо python2.7/дист-пакеты
Если вы're, используя модуль компилируется в C, Дон'т забудьте выдать .так файл после судо setup.py установите`.
sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so
Моя проблема была в том, что я добавлена в каталог с файлом `init.py в PYTHONPATH, когда на самом деле мне нужно, чтобы добавить его родительский каталог.
В моем случае, проблема была у меня была привязка к отладка питон
& увеличить::питон
, которая предполагает, что расширение будет FooLib_d.ПДС, не просто
FooLib.ПДС; переименование файла или обновления свойств CMakeLists.txt
Исправлена ошибка.
В моем случае, потому что я'м, используя PyCharm и PyCharm создать 'venv' для каждого проекта в папке проекта, но это только мини-конверты из кожи питона. Хотя у вас установлены необходимые библиотеки в Python, но в пользовательском проекте 'venv', он не доступен. Это реальная причина 'ImportError: нет модуль с именем хххххх' произошел в PyCharm. Чтобы устранить эту проблему, необходимо добавлять библиотеки к проекту на заказ конверты на следующие действия:
Наслаждаться.
Если вы перепробовали все способы, представленные выше, но не удалось, может быть, ваш модуль имеет тем же именем как встроенный модуль. Или модуль с одно название существующий в папке, которая имеет высокий приоритет в таблице sys.путь, чем ваш модуль'ов.
Для отладки, сказать свои ФОО.бар импорт базжалоб
ImportError: нет модуль с именем бар. Изменение импорта фу; печать фу, который покажет путь фу
. Это то, что вы ожидаете?
Если нет, либо переименовать Foo
либо использовать абсолютное импорт.
Для всех тех, у кого еще есть эта проблема. Я считаю, что Pycharm путается с импортом. Для меня, когда я пишу 'из пространства имен импортировать что-то', предыдущая строка становится подчеркнуто красным, сигнализируя, что есть ошибка, но работает. Однако ''от .пространство имен импортировать что-то' Не'т получить подчеркнул, но и не't работа.
Попробовать
try:
from namespace import something
except NameError:
from .namespace import something