Ответ 1
Попробуйте добавить sys.path.append
в список импорта.
import sys
sys.path.append("/Project/src/")
import root
import root.nested.tests
Я понимаю, что этот вопрос задавали несколько раз, но, прочитав их и сделав предложенные исправления, я все еще не могу понять.
Моя структура проекта выглядит следующим образом:
Project
|
src
|
root - has __init__.py
|
nested - has __init__.py
|
tests - has __init__.py
|
utilities - has __init__.py
|
services - has __init__.py
Я успешно запускаю unittest класс регрессии из Eclipse без каких-либо проблем.
Как только я попытался запустить тот же класс из командной строки (поскольку другие пользователи, которые будут работать с пакетом, не имеют доступа к Eclipse), я получаю сообщение об ошибке:
ImportError: No module named 'root'
Как вы можете видеть выше, корень модуля имеет __init__.py
Все модули __init__.py
полностью пусты.
И помощь будет с благодарностью воспринята.
Попробуйте добавить sys.path.append
в список импорта.
import sys
sys.path.append("/Project/src/")
import root
import root.nested.tests
Просто заметьте для всех, кто приходит к этой проблеме, используя то, что Gus E показал в ответе на прием, и некоторый дополнительный опыт. Я нашел следующее, чтобы быть очень полезным, чтобы гарантировать, что я могу запускать свои программы из командной строки на моей машине или на другом коллеге, если возникнет такая необходимость.
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))
Когда я выполняю метод "main", который находится в "вложенном" каталоге, он гарантирует, что каталог "src" будет добавлен в PYTHONPATH во время выполнения, что означает, что все последующие импорты не будут вызывать ошибку.
Очевидно, вам нужно настроить количество аргументов ".." методу os.path.join()
, определяемому местоположением в вашей программе, где ваш основной метод выполнен из
Если кто-нибудь приземлится здесь:
Я также столкнулся с этой ошибкой. В моем случае я использовал ~/my/path/
at path.sys.append(...)
, и исправление path.sys.append(...)
~
на явное имя пути (его можно узнать, если вы pwd
когда вы находитесь в linux). или используйте os.path.expanduser(..)
)
Еще один способ решить эту проблему без пути выглядит следующим образом: рассмотрим следующий код, где внутри вашей папки с именем "app" у вас есть 3 файла x.py, y.py и пустой init.py. Итак, для запуска x.py у вас есть импорт из y такой, что:
x.py
from app.y import say_hi
print ("ok x is here")
say_hi()
А также
y.py
print ("Im Y")
def say_hi():
print ("Y says hi")
поэтому структура папок будет выглядеть так:
testpy
app
__init__.py
x.py
y.py
Решение: в папке ДО приложения сделайте следующее:
$ python -m app.x
Примечание: я не использовал x.py (просто app.x)
Результат:
[email protected] MINGW64 ~/Desktop/testpy
$ python -m app.x
Im Y
ok x is here
Y says hi