Ошибка импорта, даже если файл явно находится в пути - PullRequest
0 голосов
/ 06 марта 2020

Я запускаю скрипт и получаю сообщение об ошибке:

Traceback (most recent call last):
  File "common/tensorflow/run_tf_benchmark.py", line 30, in <module>
    from common.base_benchmark_util import BaseBenchmarkUtil
ModuleNotFoundError: No module named 'common'

Я работаю на экземпляре ec2 со следующим AMI: Deep Learning AMI (Ubuntu 16.04) Версия 25.0 (ami-025c308193ac1a136) и я также работаю в среде анаконды tenorflow_p36, которая поступает из AMI. Моя директория Ubuntu имеет следующую структуру:

home
--ubuntu
  --benchmark_models
    --benchmark    
      --common
        --__init__.py
        --base_benchmark_util.py
        --tensorflow
          --run_tf_benchmark.py
          --__init__.py

Обратите внимание, что в каталоге есть другие файлы, но это соответствующие python файлы. В настоящее время значения импорта в верхней части run_tf_benchmark.py равны

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function


import sys
sys.path.append('/home/ubuntu/benchmark_models/benchmarks/common')
print(sys.path)
from argparse import ArgumentParser
from common.base_benchmark_util import BaseBenchmarkUtil

, а напечатанный путь sys.path равен

['/home/ubuntu/benchmark_models/benchmarks/common/tensorflow', '/home/ubuntu/src/cntk/bindings/python',
 '/home/ubuntu/benchmark_models/models/image_recognition/tensorflow/mobilenet_v2', '/home/ubuntu/models',
 '/home/ubuntu/models/research', '/home/ubuntu/models/research/slim', 
'/home/ubuntu/anaconda3/lib/python36.zip', '/home/ubuntu/anaconda3/lib/python3.6', 
'/home/ubuntu/anaconda3/lib/python3.6/lib-dynload', '/home/ubuntu/anaconda3/lib/python3.6/site-packages',
 '/home/ubuntu/benchmark_models/benchmarks/common']

. Я отчетливо вижу общее в пути python, но ошибка импорта все еще происходит. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Хорошо, я решил проблему. Проблема заключалась в том, что я добавил / home / ubuntu / benchmark_models / benchmarks / common, а не / home / ubuntu / benchmark_models / benchmarks /. Благодаря тестам импорта он также позволил импортировать общий код для всего моего другого кода.

0 голосов
/ 06 марта 2020

Просто удалите «общие» при импорте, потому что вы уже находитесь в «общей» директории

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function


import sys
sys.path.append('/home/ubuntu/benchmark_models/benchmarks/common')
print(sys.path)
from argparse import ArgumentParser
from base_benchmark_util import BaseBenchmarkUtil
...