Я написал код 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']
(информация от 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/usr/mario/python/sampletest/main.py
./usr/mario/python/sampletest
при запуске скрипта. Использование import os; os.chdir("something")
import os; os.chdir("something")
перед другим импортом тоже.PYTHONPATH=/usr/mario/python/sampletest python main.py
Я не эксперт в Python. Я смутно помню, как я столкнулся с этой проблемой, и когда я добавил следующее, это сработало. Но опять же, я пытался импортировать модули, которые находятся в другом каталоге.
sys.path.insert(0,'/user/mario/python/sampletest')
Поместите место после каждой запятой. Импортируйте файл1, file2, file3