Функция модуля Python не определена

Я пытаюсь импортировать модуль в свой скрипт Python, и я не могу заставить его работать. Итак, у меня есть свой скрипт на Python: /home/user/pythonscript/oneDir/onescript.py И я хотел бы использовать скрипт, который является каталогом выше по иерархии: /home/user/pythonscript/common.py Итак, я сделал следующее вверху моего файла onescript.py:

import sys
sys.path.insert(1,'/home/user/pythonscript')
import common

В моем файле common.py у меня есть функция onecConnect, и когда я пытаюсь запустить onescript.py, который использует функцию onecConnect, я получаю следующую ошибку: nameError: имя 'onecConnect' не определено

Кто-нибудь может увидеть, что я делаю неправильно или забыл сделать? Спасибо


person Melodie Gauthier    schedule 07.11.2014    source источник
comment
Какова трассировка ошибки?   -  person Simeon Visser    schedule 07.11.2014
comment
Вы делаете onecConnect() или common.onecConnect()?   -  person Kevin    schedule 07.11.2014
comment
В консоли единственное, что я вижу, это Traceback (самый последний вызов): файл onescript.py, строка 25, в ‹module› s = oneConnect() NameError: имя 'onecConnect' не определено, я вызываю onecConnect, не обычно .onecConnect (пробовал и получил кучу ошибок)   -  person Melodie Gauthier    schedule 07.11.2014


Ответы (1)


Убедитесь, что во всех каталогах есть __init__.py, перейдите в /home/user/pythonscript и запустите оттуда код Python. Так:

python oneDir/onescript.py

В onescript.py вы можете сделать:

from common import onecConnect

Правила таковы:

  • Всегда запускайте скрипт Python из максимально возможного каталога (не из самого глубокого в проекте).
  • Всегда иметь полные строки импорта, без относительного импорта.

Это держит проблемы подальше.

person Simeon Visser    schedule 07.11.2014
comment
мне действительно нужно импортировать каждую функцию, которую я хочу использовать, из «общего»? Я думал, что могу просто импортировать common, а затем использовать все функции, которые в нем есть?! - person Melodie Gauthier; 07.11.2014
comment
@MelodieGauthier: да, это тоже возможно. Это зависит от ваших предпочтений и того, сколько функций вам нужно. - person Simeon Visser; 07.11.2014
comment
да, это тоже возможно.. Итак... Как ты это делаешь? - person Kevin; 07.11.2014