Невозможно импортировать файлы в Python

1

Я написал код Python, который разделен на пару файлов, т.е.

record_1.py
record_2.py
record_3.py
record_4.py
main.py

Все эти файлы помещаются в общую папку:

/user/mario/python/sampletest

Когда я пытаюсь импортировать вышеуказанные файлы в main.py, он дает ошибку. Выполняя приведенную ниже команду:

$] python  main.py
ImportError: No module named record_1

Ниже представлен код main.py:

import jaydebeapi
import record_1,record_2,record_3,record_4


def main():
def teradata_conn():
    try:
        conn_teradata = jaydebeapi.connect(jclassname='com.teradata.jdbc.TeraDriver',
                                           url="jdbc:teradata://10.10.10.10",
                                           driver_args=['@user','@pass'],
                                           jars=['/user/mario/python/jar/tdgssconfig.jar','/user/mario/python/jar/terajdbc4.jar'])
        print("Connection was successful")            
        record_1()
        record_2()
        record_3()
        record_4()

    except Exception as e:
        print(e)


if __name__ == '__main__':
    main()

Любая помощь или предложение заслуживают высокой оценки.

import sys
print (repr(sys.path))


['', '/user/mario/anaconda2/lib/python27.zip', 
'/user/mario/anaconda2/lib/python2.7', 
'/user/mario/anaconda2/lib/python2.7/plat-darwin',
'/user/mario/anaconda2/lib/python2.7/plat-mac', 
'/user/mario/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages', 
'/user/mario/anaconda2/lib/python2.7/lib-tk', 
'/user/mario/anaconda2/lib/python2.7/lib-old', 
'/user/mario/anaconda2/lib/python2.7/lib-dynload', 
'/user/mario/anaconda2/lib/python2.7/site-packages', 
'/user/mario/anaconda2/lib/python2.7/site-packages/aeosa', 
'/user/mario/anaconda2/lib/python2.7/site
packages/IPython/extensions', 
'/user/mario/.ipython']
Теги:

3 ответа

2
Лучший ответ

(информация от https://docs.python.org/2/library/sys.html#sys.path):

Для import для работы каталог, в котором находятся модули, должен находиться в пути (sys.path). Путь, как правило, включает в себя каталог, в котором скрипт вы работаете находится, но это может быть нарушено, если Python не может определить, где именно (например, если вы делаете что - то вроде python <script.py). В таких случаях Python должен добавить пустую строку в путь, что означает "текущий каталог".

Из вывода print (repr(sys.path)) кажется, что скрипт был запущен таким образом, чтобы Python не знал, где он находится, - Python вставил пустую строку "" в качестве первого элемента в пути, это происходит, когда вы делаете что-то вроде этого:

python  </usr/mario/python/sampletest/main.py

Пути системных модулей (.../anaconda2/lib/...) предлагают установку Python, с которой я не знаком. Если вы на самом деле выполняли команду точно так же, как вы ее цитировали (python main.py - когда текущий каталог находится там, где есть основной и модули), он должен был python main.py но в вашей установке команда python может представлять собой некоторый сценарий оболочки, который изменяет каталоги или делает другие вещи перед запуском интерпретатора, который его испортит.

Несмотря на то, что у него не было "/usr/mario/python/sampletest" в пути, наличие "" в пути заставляет Python искать модули в текущем каталоге. Учитывая, что в вашем случае у вас произошел сбой, это означает, что (во время запуска скрипта) текущий каталог не был /usr/mario/python/sampletest. Посмотрите, какой import os; print (os.getcwd()) import os; print (os.getcwd()) даст вам, если это не каталог ваших модулей, это объяснит.

Вероятные решения для решения проблемы, выберите в зависимости от ваших потребностей:

  • дать полный путь к вашему скрипту на python, например python/usr/mario/python/sampletest/main.py.
  • попробуйте убедиться, что текущий каталог: /usr/mario/python/sampletest при запуске скрипта. Использование import os; os.chdir("something") import os; os.chdir("something") перед другим импортом тоже.
  • установите переменную PYTHONPATH в этот каталог (например, если ваша оболочка sh или bash: PYTHONPATH=/usr/mario/python/sampletest python main.py
  • измените sys.path [], чтобы включить ваш каталог, например sys.path.insert(0, "your-modules-path"), как это предлагается в другом ответе здесь.
  • 0
    Спасибо, Лео. Я поделился выводом с основным вопросом.
  • 0
    Я попробовал то, что вы предложили, но все еще не получил результат. Поделились результатами в оригинальном вопросе.
Показать ещё 2 комментария
0

Я не эксперт в Python. Я смутно помню, как я столкнулся с этой проблемой, и когда я добавил следующее, это сработало. Но опять же, я пытался импортировать модули, которые находятся в другом каталоге.

sys.path.insert(0,'/user/mario/python/sampletest')
  • 0
    Какое значение (0, '')?
  • 0
    Вот ссылка на пост, который объяснил значение stackoverflow.com/questions/31291608/…
Показать ещё 2 комментария
-3

Поместите место после каждой запятой. Импортируйте файл1, file2, file3

  • 1
    Это ничего не сделает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню